鸟哥的Linux私房菜读书笔记--文件与目录管理

1、文件与目录的检视:命令:$ 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)


2、文件目录的复制:命令:$ cp

命令:$  cp [-adfilprsu] 来源文件(source) 目标文件(destination)
命令:$  cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即『快捷方式』文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!

注意:由于 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:
· 是否需要完整的保留来源文件的信息?
· 来源文件是否为连结档 (symbolic link file)?
· 来源档是否为特殊的文件,例如 FIFO, socket 等?
· 来源文件是否为目录?

3、移除文件或目录:命令:$ 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: failed to remove '/tmp/etc': Directory not empty <== 删不掉啊!因为这不是空的目录!
命令:$   rm -r /tmp/etc
rm: descend into directory `/tmp/etc'? y
rm: remove regular file `/tmp/etc/fstab'? y
rm: remove regular empty file `/tmp/etc/crypttab'? ^C <== 按下 [crtl]+c 中断
.....(中间省略).....
# 因为身份是 root ,预设已经加入了 -i 的选项,所以你要一直按 y 才会删除!
# 如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。
# 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:
命令:$   \rm -r /tmp/etc
# 在指令前加上反斜杠,可以忽略掉 alias 的指定选项喔!至于 alias 我们在 bash 再谈!
# 拜托!这个范例很可怕!你不要删错了!删除 /etc 系统是会挂掉的!
范例四:删除一个带有 - 开头的文件
命令:$   touch ./-aaa- <==touch 这个指令可以建立空文件!
命令:$   ls -l 
-rw-r--r--. 1 root root 0 Jun 11 19:22 -aaa- <==文件大小为 0,所以是空文件
命令:$   rm -aaa rm: invalid option -- 'a' <== 因为 "-" 是选项嘛!所以系统误判了!
Try 'rm ./-aaa-' to remove the file `-aaa-'. <== 新的 bash 有给建议的
Try 'rm --help' for more information.
命令:$  rm ./-aaa-     命令:$  rm -- -aaa-   ##删除文件-aaa-

4、移动文件或目录:命令: $ mv 

命令:$  mv [-fiu] source destination
命令:$  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 <== 这样就更名了!简单
命令:$  mv [-fiu] source destination
命令:$  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 <== 这样就更名了!简单其实在 Linux 底下还有个有趣的指令,名称为 rename ,
# 该指令专职进行多个档名的同时更名,并非针对单一档名变更,与 mv 不同。请 man rename。
范例三:再建立两个文件,再全部移动到 /tmp/mvtest2 当中
命令:$   cp ~/.bashrc bashrc1
命令:$   cp ~/.bashrc bashrc2
命令:$   mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源文件或目录,则最后一个目标文件一定是『目录!』
# 意思是说,将所有的数据移动到该目录的意思!

5、取得路径的文件名和目录名

命令:$   basename /etc/sysconfig/network
network <== 很简单!就取得最后的档名~
命令:$   dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!

猜你喜欢

转载自blog.csdn.net/qq_41825534/article/details/82761650
今日推荐