一、快速查找命令行历史记录
在日常运维工作中,我们经常需要重复执行某个命令或者查找之前执行过的命令,这时就可以使用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定时执行任务、使用变量来简化命令、使用函数来复用代码以及使用条件语句和循环语句来控制流程。这些技巧都是运维工程师必备的工具,能够帮助我们更快、更高效地完成工作。