您的位置:首页 > 运维架构 > Linux

Linux 文件与目录管理

2014-04-04 14:19 267 查看
Linux文件与目录管理常用shellnl-bawaiting.py//显示文件行号
[root@www~]#nl[-bnw]文件
选项与参数:
-b:指定行号指定的方式,主要有两种:
-ba:表示不论是否为空行,也同样列出行号(类似cat-n);
-bt:如果有空行,空的那一行不要列出行号(默认值);
-n:列出行号表示的方法,主要有三种:
-nln:行号在萤幕的最左方显示;
-nrn:行号在自己栏位的最右方显示,且不加0;
-nrz:行号在自己栏位的最右方显示,且加0;
-w:行号栏位的占用的位数。

范例一:用nl列出/etc/issue的内容
[root@www~]#nl/etc/issue
1CentOSrelease5.3(Final)
2Kernel\ronan\m

#注意看,这个文件其实有三行,第三行为空白(没有任何字节),
#因为他是空白行,所以nl不会加上行号喔!如果确定要加上行号,可以这样做:

[root@www~]#nl-ba/etc/issue
1CentOSrelease5.3(Final)
2Kernel\ronan\m
3
#呵呵!行号加上来罗~那么如果要让行号前面自动补上0呢?可这样

[root@www~]#nl-ba-nrz/etc/issue
000001CentOSrelease5.3(Final)
000002Kernel\ronan\m
000003
#嘿嘿!自动在自己栏位的地方补上0了~默认栏位是六位数,如果想要改成3位数?

[root@www~]#nl-ba-nrz-w3/etc/issue
001CentOSrelease5.3(Final)
002Kernel\ronan\m
003
#变成仅有3位数罗~

数据撷取

我们可以将输出的数据作一个最简单的撷取,那就是取出前面(head)与取出后面(tail)文字的功能。不过,要注意的是,head与tail都是以『行』为单位来进行数据撷取的喔!
head(取出前面几行)
[root@www~]#head[-nnumber]文件
选项与参数:
-n:后面接数字,代表显示几行的意思[root@www~]#head/etc/man.config
#默认的情况中,显示前面十行!若要显示前20行,就得要这样:
[root@www~]#head-n20/etc/man.config范例:如果后面100行的数据都不列印,只列印/etc/man.config的前面几行,该如何是好?
[root@www~]#head-n-100/etc/man.config

head的英文意思就是『头』啦,那么这个东西的用法自然就是显示出一个文件的前几行罗!没错!就是这样!若没有加上-n这个选项时,默认只显示十行,若只要一行呢?那就加入『head-n1filename』即可!另外那个-n选项后面的参数较有趣,如果接的是负数,例如上面范例的-n-100时,代表列前的所有行数,但不包括后面100行。举例来说,/etc/man.config共有141行,则上述的命令『head-n-100/etc/man.config』就会列出前面41行,后面100行不会列印出来了。这样说,比较容易懂了吧?^_^
tail(取出后面几行)
[root@www~]#tail[-nnumber]文件
选项与参数:
-n:后面接数字,代表显示几行的意思
-f:表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测[root@www~]#tail/etc/man.config
#默认的情况中,显示最后的十行!若要显示最后的20行,就得要这样:
[root@www~]#tail-n20/etc/man.config范例一:如果不知道/etc/man.config有几行,却只想列出100行以后的数据时?
[root@www~]#tail-n+100/etc/man.config范例二:持续侦测/var/log/messages的内容
[root@www~]#tail-f/var/log/messages
<==要等到输入[crtl]-c之后才会离开tail这个命令的侦测!

有head自然就有tail(尾巴)罗!没错!这个tail的用法跟head的用法差不多类似,只是显示的是后面几行就是了!默认也是显示十行,若要显示非十行,就加-nnumber的选项即可。范例一的内容就有趣啦!其实与head-n-xx有异曲同工之妙。当下达『tail-n+100/etc/man.config』代表该文件从100行以后都会被列出来,同样的,在man.config共有141行,因此第100~141行就会被列出来啦!前面的99行都不会被显示出来喔!至於范例二中,由於/var/log/messages随时会有数据写入,你想要让该文件有数据写入时就立刻显示到萤幕上,就利用-f这个选项,他可以一直侦测/var/log/messages这个文件,新加入的数据都会被显示到萤幕上。直到你按下[crtl]-c才会离开tail的侦测喔!
例题:

