ps
ps -ef 是用标准的格式显示进程的、其格式如下:
ps aux 是用BSD的格式来显示、其格式如下:
pstree
pstree -sp 显示一个进程的 父进程 与 子进程
grep
语法:
grep [OPTIONS] PATTERN [FILE…]
常用选项:
-i 忽略大小写
-o 只输出匹配到的部分(而不是整个行,正则语法)
-v 反向选择,即输出没有没有匹配的行
-c 计算找到的符号行的次数
-n 顺便输出行号
-w 精准匹配
-A<显示行数> : 向前输出多少行
-B<显示行数> : 向后输出多少行
-E:在扩展正则模式下
-P:在Perl正则模式下 (非贪婪模式下要用到该参数,默认的正则模式不支持非贪婪)
ps -ef|grep nginx|grep -v "grep"|awk '{print $2}'
找到nginx的进程信息,排除带有"grep"的行,然后进行切割并打印出切割后数组里第二个参数
常见问题:
某一行的内容太多,只想要其一部分?
注意:使用正则需要转义
grep -o ".\{0,10\}xxx.\{0,100\}" xxx.log
文件太大,查找耗时很长?
tail -n 10000 xxx.log | grep -o ".\{0,10\}xxx.\{0,100\}"
匹配任意一个?
grep -E "aaa|bbb|ccc" xxx.log
匹配同时满足多个条件?
grep "aaa.*ccc" xxx.log
打印对应行的上下文
grep "xxx" xxx.log -C 10
;&&||
- 分号分隔:命令按顺序从左到右依次执行,如果某个命令执行出错了,直接跳到下一个命令继续执行!(这个比较危险,慎用)
- “&&”:这个和编程语言中的功能很相似,短路效果,如果某个命令执行出错了,后面的命令全部被忽略!
- “||”:忽略第一个有效命令后的所有命令。如果第一个命令就成功了,那后面的都被忽略;如果第一个命令失败,则继续执行第二个,如果第二个成功了,那后面的命令被忽略;以此类推..
stat
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
<a name="5gygu"></a>
### nohup
& : 指在后台运行<br />nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
```shell
只输出错误信息到日志文件: nohup ./program >/dev/null 2>program.log &
什么信息也不要:nohup ./program >/dev/null 2>&1 &
/dev/null是一个虚拟的空设备(类似物理中的黑洞),任何输出信息被重定向到该设备后,将会石沉大海
>/dev/null 表示将标准输出信息重定向到"黑洞"
2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,
即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”)
xargs
语法:somecommand |xargs [-item] command
-a file 从文件中读入作为sdtin
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-e flag ,注意可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag的时候就停止。
例子:解压一个文件夹下的所有.tar.gz的压缩包
find *.tar.gz | xargs -n1 tar -xvf
find
语法:find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
参数:
不设置任何参数,则 find 命令将在当前目录下查找子目录与文件
find . -name "*.c" # 将目前目录及其子目录下所有延伸档名是 c 的文件列出来
find . -type f # 将目前目录其其下子目录中所有一般文件列出(f普通文件d目录l符号连结..)
find /data -type f # 列出/data目录及其子目录下的所有一般文件
which
which指令会在环境变量$PATH设置的目录里查找符合条件的文件
$ which bash
/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 登陆进行安全的远程文件拷贝命令
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2
简易写法:
scp [可选参数] file_source file_target
参数:
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
本地复制到远端
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
多个文件,用空格隔开
scp local_file1 local_file2 remote_username@remote_ip:remote_file
从远程复制到本地
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
注意
scp /tmp remote_ip:/tmp 是将本地的tmp目录及tmp下的文件或目录,放到远端的/tmp下
scp /tmp/ remote_ip:/tmp 同上
scp /tmp/* remote_ip:/tmp 这样才是将本地tmp下的文件或目录,放到远端的/tmp下
scp /tmp/. remote_ip:/tmp 功能同上
ps: golang用ssh或exec包,调用scp /tmp/* remote_ip:/tmp,有坑,写成scp /tmp/. remote_ip:/tmp即可
例子:
expect <<-EOF
set timeout 7200
spawn scp -r test1.txt root@118.89.111.148:/home
expect {
"*yes/no" { send "yes\n"; exp_continue }
"*password" { send "***\n" }
}
expect
EOF
解析:
1.定义一个区域
expect <<-EOF
.....
EOF
2.设定超时
set timeout 7200
3.根据命令解析
#spanwn 在expect下执行shell脚本
spawn scp -r test1.txt root@127.0.0.1:/home
#expect对通过spawn执行的shell脚本的返回进行判断
expect {
#判断返回包含 "*yes/no"
#send:如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
"*yes/no" { send "yes\n"; exp_continue }
"*password" { send "****\n" }
}
expect
awk
# 不指定-F 默认的分隔符为空格
# 表示把file文件中的每行以“:”分割后,打印出第一个字段
awk -F: '{print $1}' file
# 配合管道使用,表示把verPath的值按“/”分割后,打印出最后一个字段
echo $verPath|awk -F"/" '{print $NF}'
# 打印log.txt中,包含“this”的行
awk '/this/ ' log.txt
忽略大小写:
awk 'BEGIN{IGNORECASE=1} /this/' log.txt
ssh
expect <<-EOF
set timeout 7200
spawn ssh -p 41122 uhome@10.81.248.16 "rm -rf /data/uhome/deploy/1111111111111;"
expect {
"*yes/no" { send "yes\n";}
"*password" { send "密码\n" }
}
expect
EOF
rsync
rsync,是一种远程同步,高效的数据备份的工具。第一次备份完全备份,以后备份就是差异备份
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
常见参数:
-a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等
-v , --verbose 复杂的输出信息
--exclude=PATTERN 排除符合匹配规则的文件
--exclude-from=FILE 从指定文件中读取需要排除的文件
--include=PATTERN 指定符合匹配规则的文件
--include-from=FILE 从文件中读取需要传输的文件
--delete 删除那些DST中SRC没有的文件
[root@ansible-server /]# rsync /tmp/ /home/ #将/tmp下所有文件传输到/home下
[root@ansible-server /]# rsync /tmp /home/ #将/tmp下所有文件包含文件夹tmp传输到/home下
#使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,
不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。
tail、head、sed
tail -n +/-数字 文件名
head -n 数字 文件名
sed -n "开始行,结束行p" 文件名
sed
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e 以选项中指定的script来处理输入的文本文件。
-f 以选项中指定的script文件来处理输入的文本文件。
-n 仅显示script处理后的结果。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
// a: 在第4行的后面,新增一行
sed -e 4a\newLine testfile
// d: 删除第2到第5行
sed '2,5d'
sed '3,$d' // $: 表示最后一行
// p: 以行号查询文件
sed -n "开始行,结束行p" 文件名
// s: 替换文本
sed 's/old/new/'
// 搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed '/root/p'
// 删除/etc/passwd所有包含root的行,其他行输出
nl /etc/passwd | sed '/root/d'