ps

ps -ef 是用标准的格式显示进程的、其格式如下:
image.png
ps aux 是用BSD的格式来显示、其格式如下:
image.png

pstree

pstree -sp 显示一个进程的 父进程 与 子进程
image.png

grep

语法:
grep [OPTIONS] PATTERN [FILE…]

  1. 常用选项:
  2. -i 忽略大小写
  3. -o 只输出匹配到的部分(而不是整个行,正则语法)
  4. -v 反向选择,即输出没有没有匹配的行
  5. -c 计算找到的符号行的次数
  6. -n 顺便输出行号
  7. -w 精准匹配
  8. -A<显示行数> : 向前输出多少行
  9. -B<显示行数> : 向后输出多少行
  10. -E:在扩展正则模式下
  11. -P:在Perl正则模式下 (非贪婪模式下要用到该参数,默认的正则模式不支持非贪婪)
  12. ps -ef|grep nginx|grep -v "grep"|awk '{print $2}'
  13. 找到nginx的进程信息,排除带有"grep"的行,然后进行切割并打印出切割后数组里第二个参数
  14. 常见问题:
  15. 某一行的内容太多,只想要其一部分?
  16. 注意:使用正则需要转义
  17. grep -o ".\{0,10\}xxx.\{0,100\}" xxx.log
  18. 文件太大,查找耗时很长?
  19. tail -n 10000 xxx.log | grep -o ".\{0,10\}xxx.\{0,100\}"
  20. 匹配任意一个?
  21. grep -E "aaa|bbb|ccc" xxx.log
  22. 匹配同时满足多个条件?
  23. grep "aaa.*ccc" xxx.log
  24. 打印对应行的上下文
  25. grep "xxx" xxx.log -C 10

;&&||

  • 分号分隔:命令按顺序从左到右依次执行,如果某个命令执行出错了,直接跳到下一个命令继续执行!(这个比较危险,慎用)
  • “&&”:这个和编程语言中的功能很相似,短路效果,如果某个命令执行出错了,后面的命令全部被忽略!
  • “||”:忽略第一个有效命令后的所有命令。如果第一个命令就成功了,那后面的都被忽略;如果第一个命令失败,则继续执行第二个,如果第二个成功了,那后面的命令被忽略;以此类推..

stat

查看文件的信息
image.png

wc

  • -c或—bytes或—chars 只显示Bytes数。
  • -l或—lines 只显示行数。
  • -w或—words 只显示字数。 ```shell wc testfile # testfile文件的统计信息
    3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598

wc testfile testfile_1 testfile_2 #统计三个文件的信息
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708

  1. <a name="5gygu"></a>
  2. ### nohup
  3. & : 指在后台运行<br />nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
  4. ```shell
  5. 只输出错误信息到日志文件: nohup ./program >/dev/null 2>program.log &
  6. 什么信息也不要:nohup ./program >/dev/null 2>&1 &
  7. /dev/null是一个虚拟的空设备(类似物理中的黑洞),任何输出信息被重定向到该设备后,将会石沉大海
  8. >/dev/null 表示将标准输出信息重定向到"黑洞"
  9. 2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,
  10. 即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”)

xargs

语法:somecommand |xargs [-item] command

  1. -a file 从文件中读入作为sdtin
  2. -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
  3. -e flag ,注意可能会是-Eflag必须是一个以空格分隔的标志,当xargs分析到含有flag的时候就停止。
  4. 例子:解压一个文件夹下的所有.tar.gz的压缩包
  5. find *.tar.gz | xargs -n1 tar -xvf

find

语法:find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
参数:

  1. 不设置任何参数,则 find 命令将在当前目录下查找子目录与文件
  2. find . -name "*.c" # 将目前目录及其子目录下所有延伸档名是 c 的文件列出来
  3. find . -type f # 将目前目录其其下子目录中所有一般文件列出(f普通文件d目录l符号连结..)
  4. find /data -type f # 列出/data目录及其子目录下的所有一般文件

which

which指令会在环境变量$PATH设置的目录里查找符合条件的文件

  1. $ which bash
  2. /bin/bash #bash可执行程序的绝对路径

expect

安装:

  • apt-get install tcl
  • apt-get install expect

expect是一个自动交互功能的工具。expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断要进行的交互输入内容(send)

scp

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令

  1. scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
  2. [-l limit] [-o ssh_option] [-P port] [-S program]
  3. [[user@]host1:]file1 [...] [[user@]host2:]file2
  4. 简易写法:
  5. scp [可选参数] file_source file_target
  6. 参数:
  7. -1 强制scp命令使用协议ssh1
  8. -2 强制scp命令使用协议ssh2
  9. -4 强制scp命令只使用IPv4寻址
  10. -6 强制scp命令只使用IPv6寻址
  11. -B 使用批处理模式(传输过程中不询问传输口令或短语)
  12. -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
  13. -p:保留原文件的修改时间,访问时间和访问权限。
  14. -q 不显示传输进度条。
  15. -r 递归复制整个目录。
  16. -v:详细方式显示输出。scpssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
  17. -c cipher cipher将数据传输进行加密,这个选项将直接传递给ssh
  18. -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh
  19. -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh
  20. -l limit 限定用户所能使用的带宽,以Kbit/s为单位。
  21. -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
  22. -P port:注意是大写的P, port是指定数据传输用到的端口号
  23. -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

本地复制到远端

  1. scp local_file remote_username@remote_ip:remote_file
  2. 或者
  3. scp local_file remote_ip:remote_folder
  4. 多个文件,用空格隔开
  5. scp local_file1 local_file2 remote_username@remote_ip:remote_file

从远程复制到本地

  1. scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3

注意

  1. scp /tmp remote_ip:/tmp 是将本地的tmp目录及tmp下的文件或目录,放到远端的/tmp
  2. scp /tmp/ remote_ip:/tmp 同上
  3. scp /tmp/* remote_ip:/tmp 这样才是将本地tmp下的文件或目录,放到远端的/tmp下
  4. scp /tmp/. remote_ip:/tmp 功能同上

ps: golang用ssh或exec包,调用scp /tmp/* remote_ip:/tmp,有坑,写成scp /tmp/. remote_ip:/tmp即可

例子:

  1. expect <<-EOF
  2. set timeout 7200
  3. spawn scp -r test1.txt root@118.89.111.148:/home
  4. expect {
  5. "*yes/no" { send "yes\n"; exp_continue }
  6. "*password" { send "***\n" }
  7. }
  8. expect
  9. EOF
  10. 解析:
  11. 1.定义一个区域
  12. expect <<-EOF
  13. .....
  14. EOF
  15. 2.设定超时
  16. set timeout 7200
  17. 3.根据命令解析
  18. #spanwn 在expect下执行shell脚本
  19. spawn scp -r test1.txt root@127.0.0.1:/home
  20. #expect对通过spawn执行的shell脚本的返回进行判断
  21. expect {
  22. #判断返回包含 "*yes/no"
  23. #send:如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
  24. "*yes/no" { send "yes\n"; exp_continue }
  25. "*password" { send "****\n" }
  26. }
  27. expect

awk

image.png

  1. # 不指定-F 默认的分隔符为空格
  2. # 表示把file文件中的每行以“:”分割后,打印出第一个字段
  3. awk -F: '{print $1}' file
  4. # 配合管道使用,表示把verPath的值按“/”分割后,打印出最后一个字段
  5. echo $verPath|awk -F"/" '{print $NF}'
  6. # 打印log.txt中,包含“this”的行
  7. awk '/this/ ' log.txt
  8. 忽略大小写:
  9. awk 'BEGIN{IGNORECASE=1} /this/' log.txt

ssh

  1. expect <<-EOF
  2. set timeout 7200
  3. spawn ssh -p 41122 uhome@10.81.248.16 "rm -rf /data/uhome/deploy/1111111111111;"
  4. expect {
  5. "*yes/no" { send "yes\n";}
  6. "*password" { send "密码\n" }
  7. }
  8. expect
  9. EOF

rsync

  1. rsync,是一种远程同步,高效的数据备份的工具。第一次备份完全备份,以后备份就是差异备份
  2. Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  3. Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
  4. 常见参数:
  5. -a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等
  6. -v , --verbose 复杂的输出信息
  7. --exclude=PATTERN 排除符合匹配规则的文件
  8. --exclude-from=FILE 从指定文件中读取需要排除的文件
  9. --include=PATTERN 指定符合匹配规则的文件
  10. --include-from=FILE 从文件中读取需要传输的文件
  11. --delete 删除那些DSTSRC没有的文件
  1. [root@ansible-server /]# rsync /tmp/ /home/ #将/tmp下所有文件传输到/home下
  2. [root@ansible-server /]# rsync /tmp /home/ #将/tmp下所有文件包含文件夹tmp传输到/home下
  3. #使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,
  4. 不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。

tail、head、sed

  1. tail -n +/-数字 文件名
  2. head -n 数字 文件名
  3. sed -n "开始行,结束行p" 文件名

sed

  1. sed [-hnV][-e<script>][-f<script文件>][文本文件]
  2. 参数说明:
  3. -e 以选项中指定的script来处理输入的文本文件。
  4. -f 以选项中指定的script文件来处理输入的文本文件。
  5. -n 仅显示script处理后的结果。
  6. 动作说明:
  7. a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  8. d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  9. i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  10. p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  11. s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
  1. // a: 在第4行的后面,新增一行
  2. sed -e 4a\newLine testfile
  3. // d: 删除第2到第5行
  4. sed '2,5d'
  5. sed '3,$d' // $: 表示最后一行
  6. // p: 以行号查询文件
  7. sed -n "开始行,结束行p" 文件名
  8. // s: 替换文本
  9. sed 's/old/new/'
  10. // 搜索 /etc/passwd有root关键字的行
  11. nl /etc/passwd | sed '/root/p'
  12. // 删除/etc/passwd所有包含root的行,其他行输出
  13. nl /etc/passwd | sed '/root/d'