假如我想要显示/etc/man.config的第11到第20行呢?
答:

这个应该不算难,想一想,在第11到第20行,那么我取前20行,再取后十行,所以结果就是:『head-n20/etc/man.config|tail-n10』,这样就可以得到第11到第20行之间的内容了!但是里面涉及到管线命令,需要在第三篇的时候才讲的到!非纯文字档:od我们上面提到的,都是在查阅纯文字档的内容。
那么万一我们想要查阅非文字档,举例来说,例如/usr/bin/passwd这个运行档的内容时,
又该如何去读出资讯呢?事实上,由於运行档通常是binaryfile,使用上头提到的命令来读取他的内容时,
确实会产生类似乱码的数据啊!那怎么办?没关系,我们可以利用od这个命令来读取喔!
[root@www~]#od[-tTYPE]文件
选项或参数:
-t:后面可以接各种『类型(TYPE)』的输出,例如:
a:利用默认的字节来输出;
c:使用ASCII字节来输出
d[size]:利用十进位(decimal)来输出数据,每个整数占用sizebytes;
f[size]:利用浮点数值(floating)来输出数据,每个数占用sizebytes;
o[size]:利用八进位(octal)来输出数据,每个整数占用sizebytes;
x[size]:利用十六进位(hexadecimal)来输出数据,每个整数占用sizebytes;范例一:请将/usr/bin/passwd的内容使用ASCII方式来展现!
[root@www~]#od-tc/usr/bin/passwd
0000000177ELF001001001\0\0\0\0\0\0\0\0\0
0000020002\0003\0001\0\0\0260225004\b4\0\0\0
0000040020E\0\0\0\0\0\04\0\0\a\0(\0
0000060035\0034\0006\0\0\04\0\0\04200004\b
00001004200004\b340\0\0\0340\0\0\0005\0\0\0
.....(后面省略)....
#最左边第一栏是以8进位来表示bytes数。以上面范例来说,第二栏0000020代表开头是
#第16个byes(2x8)的内容之意。范例二:请将/etc/issue这个文件的内容以8进位列出储存值与ASCII的对照表
[root@www~]#od-toCc/etc/issue
0000000103145156164117123040162145154145141163145040065
CentOSrelease5
0000020056062040050106151156141154051012113145162156145
.2(Final)\nKerne
0000040154040134162040157156040141156040134155012012
l\ronan\m\n\n
0000057
#如上所示,可以发现每个字节可以对应到的数值为何!
#例如e对应的记录数值为145,转成十进位:1x8^2+4x8+5=101。

利用这个命令,可以将datafile或者是binaryfile的内容数据给他读出来喔!虽然读出的来数值默认是使用非文字档,亦即是16进位的数值来显示的,不过,我们还是可以透过-tc的选项与参数来将数据内的字节以ASCII类型的字节来显示,虽然对於一般使用者来说,这个命令的用处可能不大,但是对於工程师来说,这个命令可以将binaryfile的内容作一个大致的输出,他们可以看得出东西的啦~^_^如果对纯文字档使用这个命令,你甚至可以发现到ASCII与字节的对照表!非常有趣!例如上述的范例二,你可以发现到每个英文字e对照到的数字都是145,转成十进位你就能够发现那是101罗!如果你有任何程序语言的书,拿出来对照一下ASCII的对照表,就能够发现真是正确啊!呵呵!修改文件时间或建置新档:touchtouch这个命令最常被使用的情况是:创建一个空的文件;将某个文件日期修订为目前(mtime与atime)命令档名的搜寻:我们知道在终端机模式当中,连续输入两次[tab]按键就能够知道使用者有多少命令可以下达。那你知不知道这些命令的完整档名放在哪里?举例来说,ls这个常用的命令放在哪里呢?就透过which或type来找寻吧!which(寻找『运行档』)
[root@www~]#which[-a]command
选项或参数:
-a:将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称范例一:分别用root与一般帐号搜寻ifconfig这个命令的完整档名
[root@www~]#whichifconfig
/sbin/ifconfig<==用root可以找到正确的运行档名喔!
[root@www~]#su-vbird<==切换身份成为vbird去!
[vbird@www~]$whichifconfig
/usr/bin/which:noifconfigin(/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin
:/home/vbird/bin)<==见鬼了!竟然一般身份帐号找不到!
#因为which是根据使用者所配置的PATH变量内的目录去搜寻可运行档的!所以,
#不同的PATH配置内容所找到的命令当然不一样啦!因为/sbin不在vbird的
#PATH中,找不到也是理所当然的啊!了乎?
[vbird@www~]$exit<==记得将身份切换回原本的root范例二:用which去找出which的档名为何?
[root@www~]#whichwhich
aliaswhich='alias|/usr/bin/which--tty-only--read-alias--show-dot'
/usr/bin/which
#竟然会有两个which,其中一个是alias这玩意儿呢!那是啥?
#那就是所谓的『命令别名』,意思是输入which会等於后面接的那串命令啦!
#更多的数据我们会在bash章节中再来谈的!范例三:请找出cd这个命令的完整档名
[root@www~]#whichcd
/usr/bin/which:nocdin(/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin
:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
#瞎密?怎么可能没有cd,我明明就能够用root运行cd的啊!

这个命令是根据『PATH』这个环境变量所规范的路径,去搜寻『运行档』的档名~所以,重点是找出『运行档』而已!且which后面接的是『完整档名』喔!若加上-a选项,则可以列出所有的可以找到的同名运行档,而非仅显示第一个而已!最后一个范例最有趣,怎么cd这个常用的命令竟然找不到啊!为什么呢?这是因为cd是『bash内建的命令』啦!但是which默认是找PATH内所规范的目录,所以当然一定找不到的啊!那怎办?没关系!我们可以透过type这个命令喔!关於type的用法我们将在第十一章的bash再来谈!
文件档名的搜寻:再来谈一谈怎么搜寻文件吧!在Linux底下也有相当优异的搜寻命令呦!通常find不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻呦!为什么呢?因为whereis与locate是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!whereis(寻找特定文件)
[root@www~]#whereis[-bmsu]文件或目录名
选项与参数:
-b:只找binary格式的文件
-m:只找在说明档manual路径下的文件
-s:只找source来源文件
-u:搜寻不在上述三个项目当中的其他特殊文件范例一:请用不同的身份找出ifconfig这个档名
[root@www~]#whereisifconfig
ifconfig:/sbin/ifconfig/usr/share/man/man8/ifconfig.8.gz
[root@www~]#su-vbird<==切换身份成为vbird
[vbird@www~]$whereisifconfig<==找到同样的结果喔!
ifconfig:/sbin/ifconfig/usr/share/man/man8/ifconfig.8.gz
[vbird@www~]$exit<==回归身份成为root去!
#注意看,明明which一般使用者找不到的ifconfig却可以让whereis找到!
#这是因为系统真的有ifconfig这个『文件』,但是使用者的PATH并没有加入/sbin
#所以,未来你找不到某些命令时,先用文件搜寻命令找找看再说!范例二:只找出跟passwd有关的『说明文件』档名(manpage)
[root@www~]#whereis-mpasswd
passwd:/usr/share/man/man1/passwd.1.gz/usr/share/man/man5/passwd.5.gz

等一下我们会提到find这个搜寻命令,find是很强大的搜寻命令,但时间花用的很大!(因为find是直接搜寻硬盘,为如果你的硬盘比较老旧的话,嘿嘿!有的等!)这个时候whereis就相当的好用了!另外,whereis可以加入选项来找寻相关的数据,例如如果你是要找可运行档(binary)那么加上-b就可以啦!如果不加任何选项的话,那么就将所有的数据列出来罗!那么whereis到底是使用什么咚咚呢?为何搜寻的速度会比find快这么多?其实那也没有什么!这是因为Linux系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用whereis或者是底下要说的locate时,都会以此数据库文件的内容为准,因此,有的时后你还会发现使用这两个运行档时,会找到已经被杀掉的文件!而且也找不到最新的刚刚创建的文件呢!这就是因为这两个命令是由数据库当中的结果去搜寻文件的所在啊!更多与这个数据库有关的说明,请参考下列的locate命令。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: