第四章 Shell命令进阶

4.1 文件处理和归档

4.1.1 paste命令:合并文件

paste命令用于合并文件的行。它可以合并一个文件或多个文件中的行。paste命令的语法如下所示:

$ paste [OPTION]… [FILE]…

我们先创建如下两个文件,作为paste命令的示例文件使用:

# vim file1
Linux
Unix
Windows
Solaris
HPUX
# vim file2
Dell
IBM
HP
Oracle
HP

默认情况下,使用paste命令合并文件,各文件中的各行将以制表符Tab作为分隔符进行合并并输出:

# paste file1 file2
Linux	Dell
Unix	IBM
Windows	HP
Solaris	Oracle
HPUX	HP

使用-d选项,可以指定各个文件中的各行在合并时所使用的分隔符:

[li@hadoop104 test]$ paste -d '|' file1 file2
Linux|Dell
Unix|IBM
Windows|HP
Solaris|Oracle
HPUX|HP

当合并两个以上文件时,也可以指定多个分隔符:

[li@hadoop104 test]$ vim file3
Server
Host
OS
[li@hadoop104 test]$ paste -d ':,' file1 file2 file3
Linux:Dell,Server
Unix:IBM,Host
Windows:HP,OS
Solaris:Oracle,
HPUX:HP,

使用-s选项,paste命令可以顺序地合并文件,即它顺序地将每个文件中的所有行的内容合并为一行,由此每个文件的内容被合并为单一的一行:

[li@hadoop104 test]$ paste -s file1 file2
Linux	Unix	Windows	Solaris	HPUX
Dell	IBM	HP	Oracle	HP

4.1.2 dd命令:备份和拷贝文件

dd命令可能不是一个容易使用的命令,但如果你真正开始使用它,你会发现它是一个功能很强大的命令。它可以做很多不同的事,比如:备份一个分区、DVD或是U盘的数据,转换数据文件,或是做一些简单的硬盘或CPU速度的测试。
dd命令可以通过可能的转换格式拷贝指定的输入文件到指定的输出。同时,可以指定输入和输出的块大小,以处理原始物理数据的读写。块大小的默认单位是字节(bytes),也可以在数字后跟特定的单位来指定的块大小,比如,G (102410241024 bytes)、GB(100010001000 bytes)、M(10241024 bytes)、MB(10001000 bytes)、w(2 bytes)、c(1 bytes)。
dd命令有如下两个基本参数:

  • if=:指定输入文件的路径。默认为标准输入。
  • of=:指定输出文件的路径。默认为标准输出。

4.1.3 gzip、bzip2命令:压缩和归档文件

gzip命令用于压缩文件,以减少文件的大小,也可以用于解压缩文件。如果文件是在不同的系统间通过网络传输,这将节省网络的带宽。另外,文件所能减少的大小依赖于文件的内容,如果是文本文件,使用gzip命令压缩后大小将减少60%~70%。
直接简单地使用gzip命令,不指定任何选项,将压缩指定的文件,生成一个默认以.gz结尾的文件,并删除原始文件:

[li@Master test]$ gzip file1

使用-c选项,gzip命令会将压缩输出到标准输出,所以可以使用重定向将输出内容写入到指定的文件,从而保留原始文件:
使用-d选项,gzip命令将解压缩指定的文件:
使用-r选项,gzip命令将递归地压缩指定目录下的文件:
使用-#选项(#代表数字1~9),可以指定gzip命令压缩的级别,-1表示最快的压缩速度(但压缩率较低),而-9表示最慢的压缩速度(压缩率最好)。默认的压缩级别是-6.

bzip2命令也同样用于压缩和解压文件。与gzip相比,bzip2命令具有更好的压缩率,但bzip2的压缩速度比gzip稍慢。bzip2以可接受的速度提供较高的压缩率。
与gzip命令的用法相似,直接使用bzip2命令,不指定任何选项,将对指定的文件进行压缩,生成一个默认以.bz2结尾的文件,并删除原始文件:
bzip2命令的-k选项,可以压缩文件并保留原始文件:
bzip2命令的-d选项也同样用于解压缩文件:
-f选项表示覆盖已保存的文件。

4.1.4 gunzip、bunzip2命令:解压缩文件

gunzip命令与gzip命令相对应,用于解压缩由gzip命令压缩的文件。其作用于gzip命令的-d选项相同。
直接使用gunzip命令解压缩一个文件:

$ gunzip image1.jpg.gz

使用-c选项,将解压后的内容重定向一个文件,以保留原始压缩文件:

$ gunzip -c image1.jpg.gz > image1.jpg

bunzip2命令与bzip2命令相对应,用于解压缩由bzip2命令压缩的文件。其作用于bzip2命令的-d选项相同。
直接使用bunzip2命令解压缩一个文件:

$ bunzip2 image1.jpg.bz2

使用-k选项,bunzip2命令可以解压缩文件并保留原始文件:

$ bunzip2 -k image1.jpg.bz2

4.1.5 tar命令:打包和解包文件

tar命令是Linux系统中主要的归档工具。使用tar命令归档后生成的文件被我们称作为tar包。理解tar命令各选项的用法将帮助你熟练掌握归档文件的操作。
tar命令的语法如下所示:

