1、取出历史命令,不包含序列号
history | cut -c 8-
-c :以字符为单位进行分割
8-:从第8个字符到最后一个字符
2、awk同时指定多个分隔符
取出eth0的IP、广播地址和子网掩码
ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4,$6,$8}'
中括号中指定分隔符:空格和:,列数按照两个分隔符分别分割的结果计算,即最前面的所有空格为第一列,inet为第二列,addr为第三列
3、xargs和xargs -n 1的区别
3.1 xargs -n 1分组
管道前的输出作为每一个作为一个参数一个一个传给管道后的命令,效果如下
find data/ -type f -name "*.txt" | xargs -n 1 cat
相当于执行如下命令
cat data/leiyf/leiyf.txt
cat data/test.txt
3.2 xargs 不分组
管道前的输出作为一个参数一起传给管道后的命令,效果如下:
find data/ -type f -name "*.txt" | xargs cat
相当于执行如下命令
cat data/leiyf/leiyf.txt data/test.txt
4.tar命令
注意:被打包的目录或者文件,最好从相对路径开始,所以建议先切换到要打包的目录再进行打包的操作。
打包/etc/目录除了/etc/service,如下:
sudo tar zcvf /tmp/etc.tar.gz /etc/ --exclude=/etc/services
查看压缩包中的内容,但是不会解压压缩包,如下:
tar tf /tmp/etc.tar.gz
-t, --list list the contents of an archive 列出存档的内容
--test-label test the archive volume label and exit 测试存档卷标签并退出
将~/data目录(包括子目录)下的以leiyf开头的文件打包
测试文件如下:
$tree data/ data/ |-- leiyf | |-- leiyf.txt | |-- leiyf.txt.ori | |-- nginx.conf | |-- test3.log | `-- testlogtt |-- leiyf.txt |-- test |-- test.txt `-- test.txt.ori
方法一: $sudo find data/ -type f -name "leiyf*" | xargs tar zcf ~/data/leiyf.tar.gz 方法二: $tar zcf data/leiyf1.tar.gz $(find data/ -type f -name "leiyf*")
注意:一下方法为错误的方法
$sudo find data/ -type f -name "leiyf*" -exec tar zcf data/leiyf2.tar.gz {} \; [leiyf@leiyangfeng ~] $tar tf data/leiyf2.tar.gz data/leiyf.txt
从以上可以看到压缩包中只有最后一个文件,这是因为find的-exec参数会将find查询的结果一个一个交给后面的命令执行,所以相当于执行了,三次打包的操作,后面的将前面的覆盖了。
5.awk多个分隔符
执行命令取出linux中eth0的IP地址
如下:
$ifconfig eth0 | awk -F "[ :]" 'NR==2 {print $13}' 192.168.216.129
此方法的最大缺点就是计算$n的时候很费劲,因为inet前面有多个空格,查到$13,真是不容易。
对上述方法做如下改进
$ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}' 192.168.216.129
提示:+就是取中括号中的分隔符一次或者多次,并且将一个或者多个分隔符视为一个。如下:
$echo "-----1:::::2.....3" |awk -F "[-:.]+" '{print $2,$3,$NF}' 1 2 3
提示:因为将“-”作为分隔符,所以“-”前面为$1。
6.为什么目录下的“.”代表当前目录,而“..”就代表上级目录
因为其所对应的inode节点号都是一样的,如下:
$ls -lid leiyf/. leiyf/test/.. leiyf/ 117 drwxrwxr-x. 3 leiyf leiyf 4096 10月 7 17:00 leiyf/ 117 drwxrwxr-x. 3 leiyf leiyf 4096 10月 7 17:00 leiyf/. 117 drwxrwxr-x. 3 leiyf leiyf 4096 10月 7 17:00 leiyf/test/..
而且在当前目录下每创建一个子目录,当前目录的硬链接数据加1,因为每个子目录下都会有一个“..”代表上级目录。注:硬链接为目录和文件的不同出口,硬链接的目录或者文件对应的inode是一样的。
7.文件的时间属性
ls -lih /data
查看到的7 8 9三列默认是文件的修改时间
#stat /data/ File: `/data/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 803h/2051d Inode: 142275 Links: 8 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-10-09 17:03:39.312093060 +0800 Modify: 2018-09-30 12:12:13.266444541 +0800 Change: 2018-09-30 12:12:13.266444541 +0800
stat中的三个时间属性对应find中的三个参数,如下
stat find 操作 Modify- 修改时间 -mtime 修改文件内容 Change-改变时间 -ctime 文件属性改变 Access- 访问时间 -atime 访问文件内容
8.date命令参数及用法
(1)相关参数及格式化输出
#date +%y-%m-%d\ %H:%M:%S 18-10-14 07:27:33 [root@leiyangfeng ~] #date +%Y-%m-%d\ %H:%M:%S 2018-10-14 07:27:44 #date +%F\ %T 2018-10-14 07:28:05 [root@leiyangfeng ~] #date +%F\ %X 2018-10-14 07:28:11 #date +%s #秒刻 1539473325 [root@leiyangfeng ~] #date +%w #周几 0
(2)显示过去和将来的时间
年 #date -d "-3year" Sun Oct 11 15:47:38 CST 2015 [root@leiyangfeng ~] #date -d "-3year" +%F 2015-10-11 月 #date -d "-3month" Wed Jul 11 15:48:19 CST 2018 [root@leiyangfeng ~] #date -d "-3month" +%F 2018-07-11 日 #date -d "-3day" Mon Oct 8 15:48:48 CST 2018 [root@leiyangfeng ~] #date -d "-3day" +%F 2018-10-08
小时
#date -d "-3hour" +%F:%H
2018-10-14:04
(3)date-秒刻
显示当前的秒刻时间,常用在给文件打标签 #date +%s 1543030447 反推秒刻时间对应的日期 #date -d @1543030447 Sat Nov 24 11:34:07 CST 2018
9.取出文件或者目录的权限
[root@leiyangfeng ~] #stat -c %a /home/leiyf/data/a 664 [root@leiyangfeng ~] #stat -c %a /home/leiyf/data/ 775
10.如何让执行自定义的脚本像执行系统命令一样
echo "echo -e \"\e[33mLeiyf is very good.\e[m\"" >leiyangf chmod +x /root/leiyangf PATH=$PATH:/root: # 临时生效 sed -i '$a export PATH=$PATH:/root:' ~/.bashrc #永久生效,但是用echo总是会解析$PATH,所以还是用sed比较好。 #leiyangf Leiyf is very good.
11.快捷键
Ctrl+a 切换到命令行开头
Ctrl+e 切换到命令行结尾
Ctrl+c 终止当前命令或脚本
Ctrl+d 退出当前shell,相当于exit,一个个删除光标后字符
Ctrl+l 清屏,相当于clear
Ctrl+u 清除(剪切)光标之前的内容
Ctrl+k 清除(剪切)光标之后的内容
Ctrl+w 清除光标之前的一个单词
12.软连接
创建目录的软链接,目标文件后不能有‘/’,而且目标文件不能存在
#mkdir mysql5;ln -s mysql5/ mysql;ls -l total 8 drwxr-xr-x. 2 root root 4096 Oct 9 15:50 logs lrwxrwxrwx. 1 root root 7 Oct 15 13:33 mysql -> mysql5/ drwxr-xr-x. 2 root root 4096 Oct 15 13:33 mysql5
删除目录的软链接时,软连接后不能加‘/’,否则后将源目录下的文件删除
#touch mysql5/test;rm -rf mysql/;ls -l mysql5/ total 0 #touch mysql5/test;rm -rf mysql;ls -l mysql5/ total 0 -rw-r--r--. 1 root root 0 Oct 15 13:36 test
13. 计划任务小窍门
当相同的计划任务需要同时在多台机器上执行时,为了避免同一时间执行带来意外的,不可预知的问题。可以通过随机数来获取一个随机的分钟数执行,如下
((minute=$RANDOM % 60))
$minute 02 * * * /bin/bash /server/scripts/backup.sh
14. 查找占用磁盘空间大的文件
方法一 [root@leiyangfeng /data] #du -sh /* | grep "G" 方法二 [root@leiyangfeng /data] #du -s /* | sort -nr 方法三 [root@leiyangfeng /data] #du --max-depth=1 / | sort -nr 然后找到的占用磁盘空间大的目录继续按照以上方法往下找
15. sed特殊用法
在匹配到行的开始或者结尾添加一段字符
[root@leiyangfeng ~] #sed -n '/^Listen/p' /etc/httpd/conf/httpd.conf Listen 80 [root@leiyangfeng ~] #sed -i_`date +%F` '/^Listen/ s#$#,127.0.0.1:80#g' /etc/httpd/conf/httpd.conf [root@leiyangfeng ~] #sed -n '/^Listen/p' /etc/httpd/conf/httpd.conf Listen 80,127.0.0.1:80
16、cat显示文本中的特殊字符
#echo -e "\e[31mUsername:Password\e[m\nzhangsan:zhangsan ">password_test.txt 不加参数是看不到文本中的特殊字符 [root@nfs01 ~] #cat password_test.txt Username:Password zhangsan:zhangsan 加上-A参数可以发现文本中的特殊字符,尤其是密码中结尾的空格。 [root@nfs01 ~] #cat -A password_test.txt ^[[31mUsername:Password^[[m$ zhangsan:zhangsan $
17、ps 看到的进程占用的内存值有可能会远远大于top看到的进程占用的内存值,此时需要重启进程释放内存占用。