TMOUT=0
vi
:set nu 显示行号
:set ignorecase 忽略大小写 :set ic
:set showmatch 设置匹配模式
:set hlsearch 高亮显示搜索结果
/ 向后搜索
?向前搜索
cp
-f force
-p 保留原文件的属性(作者,权限,时间)
-r 递归复制
scp
scp 文件名 用户名@目标IP:目标路径
ls
-h human readable
-l long list format
-r reverse order
-S sort by size
-t sort by time
-R list subdirectories recursively
常用 ls-lrt
tar -zcvf 压缩包名 待压缩文件目录
stat 查看文件详情
lsblk 显示存储设备信息
du
-a 显示全部目录和子目录下的每个档案占用的磁盘空间
-h human readable
-s 只显示各档案大小的综合
--exclude= 略过制定文件夹或目录
示例
du -ahx /home |awk '$1 ~/(^.G|..G)/'
说明 ^ 匹配输入字符串的开始位置
. 匹配除换行符之外的任意单个字符
选择,用圆括号将所有选择项括起来,相邻选项用 | 分割
df -h 目录 显示目录对应的文件系统及大小
find
find 目录 -选项 动作[-print -exec]
-L 注意:find遇到软连接不会递归进入,加上-L 选下即可(不能跟type混用)
-i 忽略大小
-size 根据文件大小搜索
-atime 访问时间 -7查找7天内访问的文件
-mtime 修改时间 +7查找7天前被修改的
-type 文件类型: l 软连接
-a 且
-o 或
-exec 对匹配的文件执行命令,格式
-exec command {} \; 为每个找到的结果执行命令。
注意{} 和 \ 之间的空格
注意, {} 是占位符,代表find找到的每个文件, \;代表结束-exec命令,告知find命令参数已结束,这里的分号不能少,反斜杠类似于转义字符。
还有一种语法,格式如下,
-exec command {} + 表示对所有结果参数执行命令一次,注意command只执行一次
例 find /tmp -mtime +30 -exec rm -rf {} \;
这种方式文件名有空格等特殊字符也可以处理。
find . -name '*.gz' -exec zgrep -H 'test' {} \;
说明,-H 显示每个匹配的文件名
find . -name '*.gz'|xargs zgrep 'test'
xargs
-I 指定参数的占位符,默认占位符是{}
find -mtime -1 |xargs -I {} rm -rf {}
注意:要删除带有空格的文件名,必须要指定 -I {}
grep
-i 忽略大小写
-r 递归目录
-H 显示文件名
-v 反转匹配
-n 显示行号
-E 正则表达式 例如 grep -E "word1|word2|word3" file.txt
-A # 显示匹配结果之后的#行
-B # 显示匹配结果之前的#行
-C # 显示匹配结果前#行和后#行
sort
-t 分隔符
-r 反向排序
-u 去重
-k 以哪个字段排序,默认第一个字段,
-n 排序类型数字
举例
sort -k3nr k3按第三个字段倒序排序
uniq 经常和sort合用,为了uniq起作用,必须先排序。
head -10 file
打印文件的开头10行
tail 文件名
默认打印文件的最后10行
-f 循环读取
-n 20 显示最后20行
-n +5 从第五行开始显示
查看前100行
cat test.log |head -n 100
查看后100行
cat test.log |tail -n 100
crontab
格式: min hour day month week command
通配符
* 代表所有可能的值,如果min 是星号,表示满足其他字段条件后每分钟都执行
- 指定一个范围,如5-9 表示5,6,7,8,9
/ 指定时间的间隔频率,如分钟是 */10 ,表示每10分钟执行一次
lu 软连接
lu -s /dev/test /app/testdir 创建软连接
sed 非交互式编辑器
sed选项
-i 直接修改,不在屏幕上输出
-n 使用安静模式,
sed定位
sed /REGEXP/ 通过//之间的正则来匹配
\cREGEXPc 当匹配的内容力有/时,通过 \c 和 c之间的正则来匹配,c可以是任意字符
操作命令
p 打印匹配行
sed -n '/aaa/p' test.txt
d 删除匹配行
sed -i '/yao/d'
sed -i '/3d' 删除第三行
s 替换匹配内容
sed -i 's/aaa/xxx/g'
c 替换整行
a 在当前行后添加一行
sed -i '/yao/a tired'
i 在当前刚之前插入
sed -i '/yao/i tired'
n 指的是从匹配的下一行开始处理,n 2 从匹配的第二行
sed -i '/aaa/{n;s/bbb/ccc/}' test.txt
sed单引号和双引号的区别
双引号可以使用shell变量,单引号不行
awk
主要用来格式化
是一个强大的文本分析工具,把文件逐行读入,默认以空格切片并处理
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
awk '/pattern/ {action}' filename
pattern 表示正则,用//括起来,action 用{} 括起来
省略pattern表示对所有行执行action,省略action表示对符合条件的行执行默认print动作
action 可以有多个语句,以;号隔开
-F 分隔符,默认空格
内置变量
$0 当前记录
$1 ~ $n 当前记录的第n个字段
NF 统计总字段数
/pattern/ 匹配代码块
/pattern/ 纯字符匹配
awk '/mysql/{print $0}' /etc/passwd
!/pattern/ 纯字符不匹配
awk '!/mysql/{print $0}' /etc/passwd //输出不匹配mysql的行
~/pattern/ 字段值匹配
awk -F: '$1~/mail/{print $1}' /etc/passwd //第一个字段$1匹配指定内容才显示
!~/pattern/ 字段值不匹配
awk -F: '$1!~/mail/{print $1}' /etc/passwd //不匹配
cat /etc/passwd |awk -F ':' '{print $1}'
cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
tr命令
transform 用于字符转换 替换和删除,其功能类似于sed命令,但只能对stdin操作,不能直接对文件操作
tr set1 set2 用set2中的字符替换set1中字符
tr _d set1 删除字符串
将十进制线程号转换为16进制格式
printf '%x\n' tid