目录的相关操作:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录
常见的处理目录的指令
• cd:变换目录
• pwd:显示目前的目录
[root@linux ~]# pwd [-P]
参数:
-P :显示出确实的路径,而非使用连结 (link) 路径。
• mkdir:建立一个新的目录
[root@linux ~]# mkdir [-mp] 目录名称
参数:
-m :设定档案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录递归建立起来!
• rmdir:删除一个空的目录
[root@linux ~]# rmdir [-p] 目录名称
参数:
-p :连同上层『空的』目录也一起删除
• pwd (显示目前所在的目录)Print Working Directory
档案与目录的检视: ls
[root@linux ~]# ls [--color={none,auto,always}] 目录名称
[root@linux ~]# ls [--full-time] 目录名称
参数:
-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~
-A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~
-d :仅列出目录本身,而不是列出目录内的档案数据
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F :根据档案、目录等信息,给予附加数据结构,例如:
*:代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案;
-h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 位置,而非列出档案属性;
-l :长数据串行出,包含档案的属性等等数据;
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID 与 GID 会在账号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来;
-S :以档案容量大小排序!
-t :依时间排序
• cp (复制档案或目录)
[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)
[root@linux ~]# cp [options] source1 source2 source3 .... directory
参数:
-a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
• rm (移除档案或目录)
[root@linux ~]# rm [-fir] 档案或目录
参数:
-f :就是 force 的意思,强制移除;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了
• mv (移动档案与目录,或更名)
[root@linux ~]# mv [-fiu] source destination
[root@linux ~]# mv [options] source1 source2 source3 .... directory
参数:
-f :force 强制的意思,强制直接移动而不询问;
-i :若目标档案 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在,且 source 比较新,才会更新 (update)
档案内容查阅:
直接检视档案内容
• cat 由第一行开始显示档案内容
• tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
• nl 显示的时候,顺道输出行号!
• more 一页一页的显示档案内容
• less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
• head 只看头几行
• tail 只看尾巴几行
• od 以二进制的方式读取档案内容
• cat (concatenate) 主要的功能是将一个档案的内容连续的印出在屏幕上面!
[root@linux ~]# cat [-AEnTv]
参数:
-A :相当于 -vET 的整合参数,可列出一些特殊字符~
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
范例一:检阅 /etc/issue 这个档案的内容
[root@linux ~]# cat /etc/issue
Fedora Core release 4 (Stentz)
Kernel \r on an \m
范例二:承上题,顺便打印出行号时!
[root@linux ~]# cat -n /etc/issue
1 Fedora Core release 4 (Stentz)
2 Kernel \r on an \m
3
• tac (反向列示)
[root@linux ~]# tac /etc/issue
Kernel \r on an \m
• nl (添加行号打印)
[root@linux ~]# nl [-bnw] 档案
参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号;
-b t :如果有空行,空的那一行不要列出行号;
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的位数。
范例一:列出 /etc/issue 的内容
[root@linux ~]# nl /etc/issue
1 Fedora Core release 4 (Stentz)
2 Kernel \r on an \m
[root@linux ~]# nl -b a /etc/issue
1 Fedora Core release 4 (Stentz)
2 Kernel \r on an \m
3
# 呵呵!行号加上来啰~那么如果要让行号前面自动补上 0 呢?可这样
[root@linux ~]# nl -b a -n rz /etc/issue
000001 Fedora Core release 4 (Stentz)
000002 Kernel \r on an \m
000003
# 嘿嘿!自动在自己字段的地方补上 0 了~预设字段是六位数,如果想要改成 3 位数?
[root@linux ~]# nl -b a -n rz -w 3 /etc/issue
001 Fedora Core release 4 (Stentz)
002 Kernel \r on an \m
003
# 变成仅有 3 位数啰~
• more (一页一页翻动)
在 more 这个程序的运作过程中,你有几个按键可以按的:
• 空格键 (space):代表向下翻一页;
• Enter :代表向下翻『一行』;
• /字符串 :代表在这个显示的内容当中,向下搜寻『字符串』;
• :f :立刻显示出文件名以及目前显示的行数;
• q :代表立刻离开 more ,不再显示该档案内容。
• less (一页一页翻动)
在 more 的时候,我们并没有办法向前面翻, 只能
往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看
文件,您瞧,是不是更容易使用来观看一个档案的内容了呢!?
less 里头可以拥有更多的『搜寻』功能喔!不止可以向下搜寻,也可以向上搜寻~ 实在是
很不错用~基本上,可以输入的指令有:
• 空格键 :向下翻动一页;
• [pagedown] :向下翻动一页;
• [pageup] :向上翻动一页;
• /字符串 :向下搜寻『字符串』的功能;
• ?字符串 :向上搜寻『字符串』的功能;
• n :重复前一个搜寻 ( 与 / 或 ? 有关! )
• N :反向的重复前一个搜寻 ( 与 / 或 ? 有关! )
• q :离开 less 这个程序;
资料撷取
• head (取出前面几行)
[root@linux ~]# head [-n number] 档案
参数:
-n :后面接数字,代表显示几行的意思
范例:
[root@linux ~]# head /etc/man.config
# 预设的情况中,显示前面十行!若要显示前 20 行,就得要这样:
• tail (取出后面几行)
[root@linux ~]# tail [-n number] 档案
参数:
-n :后面接数字,代表显示几行的意思
范例:
[root@linux ~]# tail /etc/man.config
# 预设的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
例题一:假如我想要显示 ~/.bashrc 的第 11 到第 20 行呢?
答:
这个应该不算难,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,
所以结果就是:『 head –n 20 ~/.bashrc | tail –n 10 』,这样就可以得到第 11
到第 20 行之间的内容了!但是里面涉及到管线命令,需要在第三篇的时候才讲的到!
非纯文字文件: od
[root@linux ~]# od [-t TYPE] 档案
参数:
-t :后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用预设的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes ;
f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ;
o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes ;
范例:
[root@linux ~]# od -t c /usr/bin/passwd
0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
修改档案时间与建置新档: touch
每个档案在 linux 底下都会记录三个主要的变动时间,
• modification time (mtime):当该档案的『内容数据』变更时,就会更新这个时间! 内容数据指的是档案的内容,而不是档案的属性喔!
• status time (ctime):当该档案的『状态 (status)』改变时,就会更新这个时间,举例来说, 像是权限与属性被更改了,都会更新这个时间啊~
• access time (atime):当『该档案的内容被取用』时,就会更新这个读取时间 (access)。 举例来说,我们使用 cat 去读取 ~/.bashrc ,就会更新 atime 了。
[root@linux ~]# touch [-acdmt] 档案
参数:
-a :仅修订 access time;
-c :仅修改时间,而不建立档案;
-d :后面可以接日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接时间,格式为[YYMMDDhhmm]
范例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期
[root@localhost tmp]# ll bashrc;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 root root 176 Jan 10 00:31 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:31 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:31 bashrc
范例三:修改案例二的 bashrc 档案,将日期调整为两天前
[root@localhost tmp]# touch -d "2 days ago" bashrc
[root@localhost tmp]# ll bashrc;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 root root 176 Jan 8 00:33 bashrc
-rw-r--r--. 1 root root 176 Jan 8 00:33 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:33 bashrc
范例四:将上个范例的 bashrc 日期改为 2005/07/15 2:02
[root@localhost tmp]# touch -t 0507150202 bashrc
[root@localhost tmp]# ll bashrc;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 root root 176 Jul 15 2005 bashrc
-rw-r--r--. 1 root root 176 Jul 15 2005 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:35 bashrc
注意的是,即使我们复制一个档案时,复制所有的属性,但也没有办法复制 ctime 这个属性的。 ctime
可以记录这个档案最近的状态 (status) 被改变的时间。无论如何,还是要告知大家, 我们平时看的档案
属性中,比较重要的还是属于那个 mtime 啊!我们关心的常常是这个档案的『内容』 是什么时候被更动
的说~瞭乎?
touch 这个指令最常被使用的情况是:
• 建立一个空的档案;
• 将某个档案日期修订为目前 (mtime 与 atime)
档案预设权限:umask
就是指定 『目前使用者在建立档案或目录时候的属性默认值』
[root@localhost tmp]# umask -S
u=rwx,g=rx,o=rx
[root@localhost tmp]# umask
0022
档案隐藏属性:
• chattr (设定档案隐藏属性)
[root@linux ~]# chattr [+-=][ASacdistu] 档案或目录名称
参数:
+ :增加某一个特殊参数,其它原本存在参数则不动。
- :移除某一个特殊参数,其它原本存在参数则不动。
= :设定一定,且仅有后面接的参数
A :当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access)
将不可被修改,可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生!
S :这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!
可以有效的避免数据流失!
a :当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root
才能设定这个属性。
c :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)
d :当 dump(备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)不具有 dump 功能
i :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入
或新增资料!』对于系统安全性有相当大的帮助!
j :当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在
journal 中!但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了
日志了,所以这个属性无效!
s :当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。
u :与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,
可以使用来 undeletion.
• lsattr (显示档案隐藏属性)
[root@linux ~]# lsattr [-aR] 档案或目录
参数:
-a :将隐藏文件的属性也秀出来;
-R :连同子目录的数据也一并列出来!
范例:
[root@linux tmp]# chattr +aij attrtest
[root@linux tmp]# lsattr
----ia---j--- ./attrtest
档案类型:file
[root@linux ~]# file ~/.bashrc
/root/.bashrc: ASCII text <== 告诉我们是 ASCII 的纯文字文件啊!
[root@linux ~]# file /usr/bin/passwd
档案的搜寻:
在 Linux 底下也有相当优异的搜寻系统呦!通常 find 不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先
使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!为什么呢?因为 whereis
与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!
• which (寻找『执行档』)
[root@linux ~]# which [-a] command
参数:
-a :将所有可以找到的指令均列出,而不止第一个被找到的指令名称
[root@localhost tmp]# which passwd
/usr/bin/passwd
[root@localhost tmp]# which traceroute -a
/bin/traceroute
[root@localhost tmp]#
• whereis (寻找特定档案)
[root@linux ~]# whereis [-bmsu] 档案或目录名
参数:
-b :只找 binary 的档案
-m :只找在说明文件 manual 路径下的档案
-s :只找 source 来源档案
-u :没有说明档的档案!
[root@localhost tmp]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
• locate
[root@linux ~]# locate filename
[root@linux ~]# locate passwd
/lib/security/pam_passwdqc.so
/lib/security/pam_unix_passwd.so
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/kde3/kded_kpasswdserver.l
• find
参数:
1. 与时间有关的参数:
-atime n :n 为数字,意义为在 n 天之前的『一天之内』被 access 过的档案;
-ctime n :n 为数字,意义为在 n 天之前的『一天之内』被 change 过状态的档案;
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被 modification 过的档案;
-newer file :file 为一个存在的档案,意思是说,只要档案比 file 还要新,
就会被列出来~
2. 与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的账号 ID,亦即 UID ,这个 UID 是记录在
/etc/passwd 里面与账号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者账号名称喔!例如 dmtsai
-group name:name 为群组名称喔,例如 users ;
-nouser :寻找档案的拥有者不存在 /etc/passwd 的人!
-nogroup :寻找档案的拥有群组不存在于 /etc/group 的档案!
当您自行安装软件时,很可能该软件的属性当中并没有档案拥有者,
这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
3. 与档案权限及名称有关的参数:
-name filename:搜寻文件名称为 filename 的档案;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的档案。这个 SIZE 的规格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
还要大的档案,就是『 -size +50k 』
-type TYPE :搜寻档案的类型为 TYPE 的,类型主要有:一般正规档案 (f),
装置档案 (b, c), 目录 (d), 连结档 (l), socket (s),
及 FIFO (p) 等属性。
-perm mode :搜寻档案属性『刚好等于』 mode 的档案,这个 mode 为类似 chmod
的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻档案属性『必须要全部囊括 mode 的属性』的档案,举例来说,
我们要搜寻 -rwxr--r-- ,亦即 0744 的档案,使用 -perm -0744,
当一个档案的属性为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm +mode :搜寻档案属性『包含任一 mode 的属性』的档案,举例来说,我们搜寻
-rwxr-xr-x ,亦即 -perm +755 时,但一个档案属性为 -rw-------
也会被列出来,因为他有 -rw.... 的属性存在!
4. 额外可进行的动作:
-exec command :command 为其它指令,-exec 后面可再接额外的指令来处理搜寻到
的结果。
-print :将结果打印到屏幕上,这个动作是预设动作!
范例:
范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的档案列出
[root@linux ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的档案都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 ,意思是说今天之前的 3*24 ~ 4*24 小时之间
# 有变动过的档案都被列出的意思!同时 -atime 与 -ctime 的用法相同。
范例二:寻找 /etc 底下的档案,如果档案日期比 /etc/passwd 新就列出
[root@linux ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个档案之间的新旧关系是很有用的!
范例三:搜寻 /home 底下属于 dmtsai 的档案
[root@linux ~]# find /home -user dmtsai
# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有档案时,
# 就可以利用这个指令将属于某个使用者的所有档案都找出来喔!
范例四:搜寻系统中不属于任何人的档案
[root@linux ~]# find / -nouser
# 透过这个指令,可以轻易的就找出那些不太正常的档案。
# 如果有找到不属于系统任何人的档案时,不要太紧张,
# 那有时候是正常的~尤其是您曾经以原始码自行编译软件时。
范例五:找出档名为 passwd 这个档案
[root@linux ~]# find / -name passwd
# 利用这个 -name 可以搜寻档名啊!
范例六:搜寻档案属性为 f (一般档案) 的档案
[root@linux ~]# find /home -type f
# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的档案,
# 例如 socket 与 FIFO 档案,可以用 find /var -type p 或 -type s 来找!
范例七:搜寻档案当中含有 SGID/SUID/SBIT 的属性
[root@linux ~]# find / -perm +7000
# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,
# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,
# 因此,就是 +7000 ~瞭乎?
范例八:将上个范例找到的档案使用 ls -l 列出来~
[root@linux ~]# find / -perm +7000 -exec ls -l {} \;
# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,
# 而那个 {} 代表的是『由 find 找到的内容』的意思~所以, -exec ls -l {}
# 就是将前面找到的那些档案以 ls -l 列出长的数据!至于 \; 则是表示
# -exec 的指令到此为止的意思~意思是说,整个指令其实只有在
# -exec (里面就是指令下达) \;
# 也就是说,-exec 最后一定要以 \; 结束才行!这样了解了吗?!
范例九:找出系统中,大于 1MB 的档案
[root@linux ~]# find / -size +1000k
# 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,
# 不过,俺却试不出来这个功能~所以,目前应该是仅支持到 c 与 k 吧!
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录
常见的处理目录的指令
• cd:变换目录
• pwd:显示目前的目录
[root@linux ~]# pwd [-P]
参数:
-P :显示出确实的路径,而非使用连结 (link) 路径。
• mkdir:建立一个新的目录
[root@linux ~]# mkdir [-mp] 目录名称
参数:
-m :设定档案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录递归建立起来!
• rmdir:删除一个空的目录
[root@linux ~]# rmdir [-p] 目录名称
参数:
-p :连同上层『空的』目录也一起删除
• pwd (显示目前所在的目录)Print Working Directory
档案与目录的检视: ls
[root@linux ~]# ls [--color={none,auto,always}] 目录名称
[root@linux ~]# ls [--full-time] 目录名称
参数:
-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~
-A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~
-d :仅列出目录本身,而不是列出目录内的档案数据
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F :根据档案、目录等信息,给予附加数据结构,例如:
*:代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案;
-h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 位置,而非列出档案属性;
-l :长数据串行出,包含档案的属性等等数据;
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID 与 GID 会在账号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来;
-S :以档案容量大小排序!
-t :依时间排序
• cp (复制档案或目录)
[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)
[root@linux ~]# cp [options] source1 source2 source3 .... directory
参数:
-a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
• rm (移除档案或目录)
[root@linux ~]# rm [-fir] 档案或目录
参数:
-f :就是 force 的意思,强制移除;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了
• mv (移动档案与目录,或更名)
[root@linux ~]# mv [-fiu] source destination
[root@linux ~]# mv [options] source1 source2 source3 .... directory
参数:
-f :force 强制的意思,强制直接移动而不询问;
-i :若目标档案 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在,且 source 比较新,才会更新 (update)
档案内容查阅:
直接检视档案内容
• cat 由第一行开始显示档案内容
• tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
• nl 显示的时候,顺道输出行号!
• more 一页一页的显示档案内容
• less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
• head 只看头几行
• tail 只看尾巴几行
• od 以二进制的方式读取档案内容
• cat (concatenate) 主要的功能是将一个档案的内容连续的印出在屏幕上面!
[root@linux ~]# cat [-AEnTv]
参数:
-A :相当于 -vET 的整合参数,可列出一些特殊字符~
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
范例一:检阅 /etc/issue 这个档案的内容
[root@linux ~]# cat /etc/issue
Fedora Core release 4 (Stentz)
Kernel \r on an \m
范例二:承上题,顺便打印出行号时!
[root@linux ~]# cat -n /etc/issue
1 Fedora Core release 4 (Stentz)
2 Kernel \r on an \m
3
• tac (反向列示)
[root@linux ~]# tac /etc/issue
Kernel \r on an \m
• nl (添加行号打印)
[root@linux ~]# nl [-bnw] 档案
参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号;
-b t :如果有空行,空的那一行不要列出行号;
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的位数。
范例一:列出 /etc/issue 的内容
[root@linux ~]# nl /etc/issue
1 Fedora Core release 4 (Stentz)
2 Kernel \r on an \m
[root@linux ~]# nl -b a /etc/issue
1 Fedora Core release 4 (Stentz)
2 Kernel \r on an \m
3
# 呵呵!行号加上来啰~那么如果要让行号前面自动补上 0 呢?可这样
[root@linux ~]# nl -b a -n rz /etc/issue
000001 Fedora Core release 4 (Stentz)
000002 Kernel \r on an \m
000003
# 嘿嘿!自动在自己字段的地方补上 0 了~预设字段是六位数,如果想要改成 3 位数?
[root@linux ~]# nl -b a -n rz -w 3 /etc/issue
001 Fedora Core release 4 (Stentz)
002 Kernel \r on an \m
003
# 变成仅有 3 位数啰~
• more (一页一页翻动)
在 more 这个程序的运作过程中,你有几个按键可以按的:
• 空格键 (space):代表向下翻一页;
• Enter :代表向下翻『一行』;
• /字符串 :代表在这个显示的内容当中,向下搜寻『字符串』;
• :f :立刻显示出文件名以及目前显示的行数;
• q :代表立刻离开 more ,不再显示该档案内容。
• less (一页一页翻动)
在 more 的时候,我们并没有办法向前面翻, 只能
往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看
文件,您瞧,是不是更容易使用来观看一个档案的内容了呢!?
less 里头可以拥有更多的『搜寻』功能喔!不止可以向下搜寻,也可以向上搜寻~ 实在是
很不错用~基本上,可以输入的指令有:
• 空格键 :向下翻动一页;
• [pagedown] :向下翻动一页;
• [pageup] :向上翻动一页;
• /字符串 :向下搜寻『字符串』的功能;
• ?字符串 :向上搜寻『字符串』的功能;
• n :重复前一个搜寻 ( 与 / 或 ? 有关! )
• N :反向的重复前一个搜寻 ( 与 / 或 ? 有关! )
• q :离开 less 这个程序;
资料撷取
• head (取出前面几行)
[root@linux ~]# head [-n number] 档案
参数:
-n :后面接数字,代表显示几行的意思
范例:
[root@linux ~]# head /etc/man.config
# 预设的情况中,显示前面十行!若要显示前 20 行,就得要这样:
• tail (取出后面几行)
[root@linux ~]# tail [-n number] 档案
参数:
-n :后面接数字,代表显示几行的意思
范例:
[root@linux ~]# tail /etc/man.config
# 预设的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
例题一:假如我想要显示 ~/.bashrc 的第 11 到第 20 行呢?
答:
这个应该不算难,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,
所以结果就是:『 head –n 20 ~/.bashrc | tail –n 10 』,这样就可以得到第 11
到第 20 行之间的内容了!但是里面涉及到管线命令,需要在第三篇的时候才讲的到!
非纯文字文件: od
[root@linux ~]# od [-t TYPE] 档案
参数:
-t :后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用预设的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes ;
f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes ;
o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes ;
范例:
[root@linux ~]# od -t c /usr/bin/passwd
0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
修改档案时间与建置新档: touch
每个档案在 linux 底下都会记录三个主要的变动时间,
• modification time (mtime):当该档案的『内容数据』变更时,就会更新这个时间! 内容数据指的是档案的内容,而不是档案的属性喔!
• status time (ctime):当该档案的『状态 (status)』改变时,就会更新这个时间,举例来说, 像是权限与属性被更改了,都会更新这个时间啊~
• access time (atime):当『该档案的内容被取用』时,就会更新这个读取时间 (access)。 举例来说,我们使用 cat 去读取 ~/.bashrc ,就会更新 atime 了。
[root@linux ~]# touch [-acdmt] 档案
参数:
-a :仅修订 access time;
-c :仅修改时间,而不建立档案;
-d :后面可以接日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接时间,格式为[YYMMDDhhmm]
范例二:将 ~/.bashrc 复制成为 bashrc,假设复制完全的属性,检查其日期
[root@localhost tmp]# ll bashrc;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 root root 176 Jan 10 00:31 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:31 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:31 bashrc
范例三:修改案例二的 bashrc 档案,将日期调整为两天前
[root@localhost tmp]# touch -d "2 days ago" bashrc
[root@localhost tmp]# ll bashrc;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 root root 176 Jan 8 00:33 bashrc
-rw-r--r--. 1 root root 176 Jan 8 00:33 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:33 bashrc
范例四:将上个范例的 bashrc 日期改为 2005/07/15 2:02
[root@localhost tmp]# touch -t 0507150202 bashrc
[root@localhost tmp]# ll bashrc;ll --time=atime bashrc ;ll --time=ctime bashrc ;
-rw-r--r--. 1 root root 176 Jul 15 2005 bashrc
-rw-r--r--. 1 root root 176 Jul 15 2005 bashrc
-rw-r--r--. 1 root root 176 Jan 10 00:35 bashrc
注意的是,即使我们复制一个档案时,复制所有的属性,但也没有办法复制 ctime 这个属性的。 ctime
可以记录这个档案最近的状态 (status) 被改变的时间。无论如何,还是要告知大家, 我们平时看的档案
属性中,比较重要的还是属于那个 mtime 啊!我们关心的常常是这个档案的『内容』 是什么时候被更动
的说~瞭乎?
touch 这个指令最常被使用的情况是:
• 建立一个空的档案;
• 将某个档案日期修订为目前 (mtime 与 atime)
档案预设权限:umask
就是指定 『目前使用者在建立档案或目录时候的属性默认值』
[root@localhost tmp]# umask -S
u=rwx,g=rx,o=rx
[root@localhost tmp]# umask
0022
档案隐藏属性:
• chattr (设定档案隐藏属性)
[root@linux ~]# chattr [+-=][ASacdistu] 档案或目录名称
参数:
+ :增加某一个特殊参数,其它原本存在参数则不动。
- :移除某一个特殊参数,其它原本存在参数则不动。
= :设定一定,且仅有后面接的参数
A :当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access)
将不可被修改,可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生!
S :这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!
可以有效的避免数据流失!
a :当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root
才能设定这个属性。
c :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)
d :当 dump(备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)不具有 dump 功能
i :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入
或新增资料!』对于系统安全性有相当大的帮助!
j :当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在
journal 中!但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了
日志了,所以这个属性无效!
s :当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。
u :与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,
可以使用来 undeletion.
• lsattr (显示档案隐藏属性)
[root@linux ~]# lsattr [-aR] 档案或目录
参数:
-a :将隐藏文件的属性也秀出来;
-R :连同子目录的数据也一并列出来!
范例:
[root@linux tmp]# chattr +aij attrtest
[root@linux tmp]# lsattr
----ia---j--- ./attrtest
档案类型:file
[root@linux ~]# file ~/.bashrc
/root/.bashrc: ASCII text <== 告诉我们是 ASCII 的纯文字文件啊!
[root@linux ~]# file /usr/bin/passwd
档案的搜寻:
在 Linux 底下也有相当优异的搜寻系统呦!通常 find 不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先
使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!为什么呢?因为 whereis
与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!
• which (寻找『执行档』)
[root@linux ~]# which [-a] command
参数:
-a :将所有可以找到的指令均列出,而不止第一个被找到的指令名称
[root@localhost tmp]# which passwd
/usr/bin/passwd
[root@localhost tmp]# which traceroute -a
/bin/traceroute
[root@localhost tmp]#
• whereis (寻找特定档案)
[root@linux ~]# whereis [-bmsu] 档案或目录名
参数:
-b :只找 binary 的档案
-m :只找在说明文件 manual 路径下的档案
-s :只找 source 来源档案
-u :没有说明档的档案!
[root@localhost tmp]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
• locate
[root@linux ~]# locate filename
[root@linux ~]# locate passwd
/lib/security/pam_passwdqc.so
/lib/security/pam_unix_passwd.so
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/kde3/kded_kpasswdserver.l
• find
参数:
1. 与时间有关的参数:
-atime n :n 为数字,意义为在 n 天之前的『一天之内』被 access 过的档案;
-ctime n :n 为数字,意义为在 n 天之前的『一天之内』被 change 过状态的档案;
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被 modification 过的档案;
-newer file :file 为一个存在的档案,意思是说,只要档案比 file 还要新,
就会被列出来~
2. 与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的账号 ID,亦即 UID ,这个 UID 是记录在
/etc/passwd 里面与账号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者账号名称喔!例如 dmtsai
-group name:name 为群组名称喔,例如 users ;
-nouser :寻找档案的拥有者不存在 /etc/passwd 的人!
-nogroup :寻找档案的拥有群组不存在于 /etc/group 的档案!
当您自行安装软件时,很可能该软件的属性当中并没有档案拥有者,
这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
3. 与档案权限及名称有关的参数:
-name filename:搜寻文件名称为 filename 的档案;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的档案。这个 SIZE 的规格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
还要大的档案,就是『 -size +50k 』
-type TYPE :搜寻档案的类型为 TYPE 的,类型主要有:一般正规档案 (f),
装置档案 (b, c), 目录 (d), 连结档 (l), socket (s),
及 FIFO (p) 等属性。
-perm mode :搜寻档案属性『刚好等于』 mode 的档案,这个 mode 为类似 chmod
的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻档案属性『必须要全部囊括 mode 的属性』的档案,举例来说,
我们要搜寻 -rwxr--r-- ,亦即 0744 的档案,使用 -perm -0744,
当一个档案的属性为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm +mode :搜寻档案属性『包含任一 mode 的属性』的档案,举例来说,我们搜寻
-rwxr-xr-x ,亦即 -perm +755 时,但一个档案属性为 -rw-------
也会被列出来,因为他有 -rw.... 的属性存在!
4. 额外可进行的动作:
-exec command :command 为其它指令,-exec 后面可再接额外的指令来处理搜寻到
的结果。
-print :将结果打印到屏幕上,这个动作是预设动作!
范例:
范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的档案列出
[root@linux ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的档案都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 ,意思是说今天之前的 3*24 ~ 4*24 小时之间
# 有变动过的档案都被列出的意思!同时 -atime 与 -ctime 的用法相同。
范例二:寻找 /etc 底下的档案,如果档案日期比 /etc/passwd 新就列出
[root@linux ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个档案之间的新旧关系是很有用的!
范例三:搜寻 /home 底下属于 dmtsai 的档案
[root@linux ~]# find /home -user dmtsai
# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有档案时,
# 就可以利用这个指令将属于某个使用者的所有档案都找出来喔!
范例四:搜寻系统中不属于任何人的档案
[root@linux ~]# find / -nouser
# 透过这个指令,可以轻易的就找出那些不太正常的档案。
# 如果有找到不属于系统任何人的档案时,不要太紧张,
# 那有时候是正常的~尤其是您曾经以原始码自行编译软件时。
范例五:找出档名为 passwd 这个档案
[root@linux ~]# find / -name passwd
# 利用这个 -name 可以搜寻档名啊!
范例六:搜寻档案属性为 f (一般档案) 的档案
[root@linux ~]# find /home -type f
# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的档案,
# 例如 socket 与 FIFO 档案,可以用 find /var -type p 或 -type s 来找!
范例七:搜寻档案当中含有 SGID/SUID/SBIT 的属性
[root@linux ~]# find / -perm +7000
# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,
# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,
# 因此,就是 +7000 ~瞭乎?
范例八:将上个范例找到的档案使用 ls -l 列出来~
[root@linux ~]# find / -perm +7000 -exec ls -l {} \;
# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,
# 而那个 {} 代表的是『由 find 找到的内容』的意思~所以, -exec ls -l {}
# 就是将前面找到的那些档案以 ls -l 列出长的数据!至于 \; 则是表示
# -exec 的指令到此为止的意思~意思是说,整个指令其实只有在
# -exec (里面就是指令下达) \;
# 也就是说,-exec 最后一定要以 \; 结束才行!这样了解了吗?!
范例九:找出系统中,大于 1MB 的档案
[root@linux ~]# find / -size +1000k
# 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,
# 不过,俺却试不出来这个功能~所以,目前应该是仅支持到 c 与 k 吧!