Linux文件与目录管理


文件与目录的显示: ls

# ls [-aAdfFhilnrRSt]目录名称

# ls[--color={never,auto,always}] 目录名称

# ls [--full-time] 目录名称

选项与参数:

-a :全部的文件,连同隐藏档(开头为 . 的文件)一起列出来(常用)

-A :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录

-d :仅列出目录本身,而不是列出目录内的文件数据(常用)

-f :直接列出结果,而不进行排序 (ls 默认会以档名排序)

-F :根据文件、目录等资讯,给予附加数据结构,例如:

*:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;

-h :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;

-i :列出 inode 号码,inode 的意义下一章将会介绍;

-l :长数据串列出,包含文件的属性与权限等等数据;(常用)

-n :列出 UID 与 GID 而非使用者与群组的名称(UID与GID会在帐号管理提到)

-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;

-R :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;

-S :以文件容量大小排序,而不是用档名排序;

-t :依时间排序,而不是用档名。

--color=never :不要依据文件特性给予颜色显示;

--color=always :显示颜色

--color=auto :让系统自行依据配置来判断是否给予颜色

--full-time :以完整时间模式 (包含年、月、日、时、分) 输出

--time={atime,ctime} :输出 access 时间或改变权限属性时间(ctime)

而非内容变更时间(modification time)

 

范例一:将家目录下的所有文件列出来(含属性与隐藏档)

# ls -al ~

范例二:承上题,不显示颜色,但在档名末显示出该档名代表的类型(type)

# ls -alF--color=never ~

范例三:完整的呈现文件的修改时间 *(modification time)

# ls -al--full-time ~

---------------------------------------------------------------------------------------------------------------------------------

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

cp (复制文件或目录)

# cp [-adfilprsu] 来源档(source)目标档(destination)

# cp [options]source1 source2 source3 .... directory

选项与参数:

-a :相当于 -pdr的意思,至于 pdr 请参考下列说明;(常用)

-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非文件本身;

-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

-l :进行硬式连结(hardlink)的连结文件创建,而非复制文件本身;

-p :连同文件的属性一起复制过去,而非使用默认属性(备份常用);

-r :递回持续复制,用于目录的复制行为;(常用)

-s :复制成为符号连结档(symbolic link),亦即『捷径』文件;

-u :若destination 比 source 旧才升级 destination 。

最后需要注意的,如果来源文件有两个以上,则最后一个目的档一定要是『目录』才行。

复制(cp)这个命令是非常重要的,不同身份者运行这个命令会有不同的结果产生,尤其是那个-a, -p的选项,对于不同身份来说,差异则非常的大。

 

范例一:用root身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc

# cp ~/.bashrc/tmp/bashrc

# cp -i ~/.bashrc/tmp/bashrc //由于 /tmp 底下已经存在 bashrc了,加上 -i 选项后,

则在覆盖前会询问使用者是否确定。可以按下 n 或者 y 来二次确认。

 

范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:

# cd /tmp

# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 .不要忘

# ls -l /var/log/wtmpwtmp

-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54/var/log/wtmp

-rw-r--r-- 1 root root 96384 Sep 24 14:06wtmp

 

范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下

# cp /etc/ /tmp

cp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上 -r 的选项

# cp -r /etc/ /tmp

 

范例四:将范例一复制的 bashrc 创建一个连结档 (symbolic link)

# ls -l bashrc

-rw-r--r-- 1 root root 176 Sep 24 14:02bashrc <==先观察一下文件情况

# cp -s bashrcbashrc_slink

# cp -l bashrcbashrc_hlink

# ls -l bashrc*

-rw-r--r-- 2 root root 176 Sep 24 14:02bashrc <==与原始文件不太一样了!

-rw-r--r-- 2 root root 176 Sep 24 14:02bashrc_hlink

lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc

 

范例五:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来

# cp -u ~/.bashrc/tmp/bashrc

这个 -u 的特性,是在目标文件与来源文件有差异时,才会复制的。所以,比较常被用于『备份』的工作当中。

 

范例六:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_1 与bashrc_slink_2

# cp bashrc_slinkbashrc_slink_1

# cp -d bashrc_slinkbashrc_slink_2

# ls -l bashrc bashrc_slink*

-rw-r--r-- 2 root root 176 Sep 24 14:02bashrc

lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc

-rw-r--r-- 1 root root 176 Sep 24 14:32bashrc_slink_1 <==与原始文件相同

lrwxrwxrwx 1 root root 6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是连结档!

原本复制的是连结档,但是却将连结档的实际文件复制过来了,也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非连结档的属性,若要复制连结档的属性,就得要使用 -d 的选项了,如 bashrc_slink_2 所示。

 

范例七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下

# cp ~/.bashrc~/.bash_history /tmp

可以将多个数据一次复制到同一个目录去,最后面一定是目录。

---------------------------------------------------------------------------------------------------------------------------------

rm (移除文件或目录)

# rm [-fir] 文件或目录

选项与参数:

-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;

-i :互动模式,在删除前会询问使用者是否动作

-r :递回删除,最常用在目录的删除了。这是非常危险的选项!

 

范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉!

# cd /tmp

# rm -i bashrc

rm: remove regular file `bashrc'? y

如果加上 -i 的选项就会主动询问喔,避免你删除到错误的文件名。

 

范例二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的文件名通通删除:

# rm -i bashrc*

注意那个星号,代表的是 0 到无穷多个任意字节,很好用的东西!

 

范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉!

# rmdir /tmp/etc

rmdir: etc: Directory not empty <== 删不掉啊!因为这不是空的目录!

# rm -r /tmp/etc

rm: descend into directory `/tmp/etc'? y

....(中间省略)....

因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!

如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。

这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:

# \rm -r /tmp/etc

在命令前加上反斜线,可以忽略掉 alias 的指定选项。

 

范例四:删除一个带有 - 开头的文件

# touch ./-aaa- <==touch这个命令可以创建空文件。

# ls -l

-rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==文件大小为0,所以是空文件

# rm -aaa-

Try `rm --help' for more information. <== 因为 "-" 是选项嘛!所以系统误判了!

# rm ./-aaa-

---------------------------------------------------------------------------------------------------------------------------------

mv (移动文件与目录,或更名)

# mv [-fiu] sourcedestination

# mv [options]source1 source2 source3 .... directory

选项与参数:

-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

-i :若目标文件(destination) 已经存在时,就会询问是否覆盖!

-u :若目标文件已经存在,且source 比较新,才会升级 (update)

 

范例一:复制一文件,创建一目录,将文件移动到目录中

# cd /tmp

# cp ~/.bashrc bashrc

# mkdir mvtest

# mv bashrc mvtest //将某个文件移动到某个目录去,就是这样做!

 

范例二:将刚刚的目录名称更名为 mvtest2

# mv mvtest mvtest2 <== 这样就更名了

 

范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中

# cp ~/.bashrcbashrc1

# cp ~/.bashrcbashrc2

# mv bashrc1 bashrc2mvtest2

注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录』

意思是说,将所有的数据移动到该目录的意思。

取得路径的文件名称与目录名称

# basename /etc/sysconfig/network

network <==就取得最后的档名

# dirname/etc/sysconfig/network

/etc/sysconfig <== 取得的变成目录名

相关内容