Linux Shell脚本攻略 读书笔记
内容目录:
- 嗨,Echo一下
- 给终端来点颜色
- shell的控制结构
- 算术比较
- 目录操作
- 网站下载
- tar 归档工具
- rsync 备份系统快照
- ftp自动传输
- 磁盘管理
- 故障排查
- 使用syslog记录日志
- 杀死进程
- 用/proc收集信息
Linux Shell脚本攻略 读书笔记
这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝;
最有价值的当属文本处理,对这块我单独整理出来一篇blog,详见《Linux Shell文本处理工具集锦》
下面是文本处理之外的简单介绍,如果你觉得自己的shell需要充充电,强烈建议读读这本《linux Shell脚本攻略》。
嗨,Echo一下
从 echo开始:
带引号的 echo和不带引号的 echo区别:
使用带引号时,bash 不会对单引号中的变量进行求值,而是原样输出;
而使用双引号,或者不使用引号,则会对变量进行解析:
echo '$var' // $var
echo $var // 5
echo "$var" // 5
- 对比printf 的格式化输出
printf "%-5s %-10s %-4s" NO NAME HELLO //左对齐 宽度为 5 10 4
具体的值使用右边引号外的; 对比 python中的输出:
printf " %s " % "hello"让echo支持转义字符:-e
[/home/weber#]echo -e '1\t2' 1 2
给终端来点颜色
在终端彩色输出:
echo -e '\e[1;31m this is red text\e[0m' this is red text
更有用的是为我们提示符着色:
vi .profile添加:
export PS1='[[\e[34;1m]$PWD#\e[0m]'注意环境变量的赋值错误
var=value //赋值操作 echo $var
var = value //判断相等操作[/home/weber#]var=5 [/home/weber#]echo 'this is $var' this is $var [/home/weber#]echo "this is $var" this is 5
获取变量值的长度:
length=${#var} //语法真诡异
- 打印程序的退出状态:
echo $?
- 对.bashrc 修改的简便方法:
echo 'a=/abc/' >> ~/.bashrc
- 为rm打造回收站功能:
alias rm='cp $@ ~/backup; rm $@'
shell的控制结构
条件判断
if condition; then commands; elif condition; then commands else commands fi
循环结构
for var in list; do commands; done
list可以是字符串或是序列;
echo {1..50} 生成列表
echo {a..z}更亲切的for循环(类C)
for((int i = 0 ; i < 10 ;i++)) { commands; }
while循环
while condition do commands; done
算术比较
语法
if[ $var -eq 0 ] && action;
-gt :大于
-lt: 小于
-ge: 大于等于
-le: 小于等于
-a: 逻辑与
-o: 逻辑或字符串的比较,最好使用双中括号
[[ $str1 == $str2 ]]
[[ $str != $str ]]
支持 > 、 <
判空:-z 非空: -nif更友好:
if [[ -n $str ]] && [[ -z $str2 ]];
then
commands;
fi避免if语句过长
[ condition ] && action ;//condition为真,则执行action
[ condition ] && action; // condition 为假,则执行aciton
注意:condition 和[ ] 之间必须有空格,否则报错;
目录操作
创建长路径目录:
mkdir -p colin/soft/redis/
粘滞位和setuid:
chmod a+t file_dir/
设置了粘滞位,只有目录的所有者才有权限删除该目录
让所有用户都有权限执行文件:
chown root.root file chmod +s file
设置setuid文件权限后,它运行其它用户以文件所有者身份来执行文件;
tips:只有linux 的elf二进制文件才可设置这个文件权限;文件写保护
chattr +i file //文件不可修改、不可删除
touch的妙用
touch可用来生成空白文件;如果文件存在,则更新时间戳;
eg:批量生成100个空白文件for name in test{0..100}.txt do touch $name done
只列出目录的方法
- ls -d */
- ls -F| grep '/$' //-F会在文件尾部列出文件类型;
- ls -l| grep '^d' //-l第一行第一个字符是文件类型;
- find . -type d -maxdepth 1 -print
- 切换目录快速定位
压入并切换:pushd /var/wwwdirs: 显示当前路径栈
选择路径回切(通过索引编号):
pushd +3
移除最近压入栈的路径并切换到下一个目录:
popd
网站下载
wget url:直接下载文件或者网页;
--limit-rate :下载限速,别太快
-o:指定日志文件;输出都写入日志;
-c:断点续传
wget -c ftpUrl
下载整个站点所有页面
wget --mirror me115.com
或者:
wget -r -N -l DEPTH me115.com
-l:指定页面层级的深度;
-N:允许对文件使用时间戳;
格式化文本形式下载网页
lynx -dump URL > web.txt
-dump选项将网页已ASCII字符形式下载到文本文件中;
更多
如果需要更丰富的下载功能,考虑使用curl;其支持多种协议,
还支持POSF、cookie、认证、用户代理字符串等特性;
如果你想将网页处理流程自动化,cURL是很好的选择;
tar 归档工具
归档:
tar -cvf output.tar dir/
-c:创建规定
-f:指定文件名
-v:在归档或解开时显示更多的详细信息-r:追加文件到归档中:
tar -rvf output.tar dir2/
-t:显示归档内容;
tar -tf output.tar
提取归档文件:
tar -xvf output.tar
归档时排序版本控制目录(svn、cvs、git等目录信息):
tar --exclude-vcs -czvf source_code.tar.gz source/
rsync 备份系统快照
rsync -av source_path destination_path
-a:表示归档;-v:归档时显示详细信息
-z:指定在网络传输时使用数据压缩;
路径可以是远程路径:
eg:rsync -avz source_dir usrname@host:path;
(如果不希望使用交互式的密码输入,可使用SSH密钥来实现)
注:source_dir末尾如果使用路径/,那么rsync会将source_dir目录中的所有
内容复制到目的端;如果没有带/,则会将source_dir本身复制到目的端;
备份时排除部分文件:
rsync -avz /home/code /mnt/disk/bakup --exclude "*.txt"
可使用一个列表文件指定需要排除的的文件:
--exclude-from FILEPATH
ftp自动传输
使用ftp选项-i关闭交互会话;
eg ftp.sh:
!/bin/bash
HOST='me115.com'
USER='colin'
PASSWD='passwd'
ftp -i -n $HOST <<EOF
user ${USER} ${PASSWD}
binary
cd /home/linux
put test.php
quit
EOF
磁盘管理
- 显示文件大小
du -h filename
统计文件夹的详细大小及总计
du -ch svn_archives/
-s 只输出合计信息;
找出指定目录中最大的文件
du -ak source_dir | sort -nrk 1| head
-a:扫描指定目录下所有文件(递归到最深一级目录)
结果单位指定:-k KB -m MB -h 人性化显示(打算排序的时候,不要用这个,因为单位不统一了)
上述结果中包含了目录,如果只看文件,不需要目录:find . -type f -exec du -k {} \; | sort -nrk 1| head
故障排查
- 当前登录用户:who
- 当前登录主机的用户列表:users
- 排除重复用户:users | tr ' ' '\n' | sort |uniq
- 系统运行时长: uptime
- 获取登录会话信息:last (单个用户 last colin)
- 列出系统开放端口及运行的服务:
lsof -i 或者: netstat -tnp
使用syslog记录日志
向syslog文件/var/log/messages中记录日志信息:
logger hello,this is colin
发送带标记的日志信息
logger -t ME115 hello,colin coming
/etc/rsyslog.d/下配置了标记和日志的对应关系;
杀死进程
- 通过进程名获取进程id
ps -C command_name
- 通过命令名终止进程:
killall process_name
通过进程id强杀进程:
kill -9 process_id
找出命令所在位置:
which phpwhereis php
列出命令简短描述信息:
whatis ls
用/proc收集信息
- 获取cpu信息:
cat /proc/cpuinfo
- 获取内存信息:
cat /proc/meminfo
- 获取分区信息:
cat /proc/partitions
每一个运行的进程在/proc下都有一个以该进程id命名的目录,
/proc/PID/下的重要文件:
environ:包含与进程相关的环境变量;
exe:到进程工作目录的符号链接;
fd:进程所使用的文件描述符
Linux Shell脚本攻略 读书笔记相关推荐
- linux cat 脚本,Linux Shell 脚本攻略 读书笔记 -- 201.cat的几种用法
cat可以读取.显示和拼接文件内容 1. 打印单个文件: root@debian:/home/chicol/scripts# cat file.txt This is a line inside fi ...
- LINUX SHELL脚本攻略笔记[速查]
LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...
- 《Linux Shell脚本攻略》学习笔记-第一章
1.1 简介 计算机可以从文本文件(称为shell脚本)中读取并执行命令. sehll脚本不仅节省了时间,而且清楚明白地表明了所执行的操作. bash shell变成了UNIX和Linux中既成事实的 ...
- linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
今天为大家带来的内容是:(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤 本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章 ...
- linux shell脚本攻略第3版_「技术干货」师傅说不会写shell脚本的网安不是一个好黑客,实战...
shell脚本? 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就 ...
- Linux Shell脚本攻略-调试脚本+函数和参数
调试脚本 可以利用Bash内建的调试工具或按照易于调试的方式编写脚本 # 1. 使用选项-x,启用shell脚本的跟踪调试功能 $ bash -x script.sh # 打印出所执行的每一行命令以及 ...
- Linux Shell脚本攻略学习总结:一
终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...
- 《Linux Shell脚本攻略》读书笔记第三章 以文件之名
1.生成任意大小文件 dd [root@stone ~]# dd if=/dev/zero of=f1_dd bs=1M count=1 1+0 records in 1+0 records out ...
- 《Linux Shell脚本攻略》读书笔记第五章 一网情深
1.网站下载 wget [root@stone ~]# wget www.baidu.com --2013-05-20 10:21:08-- http://www.baidu.com/ Resolv ...
最新文章
- 95后女程序员一下班就溜,拒绝加班!下班玩消失,不回信息!leader吐槽:95后都这么有个性吗?...
- hadoop8088端口查看历史打不开,但是在虚拟机上可以打开的解决办法
- Microsoft Bot Framework 上手
- Go题目 自己做的 不完善的地方请评论指出
- 随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- mysql 字符列做日期分区_mysql 根据日期字段做表分区
- 买服务器带操作系统,买服务器带操作系统
- android 时间函数 性能,Android 性能优化——启动时间优化
- 同等条件下,杂交水稻是否增产?
- python UI自动化无界面运行
- Ruckus R500 AP设置
- verilog移位、取绝对值
- “大数据杀熟”手段变种需要警惕!
- 机器学习笔记—模式识别与智能计算(一)模式识别概述
- [POI2009]Lyz
- 解密:顺丰是一家什么样的公司
- Gamemaker小实例——马里奥实现(后附资源+exe文件)
- java springboot安卓多商家校园点餐外卖APP源码
- git 小乌龟安装教程
- babylon.js实战教程
热门文章
- windows 安装包制作工具
- 多个服务器数据互通_2020年4月7日部分服务器数据互通公告
- 沉睡者-持久可积累的全自动网盘赚钱项目
- unicode转中文mysql函数_JSP_Unicode中文转码函数代码,实在搞不懂TX,用户名的编码 - phpStudy...
- iOS swift5 UISlider 自定义UISlider 修改滑块和滑条的大小
- 读书笔记:《谦逊的咨询》
- 把你的想法说出来——一个故事给我的启示
- k8s The connection to the server 10.209.213.55:443 was refused - did you specify the right host or p
- 有感于培训机构和高校的区别
- 集合论偏序关系的实际运用