本文主要是介绍Shell | Shell 进阶(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Shell | Shell 进阶(二)
一、文件处理和归档
- paster命令合并文件
paster命令语法
paste [OPTION]… [FILE]…
#建如下两个文件,paste命令的示例文件
$ cat file1
Linux
Unix
Windows
Solaris
HPUX
#文件2
$ cat file2
Dell
IBM
HP
Oracle
HP
默认情况下,使用paste命令合并文件,各文件中的各行将以制表符Tab作为分隔符进行合并并输出
paste file1 file2
Linux Dell
Unix IBM
Windows HP
Solaris Oracle
HPUX HP
$ paste file2 file1
Dell Linux
IBM Unix
HP Windows
Oracle Solaris
HP HPUX
使用-d选项,,可以指定各个文件中的各行在合并时所使用的分隔符
paste -d'|' file1 file2
当合并两个以上文件时,也可以指定多个分隔符
paste -d':,' file1 file2 file3
使用-s选项,paste命令可以顺序地合并文件,即它顺序地将每个文件中的所有行的内容合并为一行
使用-s选项与-d选项结合,可以指定合并时的分隔符
使用paste命令,将文件的内容由一列转换为两列
$ paste - - < file1
Linux Unix
Windows Solaris
HPUX
使用paste命令,将文件的内容由一列转换为两列,并使用冒号“:”分隔:
$ paste -d: - - < file1
Linux:Unix
Windows:Solaris
HPUX:
使用paste命令,将文件的内容由一列转换为三列
$ paste - - - < file1
Linux Unix Windows
Solaris HPUX
- dd 命令备份和拷贝文件
dd命令可以通过可能的转换格式复制指定的输入文件到指定的输出。同时,可以指定输入和输出的块大小,以处理原始物理数据的读写。块大小的默认单位是字节(bytes),也可以在数字后跟特定的单位来指定的块大小。((1024*1024*1024 bytes)、GB(1000*1000*1000 bytes)、M(1024*1024 bytes)、MB(1000*1000bytes)、w(2bytes)和c(1 bytes)
dd命令有如下两个基本参数
if=<inputfile>——指定输入文件的路径。默认为标准输入
of=<outputfile>——指定输出文件的路径。默认为标准输出
例如,直接复制一个磁盘/dev/sda的数据到另一个磁盘/dev/sd
dd if=/dev/sda of=/dev/sdb
复制一个DVD光盘的数据到一个iso文件:
dd if=/dev/dvd of=dvd.iso
擦除一个分区的数据:
dd if=/dev/zero of=/dev/sda2
/dev/zero是Linux系统中的一个特殊文件。从文件/dev/zero读出的内容均为空字符,它的一个典型用途就是提供用于初始化数据存储器的字符流
dd命令还有另外如下两个比较重要的参数:
bs=<n>——指定输入和输出的块大小。默认单位为字节。
count=<n>——从输入读取的块数量
例如,创建一个1MB大小的文件,并且块大小为1024bytes:
dd if=/dev/zero of=/tmp/outfile bs=1024 count=1024
下述命令的组合可以用于设备的标准测试,并分析其在块大小为1024字节时的顺序读写的性能
dd if=/dev/zero bs=1024 count=1000000 of=/home/yantaol/1Gb.file
dd if=/home/yantaol/1Gb.file of=/dev/null bs=64k
gzip命令用于压缩文件,以减少文件的大小,也可以用于解压缩文件。
- gzip、bzip2命令压缩和归档文件
gzip 命令用于压缩文件,以减少文件的大小,也可以用于解压缩文件。
如果是文本文件,使用gzip命令压缩后大小将减少60%~70%。
直接使用gzip,不指定选项,将压缩指定文件,生成一个默认以.gz结尾的文件,并删除源文件
gzip 文件名
使用-c选项,会将内容输出到标准输出,使用重定向可以将输出内容写入到指定文件,保留原始文件
gzip -c image2.jpg > image2.jpg.gz
使用-d选项,gzip命令将解压缩指定的文件
gzip -d image1.jpg.gz
使用-r选项,gzip命令将递归地压缩指定目录下的文件:
gzip -r .
使用-#选项(#代表数字1~9),可以指定gzip命令压缩的级别,-1表示最快的压缩速度(但压缩率较低),而-9表示最慢的压缩速度(压缩率最好)。默认的压缩级别是-6。
例如,以最快的速度压缩文件
gzip -1 image1.jpg
bzip2
bzip2命令也同样用于压缩和解压缩文件。bzip2比gzip压缩速率高,速度稍慢
使用-k选项,可以压缩文件并保留原始文件
bzip2 -k image1.jpg
bzip2命令的
-d选项也同样用于解压缩文
-f选项表示覆盖已经存在的文件
bzip2 -df image1.jpg.bz2
- gunzip、bunzip命令解压缩文件
gunzip命令与gzip命令相对应,用于解压缩由gzip命令压缩的文件。其作用与gzip命令的-d选项相同。
bunzip2命令与bzip2命令相对应,用于解压缩由bzip2命令压缩的文件。其作用与bzip2命令的-d选项相同。
- tar命令打包和解包文件
使用-cvf选项,创建一个未经压缩的tar包:
tar -cvf home_yantaol.tar /home/yantaol
-c:创建一个新的归档。
-v:冗长地列出被处理的文件。
-f:指定归档文件的名称,即上述命令中的home_yantaol.tar是-f选项的参数
上述的-cvf选项,对归档后的文件并不提供任何的压缩。结合-z选项使用,就可以将归档后的文件使用gzip压缩:
即一般有:tar -zxvf 文件 解压文件 tar -zcvf 文件压缩
使用-tvf选项,可以在不解包的情况下列出tar包文件中的内
容:
tar -tvf home_yantaol.tar
使用-rvf选项,可以添加文件或目录到一个已存在的tar包:
tar -rvf home_yantaol.tar /home/yantaol/newfile
#注意:使用-r选项,不能添加文件或目录到一个压缩过的tar包,即-r选项不能与-z选项和-j选项结合使用。
使用-W选项,用于核实tar包的内容。
tar -cWvf home_yantaol.tar /home/yantaol
二、监测和管理磁盘
- mount、umount命令挂载和卸载存储介质
在Linux系统中,不同分区上的文件系统,或可移动设备(CD、DVD、U盘等),或NFS(网络文件系统)共享目录可以被挂载到目录树中的某一节点,之后还可以再被卸载。挂载和卸载一个文件系统,分别使用mount和umount命令。mount
#mount命令用于挂载一个文件系统,或是显示已挂载的文件系统的信息
直接运行mount命令,不带任何参数,将显示所有当前挂载的文件系统
默认情况下,mount命令的输出包括各种虚拟文件系统,如sysfs和tmpfs。使用-t选项,mount命令可以只显示某一指定文件系统类型。
只显示当前挂载的文件系统类型是ext3的文件系统:
$ mount -t ext3
如要挂载某个文件系统,使用如下格式的mount命令:
mount [OPTION]… [DEVICE] [DIRECTORY]
[DEVICE]可以是块设备的全路径(例如:/dev/sda3),或是一个通用唯一标识符(例如:UUID="12135a89-ca6d-4fd8-a347-10071d0c19cb"),或是一个卷标(例如:LABEL= "home"),或是NFS共享目录的路径(例如:hostname:/local)
#注意:挂载和卸载文件系统,通常需要root账户权限
挂载一个CD-ROM设备到/mnt目录
mount -t iso9660 -o ro /dev/cdrom /mnt
挂载一个磁盘分区到/mydata目录
mount /dev/sda5 /mydata
使用umount命令卸载文件系统时,只需指定要卸载的设备名或挂载点(即挂载时的目标目录)作为参数即可。
卸载挂载点/opt/share:
umount /opt/share
- df命令报告文件系统磁盘空间利用率
df命令语法
df [OPTION]… [FILES]…
每行显示的字段分别是设备名、总计块数量、已使用的磁盘空间、可用的磁盘空间、磁盘的使用率和挂载点
使用-a选项,df命令可以显示所有文件系统的信息,包括虚拟文件系统
使用-h选项,df命令就能以对人类可读的格式显示相应的结果信息
使用-T选项,df命令可以显示文件系统类型的信息
使用-t选项,df命令可以仅显示某一指定文件系统类型的文件系统信息
df -t ext3
使用-x选项,df命令可以显示除某一文件系统类型以外的文件系统信息
使用-m选项,df命令将以MB(兆字节)为块大小单位,显示文件系统信息
df -m
- du命令评估文件空间利用率
du命令语法
du [OPTION]… [FILE]…
直接使用du命令,不指定任何选项和参数,将以1024字节为大小单位显示当前目录下所有目录的大小
du
如果指定某一具体文件或目录作为参数,du命令将指定文件的大小,或指定目录中的各目录的大小
du /home/yantaol
使用-a选项,du命令可以递归地显示目录中各文件和目录的大小
du -a
使用-h选项,du命令将以人类可读的格式显示文件或目录的大小
du -h
使用-s选项,du命令将仅显示当前目录或是某一指定目录的总大小
du -sh
使用-0选项,du命令将以不换行的形式将输出结果显示为一行
使用--exclude选项,du命令可以排除统计符合指定模式的文件的大小
du -ah --exclude="*.jpg"
使用--time选项,du命令可以同时列出各条目的修改时间
du -h --time
三、后台执行命令
- cron、crontab命令执行计划任务
#cron是执行定时计划任务的守护进程
当系统是多用户运行级别时,cron进程会从/etc/init.d中自动启动。cron进程会在目录/var/spool/cron/crontabs/下搜索定时计划任务文件(定时计划任务文件以创建此任务的账户名命名),并将找到的这些定时计划任务载入内存。
注意:目录/var/spool/cront/crontabs中的定时计划任务文件不要直接用文本编辑器编辑,应当使用crontab命令访问和更新它们的内容。因为crontab命令可以检查这些文件中的语法错误
cron进程还会读取/etc/crontab以及目录/etc/cron.d下的内容
cron进程会每分钟唤醒一次,审查所有存储的定时计划任务,检查每个命令,看它是否应该在当前时间运行
cron每分钟会检查一次它的池目录/var/spool/cront/crontabs的修改时间(modtime)是否已经改变。如果修改时间已经改变,cron会检查所有定时计划任务文件的修改时间,并重新加载那些已经被修改的定时计划任务文件。因此,当定时计划任务文件被修改后,不需要重启cron守护进程。
定时计划任务文件由每行命令组成,每行有6个字段,由空格或制表符分隔。前5个字段表示运行任务的时间,最后一个字段是任务的命令。前5个字段的含义依次如下所示。
分钟:其值为0~59。
小时:其值为0~23。
日期:其值为1~31。
月份:其值为1~12或是Jan~Dec(月份英文名称的前3个字母)。
星期:其值为0~6或是Sun~Sat(星期英文名称的前3个字母),0表示星期日。
可以使用表达式描述
星号(*)——匹配所有可能的值。比如“0 6 * * *”表示每天6点。
连字符(-)——定义一个范围。比如“0 2 * * 1-5”表示每周一到周五的凌晨两点。
斜杠(/)——表示每间隔多少时间。比如“*/5 * * * *”表示每5分钟。
逗号(,)——表示“或”的含义。比如“0 0,6,12,18 * * *”表示每天的0点、6点、12点和18点。
使用-l选项,crontab命令可以列出当前用户的所有定时计划任务
crontab -l
使用-e选项,crontab命令将创建或修改当前用户的定时计划任务
使用-u选项,crontab命令可以查看指定用户的定时计划任务
#只有root用户有权限查看其他用户的定时计划任务。
使用-r选项,将没有确认信息地完全移除当前用户的定时计划任务
crontab -r
使用-i选项和-r选项,crontab命令将在移除定时计划任务前提示用户进行确认:
crontab -i -r crontab: really delete yantaol's crontab?
- at命令在指定时间执行命令
at 命令用于任务指定时间执行,既可以从标准输入读入命令也可以从指定文件读入
at 命令语法
at [-f file] [-q queue] [OPTION] TIME [DATE]
- at命令允许相当复杂的时间格式。如下
使用-f选项,at命令可以从指定的文件中读取命令内容,然后在指定的时间运行。
1时后运行文件myjobs.txt(命令、shell运行脚本)中的内容
at -f myjobs.txt now + 1 hour
使用-l选项,可以列出当前用户所有使用at创建的未运行或正在运行的任务(root 会列出所有用户任务)
atq命令具有与命令“at -l”相同的功能
atrm命令可以用于删除现有的任务,参数为上面显示参数编号
- &控制操作符将任务放在后台运行
只是后台进程,退出shell会全部挂掉#控制操作符&的使用方法
command &
或者script-name &
运行命令“sleep 10”并将其放入后台运行
sleep 10 &
使用jobs命令,我们可以查看后台正在运行的任务信息
使用-l选项,jobs命令可以显示后台正在运行的任务的进程号等信息
如果想将后台的任务放到前台来运行,有如下两种方法,JOB-ID即为任务编号
%JOB-ID
fg JOB-ID
如果想将上述的任务重新再放回后台运行,首先按CTRL+Z组合键,将上述放在前台的任务挂起,然后在命令行提示符下输入如下命令即可:
%1 &
bg
- nohup命令运行一个对挂起免疫的命令
nohup 能够让命令或者脚本在退出系统后继续在后台运行nohup命令语法
nohup COMMAND [ARG]… &
COMMAND:Shell脚本或命令的名称。
[ARG]:脚本或命令的参数。
&:nohup命令不能自动地将任务放在后台运行,你必须明确地在nohup命令的末尾添加操作控制符&
nohup sh script.sh &
这篇关于Shell | Shell 进阶(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!