Linux 实用操作命令

时间:2022-09-02 17:57:56

1. ssh远程连接服务器命令  ssh [username@]hostname

2. 查看远程服务器近期登陆记录  last

3. 用户及其主目录的创建

  1.  useradd –d /home/lb -m 用户名  可以创建一个名为lb的用户,主目录为/home/lb,选项-m表示如果主目录不存在则创建。

  2. userdel 用户名  删除一个用户

  3. passwd 选项 用户名  用于对口令做一些更改

  4. usermod 选项 用户名  用于对用户的配置做修改,与useradd中的选项一样。

  5. cat /etc/passwd  用来察看所有的用户

4. 将新建的用户加入sudo用户组

  使用root用户权限修改 vi /etc/sudoers 加上 user_name ALL = (ALL) ALL 一行。

5. 切换用户使用 su 命令

  su username  切换用户,但是不更改环境变量

  su - username  切换用户,并更改到当前用户的环境变量

6. 从网络上下载资源文件

  curl -O http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  从支持的http,ftp等协议从给定的URL执行操作,选项-O表示下载到的文件就以资源文件的名字命名。如果出现下载失败,可能是当前用户组对目录不具有w权限,需要使用sudo命令。

7. 查找当前已经安装的软件包

  rpm -qa  会显示所有安装的软件包

  rpm -qa | grep ssh  会显示与ssh相关的软件包

