Shell | Shell 进阶(二)

2022/8/22 5:53:26

本文主要是介绍Shell | Shell 进阶(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Shell | Shell 进阶(二)


一、文件处理和归档

  1.  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
    
  2. 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命令用于压缩文件,以减少文件的大小,也可以用于解压缩文件。
    
  3. 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
    
  4. gunzip、bunzip命令解压缩文件
    gunzip命令与gzip命令相对应,用于解压缩由gzip命令压缩的文件。其作用与gzip命令的-d选项相同。
    bunzip2命令与bzip2命令相对应,用于解压缩由bzip2命令压缩的文件。其作用与bzip2命令的-d选项相同。
  5. 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
    

二、监测和管理磁盘

  1.  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
    
  2.  df命令报告文件系统磁盘空间利用率
    df命令语法
    df [OPTION]… [FILES]…
    每行显示的字段分别是设备名、总计块数量、已使用的磁盘空间、可用的磁盘空间、磁盘的使用率和挂载点
    
    使用-a选项,df命令可以显示所有文件系统的信息,包括虚拟文件系统
    使用-h选项,df命令就能以对人类可读的格式显示相应的结果信息
    使用-T选项,df命令可以显示文件系统类型的信息
    使用-t选项,df命令可以仅显示某一指定文件系统类型的文件系统信息
    	df -t ext3
    使用-x选项,df命令可以显示除某一文件系统类型以外的文件系统信息
    使用-m选项,df命令将以MB(兆字节)为块大小单位,显示文件系统信息
    	df -m
    
  3.  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
    

三、后台执行命令

  1. 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?
    
  2. at命令在指定时间执行命令
    at 命令用于任务指定时间执行,既可以从标准输入读入命令也可以从指定文件读入
    at 命令语法
    	at [-f file] [-q queue] [OPTION] TIME [DATE]
    
    • at命令允许相当复杂的时间格式。如下
      image
    使用-f选项,at命令可以从指定的文件中读取命令内容,然后在指定的时间运行。
    	1时后运行文件myjobs.txt(命令、shell运行脚本)中的内容
    	at -f myjobs.txt now + 1 hour
    使用-l选项,可以列出当前用户所有使用at创建的未运行或正在运行的任务(root 会列出所有用户任务)
    
    atq命令具有与命令“at -l”相同的功能
    atrm命令可以用于删除现有的任务,参数为上面显示参数编号
    
  3. &控制操作符将任务放在后台运行
    只是后台进程,退出shell会全部挂掉
    #控制操作符&的使用方法
    command &
    或者script-name &
    运行命令“sleep 10”并将其放入后台运行
    sleep 10 &
    使用jobs命令,我们可以查看后台正在运行的任务信息
    使用-l选项,jobs命令可以显示后台正在运行的任务的进程号等信息
    如果想将后台的任务放到前台来运行,有如下两种方法,JOB-ID即为任务编号
     %JOB-ID
     fg JOB-ID
     如果想将上述的任务重新再放回后台运行,首先按CTRL+Z组合键,将上述放在前台的任务挂起,然后在命令行提示符下输入如下命令即可:
     %1 &
     bg
    
  4.  nohup命令运行一个对挂起免疫的命令
    nohup 能够让命令或者脚本在退出系统后继续在后台运行
    nohup命令语法
    nohup COMMAND [ARG]… &
    COMMAND:Shell脚本或命令的名称。
    [ARG]:脚本或命令的参数。
    &:nohup命令不能自动地将任务放在后台运行,你必须明确地在nohup命令的末尾添加操作控制符&
    	nohup sh script.sh &
    


这篇关于Shell | Shell 进阶(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程