列出一些常用的命令的参数和例子,方便自己查阅和上手

建议采用command 小抄!!

pip install cheat

例如:cheat tar

#find find命令用来在指定目录下查找文件,默认以递归的方式

###选项

1
2
3
4
5
6
:::text
-maxdepth <目录层级> : 设置最大目录层级;
-exec <执行指令> : 假设find指令的回传值为True,就执行该指令;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf <输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;

###常见用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
:::text
find /home -name "*.txt"  #在/home目录下查找以.txt结尾的文件名
find /home -iname "*.txt" #同上,但忽略大小写
find /usr/ -path "*local*" #匹配文件路径或者文件
find . -regex ".*\(\.txt\|\.pdf\)$" #基于正则表达式匹配文件路径
find . -iregex ".*\(\.txt\|\.pdf\)$" #同上,但忽略大小写

#根据文件时间戳进行搜索
find . -type f -atime -7  #搜索最近七天内被访问过的所有文件
find . -type f -amin +10  #搜索访问时间超过10分钟的所有文件

#根据文件类型进行搜索
find . -type 类型参数(f 普通文件/d 目录)


#根据文件大小进行匹配
find . -type f -size +10k  #搜索大于10KB的文件 (M:兆字节,G:吉字节)
find . -type f -size +1G   #搜索大于1G的文件

#根据文件权限/所有权进行匹配
find . -type f -user wwj  #找出当前目录用户wwj拥有的所有文件

#grep grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

###选项

1
2
3
4
5
6
7
8
:::text
-i : 不区分大小写地搜索。默认情况区分大小写 (ignore case)
-l : 只列出匹配的文件名 (ls?)
-r/R : 递归(recurse)搜索
-n : 显示行号信息(num)
-c : 计算符合pattern的列数。(count)
-C : 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-v : 反转(reverse)查找(不匹配)

###常见用法

1
2
3
4
5
6
7
8
:::text
grep match_pattern file_name 
grep "match_pattern" file_name
grep "match_pattern" file_name --color=auto #标记匹配颜色
grep -E "[1-9]+"  #使用正则表达式,等效于egrep
grep "text" . -r -n #当前目录下递归搜索
echo this is a text line | grep -e "is" -e "line" -o  #多种匹配方式
seq 10 | grep "5" -C 3  # 显示匹配某个结果的前三行和后三行

#sed sed是一种流编辑器,用程序的方式来编辑文本。sed 是基于行的,因此按顺序对每一行执行命令。
使用单引号来括起 sed 命令的习惯

###选项

1
2
3
4
5
6
:::text
s : 替换指定字符
/g : 替换每一行中的所有匹配,当需要从第N处匹配开始替换时,可以使用 /Ng
d : 删除操作
-e: 允许在同一行里执行多条命令
a\ : 追加到行下,i\ 追加到行上

###常见用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
:::text
grep -rl picDir ./ | xargs sed -i 's/picDir/picPath/g' # 重构项目时,重命名变量
sed 's/book/books/' file #替换文本中的字符串
sed -n 's/test/TEST/p' file #-n选项和p命令一起使用表示只打印那些发生替换的行
sed -i 's/book/books/g' file #匹配file文件中每一行的第一个book替换为books
sed 's:test:TEXT:g' #可以使用任意的定界符
sed '/^$/d' file #删除空白行
sed '2,$d' file #删除文件的第2行到末尾所有行
sed '/^test/d' file #删除文件中所有开头是test的行
echo this is a test line | sed 's/\w\+/[&]/g' 
#[this] [is] [a] [test] [line]
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
#this is 7 in a number
sed -n '/test/,/check/p' file #test和check所确定的范围内的行都被打印
sed -n '5,/^test/p' file #打印从第5行开始到第一个包含以test开始的行之间的所有行
sed '/test/,/west/s/$/aaa bbb/' file #test和west之间的行,每行的末尾用字符串aaa bbb替换
sed -e '1,5d' -e 's/test/check/' file #第一条命令删除1至5行,第二条命令用check替换test
sed '/^test/a\this is a test line' file #将 this is a test line 追加到 以test 开头的行后面

#正则
sed -n '/[34]/ p ' source.txt  #匹配包含3或4的行
sed -n '/^[0-9]\{3,5\}$/ p' numbers.txt
$sed -e 's/#.*//' -e '/^$/ d' /etc/profile #删除所有注释行和空行

