Bootstrap

Shell脚本学习-阶段二十七-命令解释二

文章目录-命令解释二


前言


# ed
单行纯文本编辑器, 它有命令模式 (commandmode)和输入模式(inputmode)两种工作模式:
A: 切换到输入模式,在文件的最后一行之后输入新的内容;
C: 切换到输入模式,用输入的内容替换掉最后一行的内容;
i: 切换到输入模式, 在当前行之前加入一个新的空行来输入内容;
d: 用于删除最后一行文本内容;
n: 用于显示最后一行的行号和内容;
w: <文件名> : 一给定的文件名保存当前正在编辑的文件;
q: 退出ed编辑器.

emacs

功能强大的全屏文本编辑器, 它支持多种编程语言,具有很多优良的特性.
有众多的系统管理员和软件开发者使用emacs.

jed

由Slang所开发,其主要用用途是编辑程序的源代码, 它支持彩色语法加亮显示, 可以模拟emacs,EDT,wordstar和Brief编辑器.

joe

功能强大的纯文本编辑器, 拥有众多编写程序和文本的优良特性. DEBIAN中不存在此编辑器.

nano================

文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行, 但用这种方式来处理某些文件可能会带来问题, 比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了.因此,如果你想避免这种情况出现,就加上-w选项吧.使用Ctrl+O来保存所作的修改,退出按Ctrl+X.KALI系统中含此工具.
nano -w /etc/default/keyboard(修改键盘布局为英式或美式等)
nano -w /etc/network/interfaces(修改网络配置)
nano -w /etc/hosts
nano -w /etc/resolv.cof(修改DNS信息)
nano -w /etc/apt/sources.list(修改更新源, 不需要的可以加#注释)

pico

功能强大全屏幕的文本编辑器.
pico的操作简单,提供了丰富的快捷键.
DEBIAN中存在此编辑器.

sed===================

一种在线编辑/流编辑器. 它是文本处理中非常好的工具, 能够完善的配合正则表达式使用. 处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"
(patternspace),接着用sed命令处理缓冲区中的内容, 处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等.
如果没有输入文件, 那么程序将从标准输入读取数据.

sed 'ld' test.txt (删除test.txt文件的第一行);
sed '%d' test.txt (删除test.txt文件的最后一行);
sed '1,3d' test.txt (删除test.txt文件的第一行,第三行);
sed '2,%d' test.txt (删除test.txt文件的第二行,最后一行);
sed 只有在使用-i参数时才会对文件进行真正的修改,否则不实质改变文件的内容.

与Vim不同的是, sed可以在不打开文件的情况下直接查找,搜索,替换文本的内容.
例如: 
	sed -i -e '/^#/d' smb.conf -e '/^\;/d' -e '/^$/d' -e '/homes/,$d' (用SED去除空行和注释行, 并把homes以下的设置都删除.)
例如:
	sed -i 's/80/8080/g' ports.conf (将ports文件中的80端口修改为8080端口.)
	
假设处理的文本为test.file. 在每行的头添加字符(前缀), 比如"HEAD",命令如下: 
sed 's/^/HEAD&/g' test.file;
在每行的行尾添加字符,比如"TAIL",命令如下:
	sed 's/$/&TAIL/g' test.file
	
将this is a test line 追加到以test开头的行前面:
	sed '/^test/i\this is a test line' file

1."^"代表行首, "$"代表行尾
2.'s/$/&TAIL/g'中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了, 否则只会替换每行第一个, 而不继续往后找了
3.如果想导出文件,在命令末尾加"> outfile_name";如果想在源文本上更改,添加选项"-i",如
4.也可以把两条命令合在一起,在test.file的每一行的行头和行尾分别添加字符"HEAD", "TAIL",
命令: 
sed '/./{s/^/HEAD&/;s/$/&TAIL/}' test.file

vi,vim============

UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器.Linux中的vi编辑器叫vim, 它是vi的增强版 (viImproved),与vi编辑器完全兼容,而且实现了很多增强功能.
vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确vi编辑器就必须熟练掌握着两种模式的切换.默认情况下,打开vi编辑器后自动进入命令行模式.从编辑模式切换到命令模式使用"esc"键,从命令模式切换到编辑模式使用"A","a","O","o","I","i"键.
KALI中有此命令.
VIM有两个配置文件 (全局配置文件/etc/vim/virmc或/etc/vimrc,个人配置文件/home/XXX/.vimrc),它的配置选项有几百项.个人配置文件优先于全局配置文件,所以一般只修改个人配置文件.VIM有丰富的插件.
在vim中用密码保护文件:
	vim +X filename, 或者在退出vim之前使用:X命令来加密你的文件,vim会提示你输入一个密码.

mtype=============

mtype为mtools工具指令, 模拟MS-DOS的type指令, 可显示MS-DOS文件的内容.

rgrep==========

用于递归查找文件里符合条件的字符串.rgrep指令的功能和grep指令类似,可查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设rgrep指令会把含有范本样式的那一列显示出来.

ex

在ex模式下启动vim文本编辑器.ex执行效果如同vi-E,适用语法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim 中输入:vi或:visual即可.

cmp

比较两个文件是否有差异. 当相互比较的两个文件完全一样时,则该指令不会显示任何信息.若发现有差异,预设会标示出第一个不同之处的字符和列数编号.若不指定任何文件名称或是所给予的文件名为"-",则cmp指令会从标准输入设备读取数据.-l: 将字节以十进制的方式输出, 并方便将两个文件中不同的以八进制的方式输出.cmp testfile testfile1 #比较两个指定的文件注意: 在比较结果中, 只能够显示第一比较结果.

bzcmp

主要功能是在不真正解压缩.bz2压缩包的情况下,比较两个压缩包中的文件,省去了解压缩后在调用cmp命令的过程.

comm

可以用于两个文件之间的比较,它有一些选项可以用来调整输出, 以便执行交集,球差,以及差集操作.

diff===========

在最简单的情况下, 比较给定的两个文件的不同. 如果适用"-"代替"文件"参数,则要比较的内容将来自标准输入.diff命令是以逐行的方式,比较文本文件的异同处.如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作.将目录/use/li下的文件"test.txt"与当前目录下的文件快速找出两个目录的不同:	diff /tmp/r/ /tmp/s/

bzdiff

直接比较两个 ".bz2" 压缩包中文件的不同, 省去了解压缩后再调用diff命令的过程.

diffstat

显示diff命令输出信息的柱状图, 用以显示diff命令比较两个文件的不同统计信息.用户也可以直接适用|将diff命令所输出的结果直接送给diffstat命令进行统计结果的显示.使用该命令时, 若所比较的文件或者子目录不在当前目录下, 则应该使用其完整路径.diff test1 test2 | diffstat #进行比较结果的统计显示

diff3

比较3个文件, 将3个文件的不同的地方显示到标准输出.

find==============

在指定目录下,可以通过权限, 用户, 组, 文件类型, 日期, 大小等可能的条件查找文件,速度较慢.在当前工作目录中查找名称为test.c的所有文件:	find test.c;在当前工作目录中查找名为test.PHP的所有PHP文件:	find -type f -name test.php;查找/home目录下的所有文件,名称为 test:	find /home -name test;查找目录中的所有PHP文件:	find -type f -name "*.php";找到名称为test的所有文件,并在/home目录中同时包含大写和小写字母:	find /home -iname test;在/目录中查找名称为test的所有目录:	find / -type d -name test;根据文件类型进行搜索:	find -type 类型参数.	(f: 普通文件 d: 目录文件 l: 符号链接文件 s: 套接字文件 b: 块设备文件 c:字符设备文件 p: 管道文件)	查找权限为777的所有文件:	find -type f -perm 777 -print;查找777权限的文件夹:	find -type d -perm 777;查找权限设置为644的所有SGID位文件:	find / -perm 644;查找权限位551的所有Sucky Bit设置文件:	find / -perm 551;查找所有SUID集文件:	find / -perm /u=s;查找所有只读文件:	find / -perm /u=r;查找所有可执行文件:	find / -perm /u=x;查找所有777权限文件,并使用chmod命令将权限设置为 644:	find / -type d -perm 777 -print -exec chmod 755 {}\;查找所有777权限文件,并使用chmod命令将权限设置为755:	find / -type d -perm 777 -print -exec chmod 755 {} \;查找并删除多个文件:	find -type f -name "*.txt" -exec rm -f {} \;查找特定目录下的所有空文件:	find / -type f -empty;	find . -type d -empty;查找所有隐藏文件:	find / -type f -name ".*"	根据文件时间戳进行搜索:	find . -type f 时间戳;根据文件大小进行匹配:	find -type f -size 文件大小单元;查找最近1小时内访问的文件:	find -amin -60;查找最近1小时内修改的所有文件:	find -mmin -60;查找最近1小时内更改的所有文件:	find -cmin -60;查找所有被修改超过50天以及少于100天的文件:	find / -mtime +50 -mtime -100;查找最近50天访问的文件:	find / -atime 50;	删除当前目录下所有.txt文件:	find . -type f -name "*.txt" delete;查找超过10MB的所有.mp3文件并删除它们:	find / -type f -name "*.mp3" -size +10M -exec rm -rf {} \;列出所有长度为零的文件:	find . -empty;列出当前目录及目录下所有文件和文件夹:	find . 基于正则表达式匹配文件路径;find -regex ".*\(\.txt\|\.pdf\)$";找出/home下不是以.txt结尾的文件:	find /home ! -name "*.txt";	在find命令查找到的文件上执行命令:	find -iname "MyCProgram.c" -exec md5sum {} \;下面的find命令的例子, 遍历文件系统一次, 列出拥有setuid属性的文件和目录,写入/root/suid.txt文件,如果文件大小超过100M, 将其记录到/root/big.txt中:	find /\(-perm -4000 -fprintf /root/suid.txt '%#m %u %p\n'\).\\(-size +100M-fprintf /root/big.txt '%-10s%p\n'\)

locate/slocate=========

查找文件或目录. locate命令其实是find -name的另一种写法, 但是要比后者快得多, 原因在于它不搜索具体目录, 而是搜索一个数据库/var/lib/mlocate/mlocate.db, 这个数据库中含有本地所有文件信息.Linux系统自动创建这个数据库,并且每天自动更新一次, 所以使用locate命令查不到最新变动过的文件. 为了避免这种情况,可以在使用locate之前,先使用updatedb命令, 手动更新数据库.-e 将排除在寻找的范围之外.-c: 只显示统计多少个符合条件的路径.-r: 能给予基本正则表达式来编写命令.搜索etc目录下所有以so开头的文件: 	locate /etc/so搜索用户主目录下,所有以m开头的文件:	locate ~ //搜索用户主目录下, 所有以m开头的文件, 并且忽略大小写:	locate -i ~ /mlocate pwd使用Regex 来搜索以 ".foo" 结尾的文件:	locate -r '.foo$'

whereis==========

whereis 命令只能用于程序名的搜索, 而且只搜索二进制文件(参数-b),man说明文件(参数-m) 和源代码文件 (参数-s). 如果省略参数,则返回所有信息.和find相比, whereis查找的速度非常快, 这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时, 会从数据库中查找数据,而不是像find命令那样通过遍历硬盘来查找. 但是该数据库文件并不是实时更新, 默认情况下是一星期更新一次, 因此, 我们在用whereis和locate查找文件时, 有时会找到已经被删除的数据,或者刚刚建立文件, 却无法查找到, 原因就是因为数据库文件没有被更新. whereis程序还具有搜索源代码, 指定备用哦搜索路径和搜索不寻常项的能力.查找SVN程序所有相关项: whereis svn只将二进制文件 查找出来: whereis -b svn;	whereis -m svn 查出说明文档路径,	whereis -s svn 找source源文件.

updatedb

创建或更新locate /slocate命令必需的数据库文件. updatedb命令的执行过程较长, 因为在执行时它会遍历整个系统的目录树, 并将所有的文件信息写入slocate数据库文件中.补充说明:	slocate本身具有一个数据库, 里面存放了系统中文件与目录的相关信息.在一般的distribution之中, 数据库的建立都被放在crontab中自动执行.	updatedb -U /usr/local/ 更新指定命令的slocate数据库

which=========

查看可执行文件的位置. which指令会在环境变量$PATH设置的目录里查找符合条件的文件.也就是说, 使用which命令,就可以看到某个系统命令是否存在, 以及执行的到底是哪一个位置的命令. 不同的PATH配置内容所找到的命令当然不一样的!which lsmod; which adduser; which whichwhich cd 注意: 因为cd是bash内建的命令, 但which默认是找PATH内所规范的目录,所以当然找不到!

basename

显示目录或者文件的基本名称.basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称.显示一个shell变量的基本名称: basename $WORKFILE构造要给和另一个文件民初相同 (除了后缀) 的文件名称:	OFILE=`basename $1 .c`.o

tmpwatch

用于删除暂存文件.执行tmpwatch指令可删除不必要的暂存文件,您可以设置文件超时时间, 单位以小时计算.

dirname

去除文件名中的非目录部分, 仅显示与目录有关的内容.dirname命令读取指定路径保留最后一个/及其后面的字符,删除其它部分,并写结果到标准输出.如果最后一个/后无字符,dirname命令使用倒数第二个/, 并忽略其后的所有字符.dirname和basename通常在shell内部命令替换使用,以指定以恶与指定输入文件名略有差异的输出文件名.

cat==============

cat ( "concatenate" 的缩写) 命令用于选择并显示指定的一个和多个文件的有关信息, 它的使用权限是所有用户. 可以用于合并文件,添加行号, 清空文档内容,制作镜像文件. cat经常用来显示文本的内容,类似于type命令.注意: 当文件较大时, 文本在屏幕上迅速闪过(滚屏), 一般用more命令分屏显示. 为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏.按Ctrl+C(中断)键可以终止该命令的执行.例,假设m1和m2是当前目录下的两个文件:cat m1.txt (在屏幕上显示文件m1的内容),cat m1 m2 (同时显示文件m1和m2的内容),cat /dev/null > /etc/text.txt (清空text.txt的内容)\cat m1 m2 > file.txt (将文件m1和m2合并后放入文件file中),cat face.txt >> readme.txt 将前面文件的内容附加到readme.txt文件之后cat -n text1 > text2 (将text1的内容加上行号后输入到text2中),cat -b text1 text2 > text3 (将text1,text2的内容加上行号输入到text3中, 空白行不加行号)制作U盘的镜像文件, 将U盘放好后输入:	cat /dev/sda1 > OUTFILE (df -h 可以看到U盘符号)将镜像文件写入U盘: 	cat IMGFILE > /dev/sda1	cat /etc/issue 查看当前系统版本使用here doc 来生成文件:	cat > xiaoma.asp <<EOF,回车后输入文本内容,输入完成后以EOF结束.	cat还有一个重要的功能就是可以对其编号,对行进行编号功能更有-b (只能对非空百行进行编号) 和 -n (可以对所有行进行编号)两个参数:	cat -b /etc/named.conf

tac==============

将文件以行为单位反序输出,即第一行最后显示, 最后一行先显示. 由升序可编程降序, 或者降序变成升序.tac是将cat反写过来,所以它的功能就跟cat相反,cat是由第一行到最后一行连续显示在屏幕上,而tac则是由最后一行到第一行反向在屏幕上显示出来!tac log.txt

dd================

复制文件并对源文件的内容进行转换和格式化处理.dd命令功能很强大,可以把文件写入磁盘, 分区,文件,也可以把磁盘,分区,文件写入文件;用的比较多的还是用dd来备份裸设备,但是不推荐.如果需要备份oracle裸设备,可以使用rman备份,或使用第三方软件备份,使用dd的话,管理起来不大方便, 建议在有需要的时候使用dd对物理磁盘操作,如果是文件系统的话还是使用tar,backup,cpio等命令更方便.另外,使用dd对磁盘操作时,最好使用块设备文件.参数bs:同时设置读/写缓冲区的字节数(等于设置ibs和obs).有几种方法备份Linux系统,包括dd,rsync和rsnapshot等.dd bs=4M if=XXXX.img of=/dev/sdb (将IMG文件写入整个磁盘,而不是磁盘的某个分区)gzip -c -d XXX.imag.gz | dd of=/dev/sdb;将整个主硬盘清零: dd if=/dev/zero of=/dev/haddd命令常常用来制作Linux启动盘:	先找一个可引导内核,令它的根设备指向正确的根分区,然后使用dd命令将其写入软盘:	$ rdev vmlinuz /dev/hda,	$ dd if=vmliunz of=/dev/fd0,上面代码说明, 使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda,请把"hda"换成自己的根分区, 接下来用dd命令将内核写入软盘.dd if=/dev/sda of=/dev/sdb: 备份整个硬盘/dev/sda到同一系统的另一个硬盘/dev/sdb, 命令在执行过程中如有任何错误都会失败.但若加入参数 "CONV=NOERROR",则即使执行过程中有错误, 它也会继续复制.输入,输出的顺序在执行前必须检查再三, 如果两者顺序颠倒,你可能会损失所有数据.dd if=/dev/sda of=/dev/sdb conv=noerror,sync:	在备份整个硬盘时, 加入sync参数来同步I/Odd if=/dev/sda of=~/sdadisk.img:	创建一个硬盘/dev/sda的image,这种备份方法的速度快于其它方法的备份,也能让你更快捷的恢复数据.dd if=sdadisk.img of=/dev/sdb:	Sdadisk.img文件是/dev/sda的映像,恢复/dev/had的映像到/dev/sdbdd if=/dev/sda1 of=~/partition1.img:	使用dd命令备份硬盘分区dd if=/dev/cdrom of=tgsservice.iso bs=2048:	dd命令允许我们创建源文件的iso文件,所以我们可以插入CD,输入dd命令来创建一个CD的iso文件内容.使用的块大小为2048 bytes.	注意:如果光盘是自动挂载的,在使用dd命令创建iso映像之前最好umount掉以避免造成对CD ROM不必要的访问.

iconv

用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码, 反过来也行.JDK中也提供了类似的工具native2ascii.Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用的着.列出当前支持的字符编码:	iconv -l

ln==============

为文件创建连接, 连接类型分为硬连接和符号连接两种,默认的联机类型是硬连接.如果要创建符号连接必须使用"-s"选项. 注意: 符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的.Linux具有为一个文件起多个名字的功能,称为链接.被链接的文件可以存放在相同的目录下, 但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份.另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改.对于某个文件的备链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全行性.ln 后面不加-s选项相当于COPY.例如: 将VI链接到VIM上,用到的命令如下:whereis vi&&whereis vim&& ls -l /usr/bin/vi && sudo rm /usr/bin/vi && sudo ln -s /usr/bin/vim /usr/bin/vi && ls -l /usr/bin/vi

nl

nl可以将输出的文件内容自动的加上行号! 其默认的结果与cat -n 有点不太一样, nl可以将行号做比较多的显示设计, 包括位数与是否自动补齐0等等的功能.除非使用-p选项,nl命令在每个逻辑页开始的地方重新设置行号.可以单独为头,主体和页脚节设置行计算标志(例如, 头和页脚行可以备计算然而文本行不能).用nl列出log2015.log的内容:	nl log2015.log用nl列出log2015.log的内容,空本行也加上行号:	nl -b a log2015.log让行号前面自动补上0, 统一输出格式:	nl -b a -n rz log2015.lognl -b a -n rz 命令行默认为6位, 要调整位数可以加上参数 -w 3调整为3位:	nl -b a -n rz -w 3 log.txt

mcopy

用来复制MSDOS格式文件到Linux中,或是由Linux中复制MSDOS文件到磁片上.mcopy可复制单一的文件到所指定的文件名称,或是复制数个文件到所指定的目录之中. 来源与目的文件可为MSDOS或是Linux文件.mcopy指令是一种mtools工具指令,可以在DOS系统中复制文件或者在DOS与Linux操作系统之间进行文件复制.

patchchk

检查文件中不可移植的部分.

rename=============

用字符串替换的方式批量改变文件名.将main1.c重命名为main.c: 	rename main1.c main.c main1.c字母的替换:	rename "s/AA/aa/" * //把文件名中的AA替换成aa修改文件的后缀:	rename "s//.html//.php/" * //把.html后缀的改成.php后缀批量添加文件后缀:	rename "s/$//.txt/" * //把所有的文件名都以txt结尾批量删除文件名:	rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉

touch

一是用于把已经存在文件的时间标签更新为系统当前的时间 (默认方式), 它们的数据将原封不动地保留下来;二是用来创建新的空文件.touch ex2: 在当前目录下建立一个空文件ex2, 然后, 利用ls -l命令可以发现文件ex2的大小为0, 表示它是空文件.Touch后面的文件名如果存在, 则更新其修改日期, 如果不存在则创建一个内容为空的文件.创建不存在的文件(可以一次创建多个文件):	touch file1.log file2.log;使用touch创建批量空文件:	touch sysadm-{1..20}.txt;使用参考文件设置时间戳:	touch -r {参考文件} 真正文件:	touch -r cankaofile.log zhenzhengfile.log;设定文件的修改时间值:	touch -t 201211142234.50 log.log,此处的time 规定为如下形式的十进制数:[[CC]YY]MMDDhhmm[.SS].改变/更新文件和目录的访问时间:	touch -a devops.txt, touch -a /mnt/nfsshare/;更改文件和目录的修改时间:	touch -m devops.txt, touch -m /mnt/nfsshare/;

unlink

用于系统调用函数unlink去删除指定的文件.和rm命令作用一样,都是删除文件.

ftp===================

设置文件系统相关功能.ftp服
;