8. 利用ssh连接进行远程拷贝命令

  scp /Users/hope/Downloads/hadoop-2.8.0.tar.gz lb@10.3.242.98:/home/lb

  将本地路径下的 hadoop-2.8.0.tar.gz 拷贝到远程服务器 [[用户名 @ ] 主机地址 : 路径

  如果是拷贝文件夹的话,需要加上选项 -r

9. 察看服务器和操作系统相关信息

  uname -a  服务器信息

  cat /etc/issue  操作系统的发行版本  

10. 查找指定目录下以y开头的文件

  find ./ -name "y*"

11. 察看当前所有的进程及占用端口

  netstat -a -t --numeric-ports -p

12. 解压缩命令

  1. 解压命令

    tar -zxvf jdk-8u131-linux-x64.tar.gz -C temp/ 将压缩包解压到当前目录的 temp 子目录下

  2. 压缩命令

    tar -zcvf tmp.tar.gz ./test 将当前目录下的 test 文件夹,按照 zip 压缩方式压缩成 tmp.tar.gz 

13. 关于 /etc/profile 配置文件和环境变量的写法

  关键字的含义:

  PATH:告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到哪些目录下去寻找。

  CLASSPATH:告诉 Java 执行环境,在哪些目录下可以找到执行 Java 程序所需要的类或者包(如.jar文件)。

  特殊字符的写法:

  : 表示并列含义,如果一个环境变量有多个,用:号进行分离。

  . 表示执行操作的当前目录。

  所以经常看到 export $PATH = /usr/java/jdk1.8.0:$PATH 表示环境变量在之前的环境变量上加上 Java 的安装路径,相同名字的环境变量后写入的起作用。

  另外:~/.bash_profile 存储的是当前用户的环境变量,如果只是想使用此用户时有特定的环境变量,可以直接在该文件中作更改,同样是使用 source ~/.bash_profile 使文件生效。

14. Jar (Java ARchive 文档)

  是一种与平台无关的文件格式,可以将多个文件合成一个文件,支持压缩。可以用于将写好的类进行打包,方便类库的发布和传输。与ZIP文件的区别在于,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。

  1. jar 创建并显示打包过程

    jar cvf hello.jar hello/*

  2. 显示 jar 包里的所有内容

    jar tvf hello.jar

  3. 解压 jar 包

    jar xvf hello.jar

  4. -C 选项用于先切换到指定目录下再执行该条 jar 命令

 15. source 命令的功能是执行一个shell,它和直接执行 ./a.sh 的区别在于:

  比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,如果你用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同它就是在本shell中执行的,所以可以看到结果。

 16. crontab 命令用于定时执行 shell 命令

  基本格式 : 
  *  *  *  *  *  command 
  分 时   日   月  周   命令 

  例子: */2 0,12 * * * python /home/libo/bjh_search.py

  表示在0时和12时每隔两分钟执行一次 python 程序。
  第1列表示分钟1~59 每分钟用*或者 */1表示 
  第2列表示小时1~23(0表示0点) 
  第3列表示日期1~31 
  第4列表示月份1~12 
  第5列标识号星期0~6(0表示星期天) 
  第6列要运行的命令 

  记住几个特殊符号的含义:

         “*”代表取值范围内的数字,
         “/”代表”每”,
         “-”代表从某个数字到某个数字,
         “,”分开几个离散的数字

  在命令行输入 crontab -e 即可创建时程表,wq 保存即可。

  用 crontab -l 命令可查看当前的 crontab 。

  /sbin/service crond start 用于启动服务。

  如果 crond 服务事先已启动,那么当前用户直接编辑保存后即可生效。

  注:在定时执行 python 程序时,如果涉及文件的 IO 操作,一定要写完整路径。因为脚本在执行时,是通过 crontab 去执行的,因此执行目录会变成当前用户的 home 目录,如果是 root ,就会在/root/下执行。

  1. 路径问题

    使用 crontab 部署定时任务时,默认的当前路径为部署任务的用户的home路径下,比如用户名为spider的用户为/home/spider。可以在执行命令中做目录变更。

  2. 环境变量问题

    因为 crontab 启动的命令并不读当前的 .profile ,因此所有程序的环境变量需要用程序或shell自己去设置,解决方法就是在执行shell脚本的业务逻辑前先初始化操作系统的环境变量配置文件.profile或.bash_profile。比如:*/1 * * * * source ./.bash_profile && cd ./libo/email_auto && python rep_timeliness.py

  3. 执行日志

    在 /var/log/cron 中,察看需要有root权限

17. ctrl + R 输入搜索字符,可以察看相关的历史命令

18. echo ftp://`hostname``readlink  -f tmp.tar.gz `

  可以输出当前文件夹下 tmp.tar.gz 文件的ftp地址:

  ftp://cp01-scholar-offline-dev02.epc.baidu.com/home/work/tmp.tar.gz

  wget 上述地址可以获取这个文件

19. Vim 快捷键

  1. 屏幕滚动

   gg 快速跳到文档头部

     G 快速跳到文档底部

     Ctrl + U 向上滚动半屏

   Ctrl + D 向下滚动半屏

   Ctrl + B 向上滚动一屏

     Ctrl + F 向下滚动一屏

  2. 修改 Vim 的配置文件

   vim ~/.vimrc

     set tabstop=4
   set softtabstop=4
     set shiftwidth=4
         set noexpandtab / expandtab

   set autoindent

     其中:

     tabstop 表示一个 tab 显示出来是多少个空格的长度,默认 8。

    softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。

    shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样。

     当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。

     设置 autoindent 自动缩进,即按回车时每行的缩进与上一行相同,设置 noautoindent 取消缩进。

  3. 行首、行尾快速移动

    1. 0 移至行首

    2. $ 移至行尾

  4. 查找操作

    在命令行:后输入/查找字段即可。例如 :/status 查找status字段。

    n 键可以跳到下一个,N 键跳到上一个。

20. tail -f 文件名

  可以监控文件尾部的更新

21. 命令模式下 shift + '#' 可以高亮搜索当前字符串

  :nohlsearch 取消搜索

22. Linux 命令行光标移动命令

  ctrl + 'a' 迅速移动到行首

  ctrl + 'e' 迅速移动到行尾

23. sendmail 服务 /usr/sbin/sendmail

  1. 邮件系统解释

    邮件服务器构成了邮件系统的核心。每个收信人都有一个位于某个邮件服务器上的邮箱(mailbox)。首先,当你将 E-mail 输入到你的计算机开始发送时,会根据 SMTP(Simple Mail Transfer Protocol) 和 TCP/IP 协议将你的信件打包,并加注信件头后送到你所属服务商的服务器上,然后邮件服务器会根据你加注的信件头传到下一个邮件服务器,依次往下传输,直到到达接收用户所属服务商的邮件服务器,保存在服务器上用户的 E-mail 邮箱里,用户个人终端通过与服务器的连接取走邮件。

  2. 名词解释

    1. MUA (Message User Agent)

      邮件用户代理,通常我们的 Client 端电脑都没法直接寄信,所以需要通过 MUA 来帮助我们传递信件,不管是收信还是寄信,都要依赖各个系统提供的 MUA (Foxmail 和 Outlook) 帮我们传递信件才能使用邮件系统。

    2. MTA (Message Transfer Agent)

      邮件传输代理,MUA 是用在客户端上的软件,MTA 就是用在主机上的软件,用于监视 MUA 的请求,找出对方的 MTA,把信送到对方的 MTA 服务器,或者把信收到邮件队列。

    3. MDA (Message Deliver Agent)

      邮件投递代理,把信最终投递到具体的用户;主要功能是将MTA所收到的信件,依照信件的流向(送到那里去)来将该信件放置到本机账户下的邮件档案中(mailbox_收件箱),或者再经由MTA将这个信件发送到下个MTA。

  3. sendmail 服务

    通过脚本调用 sendmail 服务配合 crontab 就可以完成邮件的定时自动发送,主要包括指定接收方的邮箱地址和完成邮件内容的书写,邮件内容可以选择传递 html 格式的内容。比如使用 python 调用服务时,就将对应每行的 html 内容从上到小组织成一个列表,然后将列表的每行用 '\n' 连接起来组成完整的 html 语句,进行传递即可。

  send_mail = 'formail -I  "MIME-Version:1.0" -I "Content-type:text/html;charset=utf-8" -I "Subject:=?utf-8?B?%s?=" -I "TO:%s" | /usr/sbin/sendmail %s' % (subject, users, users)

    sub = subprocess.Popen(send_mail, shell=True, stdin=subprocess.PIPE)

  slice_num = sub.communicate(html)

  上述语句是完成 sendmail 服务的调用,其中需要的参数 user 是用 ' ' 连接的多个邮件接收地址的字符串,html 为邮件的内容,subject 为邮件主题。

24. 清屏命令

  clear 或者快捷键 ctrl + l

25. wc 命令

  1. 命令格式

    wc [选项] 文件

  2. 命令功能

    统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

  3. 命令参数

    -c 统计字节数

    -l 统计行数

    -m 统计字符数

    -w 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串

    -L 打印最长行的长度

26. & nohup 标准输入输出流

  1. 标准输入输出流

    操作系统中有三个常用的流:

      0:标准输入流 stdin

      1:标准输出流 stdout

      2:标准错误流 stderr

    一般当我们用 > console.txt,实际上是 1 > console.txt 的简略用法;< console.txt 是 0 < console.txt 的简略用法。

  2. 输出重定向 > 和 >> 的区别

    > 和 >> 都是输出重定向到文件,如果文件不存在,就创建文件。区别在于,如果文件存在,> 会将文件清空,然后再向文件输入;>> 会将新的内容追加到原有文件的尾部。

  3. & 命令

    当在前台运行某个作业时,终端会被该作业占据;可以在命令的尾部加上 & 实现后台运行,例如:sh test.sh &

    注意,需要用户交互的程序不要放在后台进行,否则机器会在后台等待用户交互。一般来说作业在后台执行一样会把结果输出到终端屏幕,这时我们可以选择将输出重定向,使后台执行的作业输出到我们指定的文件中。例如:command > output.file 2>&1 & 

    2>&1 将标准错误流重定向到标准输出流中,而标准输出流又在之前重定向到 output.file 文件中,所以所有的标准输出流和标准错误流都会输出到 output.file 文件中去。至于为什么必须将标准错误流重定向到标准输出流中,而不能直接重定向到文件,比如 2 > output.file 会出错,是因为标准错误流没有缓存区,而标准输出流 stdout 有缓存区。为什么直接要写为 2>&1 ,因为 2>1 系统会自动认为 1 是一个文件,而 & 与 1 结合为 &1 就代表了标准输出流。

  4. nohup 命令

    使用 & 命令在后台执行的作业,虽然当前控制台没有被占用,但是一旦把当前控制台关闭(退出账户时),作业就会停止运行。nohup (no hang up)命令可以帮助用户在退出账户后仍然继续执行相应的进程。

    如果使用 nohup 提交作业,在缺省情况下,该作业的所有输出都被重定向到当前目录下的 nohup.out 文件中,也可以使用重定向运算符自定义重定向。例如:nohup comand > out.file 2>&1 &

    使用 nohup 命令后,如果在当前账户非正常退出或结束的时候,命令也有可能自动结束了,所以最好是使用 exit 正常退出当前用户。

  5. ctrl + z

    将当前前台执行命令放到后台,并处于暂停状态

  6. ctrl + c

    终止前台命令

27. make 命令

  1. 命令作用

    根据 Makefile 文件的指示去构建文件。make 命令后给出需要构建的目标(可以有多个,用空格隔开),然后就根据 Makefile 文件中,每个目标的前置条件和执行命令来构建对应的目标(通常为文件)。例如:make clean && make result.txt

    上述命令先执行了 clean 伪目标将原有的结果文件删除,然后再构建新的 result.txt 文件。

  2. Makefile 文件结构

    由一系列的规则(rules)构成,每条规则的形式如下:

    <target>: <prerequisites>

    [tab] <commands>

    target:一般情况下为文件名,为该条规则想要生成的目标文件。也可以为伪目标用来执行对应的命令,如删除现有的某个文件。

    prerequisites:前置条件通常是一组文件名,它指定了“目标”是否重新构建的判断标准:只要有一个前置文件不存在,或者有过更新(前置文件的last-modification时间戳比目标的时间戳新),“目标”就需要重新构建。

    commands:为构建文件所需要执行的具体方法,命令前需要有一个 Tab 缩进。详细介绍见:http://www.ruanyifeng.com/blog/2015/02/make.html