ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Shell | Shell 进阶(二)

2022-08-21 16:04:13  阅读:173  来源: 互联网

标签:选项 文件 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,进阶,指定,文件系统,命令,使用
来源: https://www.cnblogs.com/zhy-god/p/16610118.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有