Linux 档案与目录管理

一、

cd:变换目录
pwd:显示目前的目录
mkdir:建立一个新的目录
rmdir:删除一个空的目录


二、复制、删除与移动: cp, rm, mv

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a  :相当于 -pdr 的意思,至于 pdr 请参考下列说明;(常用)
-d  :若来源档为连结档的属性(link file),则复制连结档属性而非档案本身;
-f  :为强制(force)的意思,若目标档案已经存在且无法开启,则移除后再尝试一次;
-i  :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

-l  :进行硬式连结(hard link)的连结档建立,而非复制档案本身;
-p  :连同档案的属性一起复制过去,而非使用预设属性(备份常用);
-r  :递回持续复制,用于目录的复制行为;(常用)
-s  :复制成为符号连结档 (symbolic link),亦即‘捷径’档案;
-u  :若 destination 比 source 旧才更新 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是‘目录’才行!
[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc
# 这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。

[root@www ~]# rm [-fir] 档案或目录
选项与参数:
-f  :就是 force 的意思,忽略不存在的档案,不会出现警告讯息;
-i  :互动模式,在删除前会询问使用者是否动作
-r  :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f  :force 强制的意思,如果目标档案已经存在,不会询问而直接覆盖;
-i  :若目标档案 (destination) 已经存在时,就会询问是否覆盖!
-u  :若目标档案已经存在,且 source 比较新,才会更新 (update)

三、查看档案内容

[root@www ~]# cat [-AbEnTv]

选项与参数:
-A  :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b  :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E  :将结尾的断行字元 $ 显示出来;
-n  :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T  :将 [tab] 按键以 ^I 显示出来;
-v  :列出一些看不出来的特殊字符

[root@www ~]# head [-n number] 档案 
选项与参数:
-n  :后面接数字,代表显示几行的意思
[root@www ~]# tail [-n number] 档案 

选项与参数:
-n  :后面接数字,代表显示几行的意思
-f  :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# 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@www ~]# touch [-acdmt] 档案

选项与参数:
-a  :仅修订 access time;
-c  :仅修改档案的时间,若该档案不存在则不建立新档案;
-d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m  :仅修改 mtime ;
-t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]

范例一:新建一个空的档案并观察时间
[root@www ~]# cd /tmp
[root@www tmp]# touch testtouch
[root@www tmp]# ls -l testtouch
-rw-r--r-- 1 root root 0 Sep 25 21:09 testtouch

# 注意到,这个档案的大小是 0 呢!在预设的状态下,如果 touch 后面有接档案,
# 则该档案的三个时间 (atime/ctime/mtime) 都会更新为目前的时间。若该档案不存在,
# 则会主动的建立一个新的空的档案喔!例如上面这个例子!

四、档案的隐藏属性

[root@www ~]# chattr [+-=][ASacdistu] 档案或目录名称
选项与参数:
+   :增加某一个特殊参数,其他原本存在参数则不动。
-   :移除某一个特殊参数,其他原本存在参数则不动。
=   :设定一定,且仅有后面接的参数

A  :当设定了 A 这个属性时,若你有存取此档案(或目录)时,他的存取时间 atime
     将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的电脑有帮助
S  :一般档案是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
     属性时,当你进行任何档案的修改,该更动会‘同步’写入磁碟中。
a  :当设定 a 之后,这个档案将只能增加资料,而不能删除也不能修改资料,只有root 
     才能设定这个属性。 
c  :这个属性设定之后,将会自动的将此档案‘压缩’,在读取的时候将会自动解压缩,
     但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)
d  :当 dump 程序被执行的时候,设定 d 属性将可使该档案(或目录)不会被 dump 备份
i  :这个 i 可就很厉害了!他可以让一个档案‘不能被删除、改名、设定连结也无法
     写入或新增资料!’对于系统安全性有相当大的助益!只有 root 能设定此属性
s  :当档案设定了 s 属性时,如果这个档案被删除,他将会被完全的移除出这个硬碟
     空间,所以如果误删了,完全无法救回来了喔!
u  :与 s 相反的,当使用 u 来设定档案时,如果该档案被删除了,则资料内容其实还
     存在磁碟中,可以使用来救援该档案喔!
注意:属性设定常见的是 a 与 i 的设定值,而且很多设定值必须要身为 root 才能设定

范例:请尝试到/tmp底下建立档案,并加入 i 的参数,尝试删除看看。

[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest     <==建立一个空档案
[root@www tmp]# chattr +i attrtest <==给予 i 的属性
[root@www tmp]# rm attrtest        <==尝试删除看看
[root@www ~]# lsattr [-adR] 档案或目录

选项与参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的资料也一并列出来! 

[root@www tmp]# chattr +aij attrtest
五、find

[root@www ~]# find [PATH] [option] [action]
选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
   -mtime  n :n 为数字,意义为在 n 天之前的‘一天之内’被更动过内容的档案;
   -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的档案档名;
   -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的档案档名。
   -newer file :file 为一个存在的档案,列出比 file 还要新的档案档名

范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的档案列出
[root@www ~]# find / -mtime 0

# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的档案都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 有变动过的档案都被列出的意思!

范例二:寻找 /etc 底下的档案,如果档案日期比 /etc/passwd 新就列出
[root@www ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个档案之间的新旧关系是很有用的!
选项与参数:
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 搜寻。

范例三:搜寻 /home 底下属于 vbird 的档案
[root@www ~]# find /home -user vbird
# 这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有档案时,
# 就可以利用这个指令将属于某个使用者的所有档案都找出来喔!

范例四:搜寻系统中不属于任何人的档案
[root@www ~]# find / -nouser
# 透过这个指令,可以轻易的就找出那些不太正常的档案。
# 如果有找到不属于系统任何人的档案时,不要太紧张,
# 那有时候是正常的~尤其是你曾经以原始码自行编译软体时。
选项与参数:
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.... 的属性存在!

范例五:找出档名为 passwd 这个档案
[root@www ~]# find / -name passwd
# 利用这个 -name 可以搜寻档名啊!

范例六:找出 /var 目录下,档案类型为 Socket 的档名有哪些?
[root@www ~]# find /var -type s
# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的档案,
# 例如 socket 与 FIFO 档案,可以用 find /var -type p 或 -type s 来找!

范例七:搜寻档案当中含有 SGID 或 SUID 或 SBIT 的属性
[root@www ~]# find / -perm +7000 
# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,
# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,
# 因此,就是 +7000 ~了乎?
选项与参数:
4. 额外可进行的动作:
   -exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到
                   的结果。
   -print        :将结果列印到荧幕上,这个动作是预设动作!

范例八:将上个范例找到的档案使用 ls -l 列出来~
[root@www ~]# find / -perm +7000 -exec ls -l {} \;
# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支援命令别名,
# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!

范例九:找出系统中,大于 1MB 的档案
[root@www ~]# find / -size +1000k

# 虽然在 man page 提到可以使用 M 与 G 分别代表 MB 与 GB,
# 不过,俺却试不出来这个功能~所以,目前应该是仅支援到 c 与 k 吧!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值