$ tar [OPTION]… [FILE]…

选项:

  • -c:创建一个新的归档
  • -v:冗长地列出被处理的文件
  • -f:指定归档文件的名称

4.2 监测和管理磁盘

4.2.1 mount、umount命令:挂载和卸载存储介质

在Linux系统中,不同分区上的文件系统,或可移动设备(CD、DVD、U盘等),或NFS(网络文件系统)共享目录可以被挂载到目录树中的某一节点,之后还可以再被卸载。挂载和卸载一个文件系统,分别使用mount和umount命令。
mount命令用于挂载一个文件系统,或是显示已挂载的文件系统的信息。

4.2.2 df命令:报告文件系统磁盘空间利用率

df命令用于显示文件系统的可用的磁盘空间的数量。如果没指定具体的挂载点,df命令将显示所有当前挂载的文件系统的可用空间的信息。默认情况下,显示的空间将1K块大小为单位。其命令的语法如下所示:

$ df [OPTION]… [FILES]…

4.2.3 du命令:评估文件空间利用率

du命令用于概述每个文件和目录所占磁盘空间的大小。du命令有用于得到多种格式结果的多个参数选项,du命令还可以递归地显示文件和目录的大小。
du命令的语法如下所示:

$ du [OPTION]… [FILE]…

4.3 后台执行命令

4.3.1 cron、crontab命令:执行计划任务

cron是执行定时计划任务的守护进程。当系统是多用户运行级别时,cron进程会从/etc/init.d中自动启动。cron进程会在目录/var/spool/cron/crontabs/下搜索定时计划任务文件(定时计划任务文件以创建此任务的账户名命名),并将找到的这些定时计划任务载入内存。
cron进程还会读取/etc/crontab以及目录/etc/cron.d下的内容。
cron进程会每分钟唤醒一次,审查所有存储的定时计划任务,检查每个命令看它是否应该在当前时间运行。
另外,cron每分钟会检查一次它的池目录/var/spool/cront/crontabs的修改时间(modtime)是否已经改变。如果修改时间已经改变,cron会检查所有定时计划任务文件的修改时间,并重新加载那些已经被修改的定时计划任务文件。因此,当定时计划任务文件被修改后,不需要重启cron守护进程。
crontab命令用于创建、修改、删除和查看定时计划任务。每个用户可以使用crontab命令创建自己的定时计划任务,生成的定时计划任务文件将以用户的账户名命名。
定时计划任务文件由每行命令组成,每行有6个字段,由空格或制表符分隔。前五个字段表示运行任务的时间,最后一个字段是任务的命令。
前五个字段的含义依次如下所示:

  • 分钟:其值为0-59。
  • 小时:其值为0-23。
  • 日期:其值为1-31。
  • 月份:其值为1-12或是Jan-Dec(月份英文名称的前三个字母)。
  • 星期:其值为0-6或是Sun-Sat(星期英文名称的前三个字母),0表示星期日。

在这前五个字段中,还可以使用以下描述的特殊字符:

  • 星号()- 匹配所有可能的值。比如“0 6 ”表示每天六点。
  • 连字符(-)- 定义一个范围。比如“0 2 1-5”表示每周一到周五的凌晨两点。
  • 斜杠(/)- 表示每间隔多少时间。比如“/5 *”表示每五分钟。
  • 逗号(,)- 表示‘或’的含义。比如“0 0,6,12,18 *”表示每天的0点,6点,12点和18点。

conntab -l
30 6 * * 0 /home/li/

4.3.2 at命令:在指定时间执行命令

at命令用于安排一个任务在指定的时间运行。at命令可以从标准输入读入命令,也可以从指定的文件中读入,然后在指定的时间运行这些命令。
at命令的语法如下所示:

$ at [-f file] [-q queue] [OPTION] TIME [DATE]

4.3.3 &控制操作符:讲任务放在后台运行

字符‘&’是Bash内置的用于并行处理进程的一个控制操作符。在命令行的末尾添加‘&’将会在后台运行该命令,它将在当前的Shell进程下启动一个子Shell进程(我们将在13.2节中详细讲述进程的概念,请参考)。所以当命令在后台运行时,你可以继续在此终端输入并运行其它命令。
控制操作符&的使用方法类似如下所示:

$ command &

$ script-name &

当使用控制操作符&将一个命令或脚本放到后台执行后,会显示这个后台任务的编号及其对应的子进程号。

4.3.4 nohup命令:运行一个对挂起免疫的命令

有时一个任务或命令会运行很长时间,如果你不确定这个任务什么时候才能运行结束,这时就最好把它放到后台去运行。然而一旦你登出系统,这个任务将被终止,你该怎么办?
想必你已经知道了答案,使用nohup命令就可以解决这个问题,它能让你运行的命令或脚本在你登出系统后继续在后台运行。其命令的语法格式如下所示:

$ nohup COMMAND [ARG]… &

  • COMMAND:Shell脚本或命令的名称。
  • [ARG]:脚本或命令的参数。
  • &:nohup命令不能自动地将任务放在后台运行,你必须明确地在nohup命令的末尾添加操作控制符&。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是少爷.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值