您的位置:

Linux运维必须掌握的Shell-o技巧

一、快速查找命令行历史记录

在日常运维工作中,我们经常需要重复执行某个命令或者查找之前执行过的命令,这时就可以使用history命令来查看命令行历史记录。

$ history
1  ls
2  cd /var/log
3  tail -f messages
4  vi /etc/nginx/nginx.conf
5  systemctl restart nginx
6  history

上述命令表示我们执行了6个命令,我们可以使用!加上命令序号来执行某个命令:

$ !4

上述命令表示执行第4个命令,也就是编辑nginx配置文件。同时,我们也可以使用Ctrl+R来快速查找之前执行过的命令。

二、使用重定向来保存命令执行结果

在运维工作中,我们经常需要将命令执行的结果保存下来,例如将日志输出到文件,或者将命令行输出以邮件方式发送等。这时就可以使用重定向来处理。

1、将命令执行结果输出到文件:

$ ls > list.txt

上述命令表示将当前目录下的文件列表输出到list.txt文件中。

2、将日志输出到文件:

$ tail -f /var/log/messages > messages.log

上述命令表示将消息日志输出到messages.log文件中。

3、将命令行输出以邮件方式发送:

$ uptime | mail -s "System Load" user@example.com

上述命令表示将系统负载输出以邮件方式发送给user@example.com。

三、使用通配符来匹配文件名

在Linux系统中,通配符可以用来匹配文件名,让我们可以快速地查找到符合条件的文件。

1、匹配单个字符:
?表示任意单个字符。

$ ls /var/log/messag?

上述命令表示查找/var/log目录下的messages、message1、message2等文件。

2、匹配任意多个字符:
*表示任意多个字符(包括0个字符)。

$ ls /var/log/message*

上述命令表示查找/var/log目录下的message、messages、message1、message2等文件。

3、使用中括号[]匹配指定范围的字符:
[a-z]表示匹配a到z中的任意一个字符;
[0-9]表示匹配数字0到9中的任意一个字符。

$ ls /var/log/message[1-9]

上述命令表示查找/var/log目录下的message1、message2、message3等文件,但不包括message文件。

四、使用管道来组合命令

在Linux系统中,我们可以使用管道(|)来将一个命令的标准输出作为下一个命令的标准输入,这使得我们可以将多个命令组合在一起,实现更为复杂的操作。

1、结合grep命令来查找指定文本:

$ cat /var/log/messages | grep "error"

上述命令表示查找messages文件中包含error的行。同样,我们也可以结合其他命令来进行查找和处理。

2、结合awk命令来对文本进行处理:

$ ps -ef | awk '{print $1,$2,$8}'

上述命令表示查看进程信息,并且只输出进程的用户、PID和命令名。

3、结合sort命令来排序:

$ ls -l /var/log/ | sort -k 5

上述命令表示查看/var/log目录下的文件,按文件大小进行排序。

五、使用cron定时执行任务

cron是Linux系统中的一个定时任务工具,可以帮助我们定期执行一些任务,例如备份数据、清理日志等。

1、编辑cron定时任务:

$ crontab -e

上述命令表示编辑当前用户的cron定时任务,编辑完成后保存退出即可。

2、cron定时任务格式说明:
* * * * * command
其中,星号*表示任意时间,分别对应分钟、小时、日、月、星期几,command表示要执行的命令。

3、添加cron定时任务:

# 清理30天前的日志文件
0 0 * * * find /var/log -name "*.log" -mtime +30 | xargs rm -f

上述命令表示每天0点定时执行,清理30天前的日志文件。

# 每周六备份数据库
0 0 * * 6 mysqldump -u root -p123456 -h localhost testdb > /backup/testdb_$(date +%Y%m%d).sql

上述命令表示每周六0点定时执行,备份testdb数据库。

六、使用变量来简化命令

在Linux系统中,我们经常需要执行一些重复的、繁琐的命令,例如某个目录下的文件名列表、某个命令的输出等,这时我们可以使用变量来简化命令。

1、定义变量:

$ DIR=/var/log/

上述命令表示定义变量DIR为/var/log/。

2、查看变量的值:

$ echo $DIR

上述命令表示输出变量DIR的值。

3、发送邮件时使用变量:

$ uptime | mail -s "System Load" $USER

上述命令表示将系统负载以邮件方式发送给当前用户。

七、使用函数来复用代码

在Linux系统中,我们可以使用函数来复用代码,避免重复编写相同的代码。

1、定义函数:

$ hello() {
    echo "Hello, $1!"
}

上述命令表示定义函数hello,接收一个参数,并输出“Hello, 参数值!”。

2、调用函数:

$ hello world

上述命令表示调用函数hello,参数为world,输出“Hello, world!”。

3、函数可以在shell脚本中复用:

#!/bin/bash

hello() {
    echo "Hello, $1!"
}

hello world

上述命令表示定义一个shell脚本,在其中调用函数hello并传递参数world。

八、使用条件语句和循环语句来控制流程

在Linux系统中,我们可以使用条件语句和循环语句来控制程序流程,实现更复杂的操作。

1、if语句:

#!/bin/bash

if [ $1 -gt 10 ]
then
    echo "$1 is greater than 10"
else
    echo "$1 is less than or equal to 10"
fi

上述命令表示定义一个shell脚本,在其中使用if语句判断参数是否大于10,并输出结果。

2、for循环:

#!/bin/bash

for i in {1..5}
do
    echo "Count: $i"
done

上述命令表示定义一个shell脚本,在其中使用for循环输出数字1到5。

3、while循环:

#!/bin/bash

i=1
while [ $i -le 5 ]
do
    echo "Count: $i"
    i=$((i+1))
done

上述命令表示定义一个shell脚本,在其中使用while循环输出数字1到5。

九、总结

本文介绍了Linux运维必须掌握的Shell-o技巧,包括快速查找命令行历史记录、使用重定向来保存命令执行结果、使用通配符来匹配文件名、使用管道来组合命令、使用cron定时执行任务、使用变量来简化命令、使用函数来复用代码以及使用条件语句和循环语句来控制流程。这些技巧都是运维工程师必备的工具,能够帮助我们更快、更高效地完成工作。