[百晓生]-linux shell脚本攻略(二)

  

 

[百晓生]-linux shell脚本攻略

By mystery

 

第五章:一团乱麻,没这回事

#wget

-O 指定输出文件名

-o 指定日志文件,从而不必将日志信息打印到stdout

-t 指定重试次数

--limit-rate 对wget限速

--quote或-Q 指定下载配额(quota)

-c 从断点开始继续下载

--mirror或者-r 复制或镜像整个网站,-l指定页面层级DEPTH

--use和--password提供认证信息

#cURL

cURL通常将下载文件输出到stdout,将进度信息输出到stderr

--silent 避免显示进度信息

-O 将下载数据写入文件,而非写入标准输出

--progress代替--silent 显示形如###的进度条

-C offset 指定偏移量进行断点续传

-C - 希望以curl推断出正确的续传位置

#shift

shift用来移动参数,当使用shift后,$2的值就被赋给$1

第六章:B计划

#tar

-c 代表创建文件

-f 代表指定文件名,文件名必须紧跟在-f之后

-r 向归档文件中添加文件

-v或-vv(verbose) 在归档或列出归档内容的过程中获知更多细节

-x(exact) 从归档文件中提取文件或文件夹

-C 指定需要将文件提取到哪个目录

-A 拼接多个tar文件

-u 通过检查时间戳来更新归档文件中的内容

-d 可以打印出两者之间的差别

--delete 从给定的归档文件中删除文件

-j 指定bunzip2格式压缩

-z 指定gzip格式压缩

--lzma 指定lzma格式

-a或--auto-compress 支持根据扩展名进行压缩

--exclude[PATTERN]排除匹配通配符样式的文件"样式应该使用双引号来引用"

-X 将需要排除的文件列表放入文件中

-totals 在归档完成后打印出总归档字节数

#cpio

用来将多个文件和文件夹存储为单个文件,同时还能保留所有的文件属性,如权限/文件所有权等

ccio通过stdin获取输入文件名,并将归档文件写入stdout,我们必须将stdout重定向到一个文件,以接收cpio的输出

-o 指定了输出

-v 用来打印归档文件列表

-i 用于指定输入

-t 表示列出归档文件中的内容

-d 提取内容

#gzip

gzip只能够压缩单个文件,而无法对目录和多个文件进行归档

gzip filename 压缩文件

gunzip filename.gz 解压文件

-l 列出压缩文件的属性信息

-c 用来将输出指定到stdout

--fafst或--best 分别提供最低或最高的压缩比

归档文件和gzip联用,可以用tar命令的-Z项来压缩归档文件

zcat 无需解压缩,直接读取gzip格式文件

压缩率 我们可以指定压缩率,压缩率分为1到9级

#bzip2

通常能生成比gzip更小的文件

bzip2 filename

bzip2会删除原文件并生成名为filename.bzip2的压缩文件

bunzip2 filename.bz2

-C 用于将输出指定到stdout

用tar命令的-j选项来压缩归档文件

-k 避免删除输入文件

压缩率 1到9

#lzma

提供了比gzip或bzip2更好的压缩率

lzma filename

lzma会删除原文件并生成名为filename.lzma的压缩文件

unlzma filename

-c 用以将输出指定到stdout

tar命令的-lzma选项来压缩归档文件

-k 避免删除输入文件

压缩率 1到9

#zip

在internet上的文件通常都是采用这种格式

zip file.zip file 压缩文件

-r 指定递归操作

unzip file.zip

在完成操作后,unzip并不会删除file.zip

-u 更新归档文件中的内容

-d 从压缩归档文件删除内容

-l 列出归档文件中的内容

#squashfs

squashfs是一种只读型的超高压缩率文件系统

它将根文件系统保存在一个压缩过的文件系统文件中,这个文件可以使用环回的形式来挂载并对其中的文件进行访问,因此当进程需要某些文件,可以将它们解压,然后载入内存中使用.

如果需要构建一个定制的Live OS,或是需要使用超高压缩率的文件并且无需解压就可以访问文件,那么squashfs的相关知识就能派上用场

需要安装squshfs-tools软件包

要挂载squashfs文件,利用环回形式进行挂载

-e 在创建squashfs文件时排除部分文件

-ef 将需要排除的文件名写入文件

-wildcard 在排除文件列表中使用通配符

#ctypt

简单的加密工具

ctypt < input_file > output_file

-d 解密文件

ctypt PASSPHRASE -d < encrypted_file > output_file

#gpg

GNU privacy guard,GNU隐私保护,是一种广泛的加密方案,采用密钥签名技术

gpg -c filename 加密文件

gpg filename.gpg 解密文件

#md5sum与sha1sum

都是单向散列算法,均无法逆推出原始数据,常用于验证数据完整性或为特定数据生成唯一的密钥

#rsync

可以对位于不同位置的文件和目录进行备份,它可以借助差异计算以及压缩技术来最小化数据传输量

