运维中 shell 是最基础也是最实用的工具了,使用的好可以帮助我们解决很多问题。以下是一些总结的shell编程题目。
1. 打印1到50之间的随机数,中心周围的正态分布。中间的数字最有可能发生,你越远,它们越少越不常见。
您可以使用以下命令对此进行测试并观察数字分布:
for i in `seq 100000`;
do echo $[(${RANDOM}%40+${RANDOM}%40)/2+1];
done | sort -n | uniq -c
echo $ [($ {RANDOM}%100 + $ {RANDOM}%100)/ 2 + 1]
2. 替换文本中的字符串
说明: -e是脚本函数,它执行搜索和替换,如vi,-i是编辑文件到位
sed -e 's / dapper / edgy / g'-i /etc/apt/sources.list
elinks -dump https://pastebin.com/archive|grep https | cut -c 7- | sed 's / com / com \ / raw / g' | awk'length ($ 0)> 32 && length($ 0)< 35' | grep -v'messages \ | settings \ | languages \ | archive \ | facebook \ | scraping' | xargs wget
注意:elinks 是一款linux 下的文本浏览器,所有都以文字显示。具体可以查看百度解释,此处不做详细介绍。
4. 从当前目录下的* .html和* .htm文件中删除脚本标记
find ./ - type f \(-iname '* .html'- or -iname '* .htm' \) - exec sed -i '/ <script /,/ <\ / script> / d' '{}' \;
5. 推送到git目录中的所有(不同)遥控器,而不必将它们组合在一起
git remote | 而 读线; 做 git push $ line ; DONE
6. 获取超过50%使用率的分区 ------- 在监控中非常使用,可以用来监控磁盘使用率。
df -h | awk '{a=$5; gsub(/%/,"",a); if(a> 50){print $ 0}}'
注意标点符号必须是英文状态下的哦。否则linux shell 无法识别。
收听YouTube无线电流媒体。我在别名上使用它来轻松进入学习/编程的有点流状态。
streamlink --player = “cvlc --no-video” “https://www.youtube.com/freecodecamp/live” 720p |&tee / dev / null
8. 监控我的进程组树
观看"ps --forest -o pid = PID,tty = TTY,stat = STAT,time = TIME,pcpu = CPU,cmd = CMD -g $(ps -o sid = -p $(pgrep -f "<my_process_name >"))"
curl -s https://ipvigilante.com/$(curl -s https://ipinfo.io/ip)| JQ '.data.latitude,.data.longitude,.data.city_name,.data.country_name'
10. 查找/ var目录中的前10个最大文件(包含子目录和隐藏文件)
tree -ihafF / var | tr '[]' '' | sort -k1hr | head -10
11. 将当前环境保存为一堆默认值
环境| sed 's /\(。*。)= \(。*。)/:$ {\ 1:=“\ 2”} /' > mydefaults.bash
12. 将VPS磁盘备份到另一台主机
ssh [email protected] -p22 “cat / dev / sda1 | gzip -1 - ” > vps.sda1.img.gz
pacman -Qi | egrep '^(名称|已安装)' | cut -f2 -d ':' | 粘贴 - - | 列-t | sort -nk 2 | grep MiB
sed 's / \ r // g' <input.txt> output.txt
15. 仅使用Bash检查主机端口访问:
s = “ $(cat 2> / dev / null </ dev / null> / dev / tcp / $ {target_ip} / $ {target_port}&WPID = $ !; sleep 3 && kill $!> / dev / null 2 >&1&KPID = $ !;等待$ WPID && echo 1) “ ; s = “ $ {s:-0} ” ; echo “ $ {s} ” | sed 's / 0/2 /; s / 1/0 /; s / 2/1 /'
16. 网络发现一个
nmap -sn 192.168.1.0/24 -oG - | awk '$ 4 ==“状态:”&& $ 5 ==“向上”{print $ 0}' |列-t
17. 显示当前正在使用的网络接口
路线| grep -m1 ^默认| awk '{print $ NF}'
18. 创建一个文件并操纵日期
touch -d' -1 year' / tmp / oldfile
19. 将所有连接的PulseAudio蓝牙设备切换到A2DP配置文件
尝试将所有音频设备切换到A2DP配置文件以获得最佳音质。适用于始终以HSP / HFP模式供电的蓝牙扬声器和耳机。但请注意,此命令只是GUI的简写,因此它无法修复顽固的BT控制器,使您的设备停留在HSP模式,直到手动重新耦合。
$(pacmd list-cards | grep'name :' | sed 's /.* <\(。* \)>。* / \ 1 /'); 做 pacmd set -card -profile $ card a2dp_sink; DONE
20. 检查Web服务器端口80响应头
curl -I <IPaddress>
21. 更改用户密码
echo -e “linuxpassword \ nlinuxpassword” | passwd linuxuser
22. 检查Web服务器端口80响应头
(echo -e'GET / HTTP / 1.0 \ r \ n \ r \ n' ;)| ncat <IPaddress> 80
23. 命令shell生成随机强密码
LEN = 20; tr -dc A-Za-z0-9_ </ dev / urandom | head -c $ {len} | xargs的
24. 查找和设置时区
sudo timedatectl set -timezone $(curl -s worldtimeapi.org/api/ip.txt | sed -n 's / ^ timezone:// p')
25. 对pdf 文件做处理,减小文件大小
gs -sDEVICE = pdfwrite -dCompatibilityLevel = 1.4 -dPDFSETTINGS = / screen -dNOPAUSE -dBATCH -dQUIET -dColorImageResolution = 600 -dMonoImageResolution = 600 -sOutputFile = output.pdf input.pdf
26. 使用一些精美的sed正则表达式提取rpm包名称,版本和发行版
rpm -qa | sed 's / ^ \(。* \) - \([^ - ] \ {1,\} \) - \([^ - ] \ {1,\} \)$ / \ 1 \ 2 \ 3 / ' | 排序| 列-t
27. 网站递归离线镜像与wget
wget --mirror --convert-links --adjust-extension --page-requisites --recursive --no-parent www.example.com
28. 使用curl检查每个URL重定向(HTTP状态代码301/302)
curl -sLkIv --stderr - https://exemple.com | AWK 'BEGIN {IGNORECASE = 1}; / <位置:/ {打印$ 3}'
bitgen hex 12312381273918273128937128912c3b1293cb712938cb12983cb192cb1289b3 info
sed 's / linux - [^] * \ {0,1 \} // g' / path / to / file
du -h --max-depth = 1 --one-file-system /
sort ~/.bash_history|uniq -c|sort -n|tail -n 10|tr -s " "|cut -d' ' -f3- >> ~/.bash_history
33. 删除.bash_history中同一命令的多个条目,同时保留按时间顺序排列
要查看已删除重复命令的统计信息: diff --suppress-common-lines -y ~/.bash_history.bak ~/.bash_history|uniq -c|sort -n|tr -s " "|sed '/^ 1/d'|grep '<'
34.
找到包含最多文件数的前10个目录
find / - input f!-regex '^ / \(dev \ | proc \ | run \ | sys \)。*' | sed 的@ ^ \(。* \)/ [^ /] * $ @ \ 1 @' | sort| uniq -c | sort -n | tail-n 10
35. 在一个grep命令中删除注释(甚至是以空格开头的注释),空行(甚至包含空格的行)
grep -vE '^ \ s *(#| $)' textfile
36. 显示根文件系统的每个目录使用的空间(不包括挂载点/外部文件系统)(并对输出进行排序)
find / -maxdepth 1 -mindepth 1 - type d - exec du -skx {} \; | sort -n
37. 显示根文件系统的每个目录使用的空间(不包括挂载点/外部文件系统)(并对输出进行排序)
find / -maxdepth 1 - type d | xargs -I {} sh -c “mountpoint -q {} || du -sk {}” | 排序-n
38. 在新安装的计算机上找到您可能希望在防火墙中打开的端口
lsof -i -nlP | awk '{print $ 9,$ 8,$ 1}' | sed 's /.*://' | sort -u
39. 使用curl检查每个URL重定向(HTTP状态代码301/302
curl -sLkIv --stderr - https://t.co/2rQjHfptZ8 -s:当管道输出到另一个命令时静音输出-L:跟随每个重定向-k:忽略证书错误-I:只请求头-v:是详细的--stderr - :将stderr重定向到stdout https://t.co/2rQjHfptZ8:用于检查管道重定向到grep -i位置的URL:-i:grep目标文本忽略大小写位置:: greps包含“location”的每个字符串:“管道输入awk {'print $ 3'}打印每个用于sed的字符串中的第三列'/ ^ $ / d'
curl -sLkIv --stderr - http://example.org | grep -i location:| awk { 'print $ 3' } | sed '/ ^ $ / d'
dd if = / dev / archlinux.iso = / dev / sdb status = progress
ps aux | sort -nk +4 | tail