查缺补漏

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看到的进程占用的内存值,此时需要重启进程释放内存占用。

posted on 2018-10-01 23:44  licker  阅读(369)  评论(0编辑  收藏  举报

导航