TMOUT=0
HISTSIZE=100
timedatectl
查看系统时间
timedatectl list-timezones
列出可用时区
stat查看文件详情
访问时间
文件修改时间
文件属性修改时间
lsblk显示存储设备信息
vi
注意,vi有个可怕的地方,如果文件很大,会把所有内容加载到内存中,导致服务器瘫痪,因此查看文件,推荐使用less tail more命令。
:set nu 显示行号
:set ignorecase 忽略大小写 :set ic
:set showmatch 设置匹配模式
:set hlsearch 高亮显示搜索结果
/ 向后搜索
?向前搜索
i 当前光标插入
a 当前光标下一个字开始插入
o 插入新的行
ZZ 连按2次Z键 将当前正在编辑的文件保存并退出
u 取消前一次的操作
ctrl+r 恢复撤销的操作
dd 删除光标所在行
ndd 删除光标所在的向下n行
d1G 删除光标所在到第一行的所有内容
dG删除光标所在到最后一行的所有数据
cat
用于查看,合并文件内容
cat file1.txt file2.txt >combined.txt 合并文件
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
more
显示文件内容,每次显示一屏
按space键,显示下一屏
按enter键,显示下一行
按B键,显示上一屏
+/pattern 从匹配到的内容前两行开始显示
按H键,显示帮助
less
分页显示文件,支持滚动翻页,搜索,标记
与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,
-N 显示行号
搜索,在less命令中可以使用/正向搜索,?反向搜索,按n跳转到下一个匹配项
标记,在less命令中可以使用m命令来标记某一行,如m 10,标记之后,可以使用'命令来跳转到标记的行,如' a,a是标记的名称。
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
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'
find 的-print0选项
告诉find 命令在输出文件名时不要用传统的换行符作为分隔符,而使用空字符(NULL character \0)来分割
xargs
用于处理大量输入数据并将之传递给其他命令
-n 控制单次参数数量,默认xargs会尽可能多的将参数塞进一次命令调用中,直到达到系统限制,但有时下游命令本身限制了能接受的参数数量。
-I 指定替换字符串,指定参数的占位符,默认占位符是{},默认xargs会将所有参数附加在命令的末尾。但如果我们需要将参数插入到命令的中间位置,就需要-I选项,它允许我们定义一个占位符,(默认占位符是{},但可以是任何字符),xargs就会用标准输入读取的每一项来替换这个占位符。
举例,ls *.bak|xargs -I {} mv {} /tmp/{}
重要提示
当使用-I时,xargs的执行模式会发生变化,它不再进行参数批处理,而是对输入的每一行执行一次命令。这会降低性能,类似于 find -exec
注意:
要删除带有空格的文件名,必须要指定 -I {}
find -mtime -1 |xargs -I {} rm -rf {}
因为xargs它默认使用空格,制表符和换行符来分割输入,所以文件名本身有空格就要特别注意。
还有一个终极解决方案,find 的-print0选项和xargs的-0选项。
find 的-print0选项告诉find 命令在输出文件名时不要用传统的换行符作为分隔符,而使用空字符(NULL character \0)来分割
xargs的-0选项告诉xargs不要使用空格或换行符来解析输入,而是以空字符(\0)作为唯一的分隔符。
grep
-i 忽略大小写
-r 递归目录
-H 显示文件名
-v 反转匹配
-n 显示行号
-F 精确匹配,不使用正则,避免[] . *这些符号被误认为正则表达式
-E 正则表达式
例如 grep -E "word1|word2|word3" file.txt
-A # 显示匹配结果之后的#行
-B # 显示匹配结果之前的#行
-C # 显示匹配结果前#行和后#行
sort
-t 分隔符
-r 反向排序
-u 去重
-k 以哪个字段排序,默认第一个字段,
-n 排序类型数字
举例
sort -k3nr k3按第三个字段倒序排序
uniq经常和sort合用,为了uniq起作用,必须先排序。
cp
-f force
-p 保留原文件的属性(作者,权限,时间)
-r 递归复制
scp
scp 文件名 用户名@目标IP:目标路径
touch
修改指定文件的时间标签,如果文件不存在,则建立一个空的新文件
lu软连接
lu -s /dev/test /app/testdir 创建软连接
tar -zcvf压缩包名 待压缩文件目录
du
du -sh *
du -sh .
-a 显示全部目录和子目录下的每个档案占用的磁盘空间
-h human readable
-s 只显示各档案大小的综合
--exclude= 略过制定文件夹或目录
示例
du -ahx /home |awk '$1 ~/(^.G|..G)/'
说明 ^ 匹配输入字符串的开始位置
. 匹配除换行符之外的任意单个字符
选择,用圆括号将所有选择项括起来,相邻选项用 | 分割
df -h 目录 显示目录对应的文件系统及大小
crontab
格式: min hour day month week command
通配符
* 代表所有可能的值,如果min 是星号,表示满足其他字段条件后每分钟都执行
- 指定一个范围,如5-9 表示5,6,7,8,9
/ 指定时间的间隔频率,如分钟是 */10 ,表示每10分钟执行一次
crontab -l 查看
crontab -e 编辑
sed非交互式编辑器
sed选项
-i 直接修改,不在屏幕上输出
-n 使用安静模式,
sed定位
sed /REGEXP/ 通过//之间的正则来匹配
\cREGEXPc 当匹配的内容力有/时,通过 \c 和 c之间的正则来匹配,c可以是任意字符
操作命令
p 打印匹配行
sed -n '/aaa/p' test.txt
sed -n '1,3p' 文件名 打印指定行
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 删除字符串