rsync会比较源端和目的端的文件,只有当文件有更新时才进行复制,rsync也支持压缩/加密等多种特性

rsync -av source_path destination_path

-a 表示要进行归档

-v(verbose) 表示在stdout上打印出细节信息或进度

rsync命令用SSH连接远程主机,用user@host这种形式设定远程主机的地址

-z 指定在网络传输时使用数据压缩

--exclude 在归档时排除部分文件

--exluce-from 通过一个列表文件指定需要排除的文件

--delete 在更新rsync备份时,删除不存在的文件

#git

将整个源目录复制到目的端的备份目录中,并使用日期或时间作为版本号,得用差异备份(differential backup)

第七章:无网不利

#ifconfig

用于显示网络接口/子网掩码等信息

在每个系统中,默认都有一个称之为环回接口的io,这个接口指向当前主机本身

#网关

能够向外部网络转发分组的特殊节点主机被称为网关

操作系统维护着一个被称为路由表(routing table)的表格,它包含了关于分组如何转发以及通过网络中的哪些节点转发的信息

route 显示路由表

route -n 指定以数字形式显示地址

#tarceroute

可以显示分组途径的所有网关的地址

#ping

一个验证网络上两台主机连通性的诊断工具

ping命令使用互联网控制消息协议(internet control message protocal,ICMP)的echo分组

用ctrl+C来停止ping命令

RTT Round Trip Time,往返时间,是分组从源主机到目的主机的往返时间

-c 限制所发送的echo分组的数量

#wait

要想等所有子进程结束之一再终止脚本,得用wait命令

将wait放在脚本最后,它就会一直等到所有的子进程全部结束

#fping

-a 指定打印出所有活动主机的IP地址

-u 指定打印出所有无法到达的主机

-g 指定走上IP地址记法中生成IP地址范围

-d 通过对每一个echo回应进行DNS查询来返回主机名,使用该选项可以在ping的回应信息中打印出主机名而非IP地址

#lftp

通过FTP传输文件可以使用lftp命令,通过SSH传输文件可以使用sftp,RSYNC使用SSH与rsync命令

lftp username@ftphost 连接FTP服务器传输文件

cd directory改变目录

lcd改变本机的目录

mkdir创建目录

get filename 下载文件

put filename 上伟文件

quit 

lftp提示符支持命令自动补全

-i 关闭用户的交互会话

#iwconfig

iwconfig命令用来为无线网卡配置适合的无线网络,WEP密钥以及频率

iwlist工具扫描并列出可用的无线网络

iwlist scan

#zenity

可以用zenity来实现一个GUI弹出窗口.zenity是一个脚本化的GUI工具,用来创建包括文本框/输入框等在内的窗口

zenity --info --text "This is a message"

zenity依赖于Xserver.Xserver是一个守护进程,它负责在屏幕上绘制GUI图开元素

Xserver用特殊的环境变量DISPLAY跟踪运动在系统中的Xserver实例

#&

在语句末尾加上一个&符号,这个符号的作用是将语句放置到后台运行.这样做有利于多条语句并行执行

#lsof

开放端口列表不仅能够协助检测恶意软件,而且还能够收集开放端口的相关信息对网络应用程序进行调试,它可以用来分析某些端口无法连接及端口侦听功能是否正常

lsof -i 列出系统中的开放端口以及运行在端口上的服务详细信息

netstat -tnp 列出开放端口与服务

第八章:当个好管家

#du

df是disk free的缩写,du是disk usage的缩写

du file.txt

统计结果默认以字节作为计算单位

-a 递归地输出指定目录或多个目录中所有文件统计结果

-h 采用更友好的格式进行打印

-c 输出作为命令参数的所有文件和目录的磁盘使用情况总计,它会在输出结果的末尾加上一行总计

-s(summarize) 只输出合计数据,可以配合-h打印出人们易读的格式

-b 以字节为单位输出

-k 以KB为单位

-m 以MB为单位

-B 以指定块为单位的大小

--exclude 排除部分文件

--exclude-from 排除列表文件

--max-depth 指定du应该遍历的目录层次的最大深度

#time

time用来计算命令执行时间,将time放在需要计算执行时间的命令之前

real 挂钟时间,也就是命令从开始执行到结束的时间

user 指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间

sys 指进程花费在内核模式中的CPU时间

-o filename 将命令执行时间写入文件

-ao 要将命令执行时间添加到文件而不影响其原有内容,使用选项-a以及-o

-f 利用格式字符串格式化时间输出 real -%e|user -%U|sys -%S

#history

之前用户输入过的命令,并将其存储在文件~/.bash_history中,不过,它只保留特定数量的最近执行过的命令

可以用命令histroy或cat ~/.bash_history查看命令历史记录

#$0

在shell和awk中,都有一个变量$0,尽管变量名相同,但是含义却不同