#修改源文件和备份
sed -ibak 's/Ian/IAN/' source.txt #-i会修改源文件,但是可以同时使用bak备份

#xargs xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs的默认命令是echo,空格是默认定界符

xargs与-exec的区别:-exec会为处理每一个匹配到的文件而发起一个相应的进程。可能占用过多资源。 而使用xargs命令则只有一个进程,顺序执行

###选项

1
2
3
:::text
-d : 指定定界符
-I : 指定一个替换字符串{}

###常见用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
:::text
echo "nameXnameXnameXname" | xargs -dX  
#name name name name

echo "nameXnameXnameXname" | xargs -dX -n2 
#name name 
#name name

echo 'axaxa' |xargs -dx -n1 -I {} echo b{}
#ba
#ba
#ba

ls *.jpg | xargs -n1 -I cp {} /data/images #复制所有图片文件到 /data/images 目录下
find . -type f -name "*.py" -print0 | xargs -0 wc -l  #统计python代码行数
#等效于find . -type f -name "*.py"  | xargs  wc -l 吧

cat url-list.txt | xargs wget -c #下载文件里的所有链接

#seq seq命令用于产生从某个数到另外一个数之间的所有整数

###选项

1
2
3
4
:::text
-f : 使用printf 样式的浮点格式
-s : 使用指定字符串分隔数字(默认使用:\n)
-w : 在列前添加0 使得宽度相同

###常见用法 touch (seq -f “%03g-4.mp3” 1 10)

#$()

###常见用法 cp gogs-repositories/ gogs-repositories_$(date “+%Y-%m%d”) -R

#tree ###选项

1
2
3
4
5
:::text
-d : 仅显示目录
-L : 限制目录的最大深度
-C : 在文件和目录清单加上色彩,便于区分各种类型;
-f:在每个文件或目录之前,显示完整的相对路径名称;

###常见用法 tree -ah –du

#ln ###选项

1
2
3
4
:::text
-s或--symbolic:对源文件建立符号连接,而非硬连接;
-d或-F或--directory:建立目录的硬连接;
-i或--interactive:覆盖既有文件之前先询问用户;

###常见用法

1
2
:::text
ln -s /usr/mengqc/mub1 /usr/liu/abc  #在目录/usr/liu下建立一个符号链接文件abc,使它指向目录/usr/mengqc/mub1

#streams(input,output and redirect) streams

###常见用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
:::text
# output of ls will be written to list.txt
ls -l > list.txt

# append output to list.txt
ls -a >> list.txt

# all errors will be written to errors.txt
grep da * 2> errors.txt

# read from errors.txt
less < errors.txt

#逻辑判断

###常见用法

1
2
3
4
5
if [[ 2 -ne 1 ]]; then
  echo "true"
else
  echo "false"
fi

#实用案例 ###递归替换 grep -rl 'ajax.googleapis.com' ./ | xargs sed -i 's#ajax.googleapis.com#ajax.useso.com#g'

作用 : 把./目录及其子目录下的ajax.googleapis.com替换为ajax.useso.com(实用360CDN替换google CDN)

解释:

1
2
3
4
5
:::text
-r : 递归
-l : 只列出文件名
xargs : 拼接命令
-i : sed 原地替换

###批量生成文件 touch (seq -f "%03g-1.mp3" 1 10)(fish下用()替代$())

批量生成001-1.mp3到010-1.mp3

#date ###常见用法

  • echo $(date +"%Y_%m_%d_%S") #2016_02_22_53
  • echo $(date +“s”) #从1970至今的秒数

#tar ###常见用法

1
2
tar -zcvf /tmp/etc.tar.gz /etc #打包后,以 gzip 压缩
tar -zxvf /tmp/etc.tar.gz #解压

du

du -hls * // 列出当前目录下所有文件/目录的大小 du -hls * | grep G //查找大目录

定时任务

cron用于例行性的任务,at用于一次性的任务

at

1
2
3
4
at now+1 minute
cowsay 'hello at'  >/tmp/test
#atq 查看任务
# at -c 8 #查看数字对应任务的具体内容

mac下有问题:Mac OS X: at command not working

cron

sudo crontab -e

暂停并在后台运行命令

  • CTRL + Z -暂停应用程序
  • fg -重新将程序唤到前台

#参考