对于shell来说,$0中包含的是命令行的第一个单词

对于awk来说,$0来说,$0中包含当前记录

#ps

ps命令用于收集系统中进程的详细信息.

包括CPU使用情况,正在执行的命令,内存使用,进程状态等

comm表示命令名(command name)

pcpu表示CPU使用率(CPU usage in percent)

#watch

watch命令不断地查看输出

可以用来在终端中以固定的时间间隔监视命令输出

-n SECOND 命令默认每2秒更新一次,指定需要更新输出的时间间隔

-d 可以将时间间隔前后的命令输出差异以不同颜色突出标示出来

第九章:管理重任

#ps

-f 显示包含更多信息的更多列

-e(every)或-a(all) 获取运行在系统中的每一个进程的信息

-o 指定想要显示的列,以逗号操作符作为定界符

可以用--sort对ps命令的输出根据特定的列进行排序,在参数前面加上+(升序)或-(降序)来指定排序方式

-t 指定进程所属的TTY

-L 在ps输出中显示线程的相关信息

NLWP 进程的线程数量 | NLP 每个条目的线程ID

ps -eo cmd e 显示进程的环境变量,这种环境跟踪方法的用途之一就是解决apt-get软件包管理器的故障

#top

默认会输出一个占用CPU最多的进程列表

#pgrep

可以获得一个特定命令的进程ID列表

-d 指定输出定界符,而不以换行符作为定界符

-u 指定进程的用户列表

-c 返回所匹配的进程数量

#kill

每一种信号都同一个整数值相关联,当进程接收到一个信号时,它会通过执行对就的信号处理程序来进行响应

像Ctrl+C/Ctrl+Z这种作业都属于信号

kill命令可用来向进程发送信号,而trap命令用来处理所接收的信号

kill -l 列出所有可用的信号

kill PROCESS_ID_LIST 终止一个进程

kill -s SIGNAL PID 通过kill命令向进程发送指定的信号

#killall

-u 通过名称以及所属用户名指定进程

-i 在杀死进程前进行确认

#trap

在脚本中用来为信号分配信号处理程序

一旦使用trap将某个函数分配给一个信号,那么当脚本运行时收到这个信号,对应于信号的函数就会开始执行

通过trap命令,我们能够为任意可用的信号(kill -l)定义处理程序,也可以为多个信号指定单个信号处理程序

#which

用来找出某个命令的位置

#whereis

它不仅返回命令的路径,还能够打印出其对应的命令手册的位置以及命令源代码的路径(如果有的话)

#file

用来确定文件的类型

#whatis

输出作为参数的命令的简短描述信息

#wall

wall命令用来向所有当前登录用户的终端写入消息

终端是作为设备存在的,因此那些打开的终端在/dev/pts/中都会有对应的设备节点文件.向特定的设备写入数据将会在对应的终端中显示出消息

mesg y 允许写入消息

mesg n 禁止写入消息

#uname

uname -n 打印当前系统的主机名 | hostname

uname -a 打印linux内核版本/硬件架构等详细信息

uname -r 打印内核发行版本

uname -m 打印主机类型

cat /proc/cpuinfo 打印CPU的相关信息

cat /proc/meminfo 打印内存在的详细信息

cat /proc/partitions 列出系统的分区信息 | fdisk -l

lshw 获取系统的详细信息

#/proc

/proc是一个位于内存中的伪文件系统(in-memory pseudo filesystem),它的引入是为了提供一个可以从用户空间(user space)读取系统参数的接口

每一个运行的进程在/proc中都有一个对应的目录.进程的目录名和进程ID相同

environ 包含与进程相关联的环境变量

ext 是一个到进程工作目录的符号链接

fd 包含了由进程所使用的文件描述符

#cron

安排脚本在某个时间或每隔一段时间来运行

cron通过守护进程cron使得任务能够以固定的时间间隔在系统后台自动运行

cron利用一个被称为"cron表(cron table)"的文件,这个文件中存储了需要执行的脚本或命令的调度列表以及执行时间

命令crontab用来添加高度条目

每一位用户都有自己的cron调度,通常这也被称为一个cron作业

分钟(0~59)|小时(0~23)|天(1~31)|月份(1~12)|工作日(0~6)|命令

星号(*)指定了命令应该在每一个时间阶段执行

如果希望在某个特定时段执行命令,那么就在对应的时间字段中指定时段,并用逗号分隔,如"5,10"

*/5 可以每5分钟执行一次命令

-l 列出现有的cron表中的内容

-u 指定用户名来查看其他用户的cron表

-r 移除当前用户的cron表

#mysql

要处理mysql数据库,系统中必须安装mysql-server和mysql-client软件包

SET @i:=0是一个SQL构件(SQL construct),用来设置变量i=0

 

 

 

你可能感兴趣的:(linux,linux,shell,shell,脚本攻略,脚本攻略,百晓生,百晓生,mystery)