Linux学习三 文件与目录管理

1 目录与路径

1.1 相对路径与绝对路径

  绝对路径:路径的写法一定由根目录 / 写起。

  相对路径:路径的写法不是由 / 写起。

1.2 目录的相关操作

  . :代表此层目录

  .. :代表上一层目录

  - :代表前一个工作目录

  ~ :代表目前用户身份所在的家目录

  ~account :代表account用户的家目录

  需注意的是:在所有目录下都存在 ./..,分别代表此层和上层目录。根目录下的 .. 目录与 . 目录是同一个。

  常用处理目录的命令:

  cd:切换目录

  pwd:显示当前目录

  mkdir:建立一个新的目录

    mkdir  dirname          建立名为dirname的目录

    mkdir  -p  dirname1/dirname2/dirname3    依次建立多层目录(必须加 -p 参数)

    mkdir  -m  711  dirname      建立权限为 rwx--x--x 的目录(-m 强制赋予目录相关权限)

  rmdir:删除一个空的目录

1.3 执行文件路径的变量:$PATH

  echo  $PATH             查看当前PATH

  PATH="${PATH}:/root"         将 /root 目录加入到 PATH 变量中

2 文件与目录管理

2.1 文件与目录的检视:ls

  ls  [-aAdfFhilnrRSt]  filename/dirname

  ls  [--color={never,auo,always}]  filename/dirname

  ls  [--full-time]  filename/dirname

  选项与参数:

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

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

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

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

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

      *:代表可执行文件    /:代表目录    =:代表 socket 文件    I:代表 FIFO文件

    -h:将文件容量以人类较易读的方式列出来

    -i :列出 incode 号码

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

    -n:列出 UID 与 GID 而非使用者与群组的名称

    -r :将排序结果反向输出

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

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

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

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

    --color=always:显示颜色

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

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

    --time={atime,ctime}:输出 access 时间或改变权限属性时间(ctime),而非内容变更时间(modification time)

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

2.2.1 cp(复制文件或目录)

  cp  [-adfilprsu]  来源文件(source)  目标文件(destination)

  cp  [options]  source1  source2  source3  ...  directory

  选项与参数:

     -a:相当于 -dr  --preserve=all  的意思(常用)

     -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 等也复制了

2.2.2 rm(移除文件或目录)

  rm [-fir] filename/dirname  移除文件或目录

  rmdir dirname     移除空目录

  选项与参数:

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

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

    -r  :递归删除!最常用在目录的删除

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

  mv [-fiu] source destination

  mv [options] source1 source2 source3 ... directory   多个来源文件或目录移动,目标文件一定是目录

  选项与参数:

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

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

    -u :若目标文件已经存在,且 source 比较新,才会更新

3 文件内容查阅

  cat    由第一行开始显示文件内容

  tac    从最后一行开始显示,可以看出 tac 是 cat 的倒写

  nl      显示的时候,顺道输出行号

  more   一页一页的显示文件内容

  less     与 more 类似,但是比 more 更好的是可以往前翻页

  head   只看头几行

  tail    只看尾几行

  od     以二进制的方式读取文件内容

3.1 直接检视文件内容

  cat [-AbEnTv]      concatenate(连续)的简写

  选项与参数:

    -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白

    -b :列出行号,仅针对非空白行做行号显示,空白行不标行号

    -E :将结尾的断行字符 $ 显示出来

    -n :打印出行号,连同空白行也会有行号,与 -b 选项不同

    -T :将 [tab] 按键以 ^I 显示出来

    -v  :列出一些看不出来的特殊字符

  tac           反向显示

  nl [-bnw] filename      添加行号打印

  选项与参数:

    -b:指定行号指定的方式,主要有两种:

      -b a:表示不论是否为空行,也同样列出行号(类似 cat -n)

      -b t :如果有空行,空的那一行不要列出行号(默认值)

    -n:列出行号表示的方法,主要有三种:

      -n ln:行号在屏幕的最左方显示

      -n rn:行号在自己字段的最右方显示,且不加 0

      -n rz :行号在自己字段的最右方显示,且加 0

    -w:行号字段的占用的字符数

  示例:

    

 3.2 可翻页检视

  more        一页一页翻动

  more 运作过程中,可使用的指令有:

    空格键    :向下翻一页

    回车键    :向下翻一行

    /字符串      :向下搜寻【字符串】功能

    :f        :立刻显示出文件名以及目前显示的行数

    q        :立刻离开 more,不再显示该文件内容

    b 或 [ctrl]-b   :往回翻页,不过这动作只对文件有用,对管线无用

  less         一页一页翻动

  less 运作过程中,可使用的指令有:

    空格键    :向下翻一页

    [Page Down]  :向下翻动一页

    [Page Up]    :向上翻动一页

    /字符串      :向下搜寻【字符串】功能

    ?字符串     :向上搜寻【字符串】功能

    n        :重复前一个搜寻(与 / 或 ? 有关)

    N        :反向的重复前一个搜寻(与 / 或 ? 有关)

    g        :前进到这个资料的第一行去

    G       :前进到这个数据的最后一行去

    q        :离开 less 程序

3.3 资料撷取

  head [-n number] filename    取出前面几行

  选项与参数:

    -n      :后面接数字,代表显示几行的意思(默认显示前十行)

    备注:-n 选项后面的参数如果接的是负数,代表前面所有行数,不包括后面的 number 行

  tail [-n number] filename     取出后面几行

  tail [-f] filename

  选项与参数:

    -n       :后面接数字,代表显示几行的意思(默认显示前十行)

    -f        :表示持续侦测后面所接的档名,要等到按下 [ctrl]-c 才会结束 taild的侦测

    备注:-n 选项后面的参数如果接的是 +number,代表后面所有行数,不包括前面 number 行

  范例一:显示 /etc/man_db.conf 的第11到20行

     head -n 20 /etc/man_db.conf | tail -n 10

     |:前面的指令所输出的讯息,会透过管线【|】交由后续的指令继续使用

  范例二:显示 /etc/man_db.conf 的第11到20行,且打印行号

     cat -n /etc/man_db.conf | head -n 20 | tail -n 10

  od [-t TYPE] filename      非纯文本档

  选项与参数:

    -t        :后面可以接各种类型(TYPE)的输出,例如:

      a      :利用默认字符来输出

      c      :利用 ASCIIz字符来输出

      d[size]    :利用十进制(decimal)来输出数据,每个整数占用 size bytes

      f[size]    :利用浮点数(floating)来输出数据,每个数占用 size bytes

      o[size]    :利用八进制(octal)来输出数据,每个整数占用 size bytes

      x[size]    :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes

  范例一:请将 /etc/issue 这个文件的内容以8进位列出储存值与 ASCII 的对照表

     od -t oCc /etc/issue

  范例二:找到 password 这个字符串的 ASCII 对照

     echo password | od -t oCc

     echo 可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给 od 去继续处理

  touch [-acdmt] filename      修改文件时间或建置新档

  选项与参数:

    -a    :仅修订 access time

    -c    :仅修改文件的时间,若该文件不存在则不建立新文件

    -d    :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"

    -m    :仅修改 mtime

    -t    :后面可以接欲修订的时间而不用目前的时间,格式为 [YYYYMMDDhhmm]

  范例一:将 ~/.bashrc 完全复制为 /tmp/bashrc ,检查其日期

    cp -a ~/.bashrc /tmp/bashrc

    date;ll /tmp/bashrc;ll --time=atime /tmp/bashrc;ll --time=ctime /tmp/bashrc

    Linux文件主要变动时间:

      modification time(mtime):当该文件的内容数据变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限。默认情况下,ls 显示出来的是该文件的 mtime。

      status time(ctime):当文件的状态(status)改变时,就会更新这个时间,比如:权限与属性

      access time(atime):当文件的内容被取用时,就会更新这个读取时间(access),比如:使用 cat 读取 /etc/man_db.conf,就会更新文件的 atime。

4 文件与目录的默认权限与隐藏权限

4.1 文件预设权限:umask

  umask 就是指定目前用户在建立文件或目录时的权限默认值。有以下两种方式查看:

  [root@localhost ~]# umask
  0022            umask 分数,与一般权限有关的是后面三个数字,第一组数字是特殊权限用的
  [root@localhost ~]# umask -S
  u=rwx,g=rx,o=rx
  注:umask 分数指的是该默认值需要减掉的权限!

  建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--  注:使用者建立文件预设是没有可执行(x)权限的

  建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x   

  umask 002    修改默认权限为 :u=rwx,g=rwx,o=rx
4.2 文件隐藏属性

  chattr [+-=][ASacdisu] filename/dirname      配置文件案隐藏属性

  选项与参数:

    +:增加某一个特殊参数,其他原来存在参数则不动

    -:移除某一个特殊参数,其他原来存在参数则不动

    =:设定特定的参数

    A:当设定了 A 这个属性时,若你有存取此文件(或目录)时,他的访问时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)

    S:一般文件是异步写入磁盘的,如果加上 S 这个属性时,当你进行任何文件的修改,该更动会同步写入磁盘中。

    a:当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设定这属性。

    c:这个属性设定之火,将会自动的将此文件压缩,在读取的时候将会自动解压缩,当时在储存的时候,将会先进行压缩后再储存。

    d:当 dump 程序被执行的时候,设定 d 属性将可使该文件(或目录)不会被 dump 备份。

    i :可以让一个文件不能被删除、改名、设定连结也无法写入或新增数据!对于系统安全性有相当大的帮助,只有 root 能设定此属性。

    s:当文件设定了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以误删后,完全无法补救!

    u:与 s 相反,当使用 u 配置文件案时,如果文件被删除,则数据内容其实还存在磁盘中,可以使用来救援该文件。

    注:1、属性设定常见的是 a 与 i 的设定值,很多设定值必须要身为 root 才能设定

      2、xfs 文件系统仅支援 AadiS

  lsattr [-adR] filename/dirname        显示文件隐藏属性

  选项与参数:

    -a:将隐藏文件的属性显示出来

    -d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名

    -R:连同子目录的数据也一并列出来

4.3 文件特殊权限

  Set UID 简称 SUID

    SUID 权限仅对二进制程序(binary program)有效;

    执行者对于该程序需要具有 x 的可执行权限;

    本权限仅在执行该程序的过程中有效(run-time);

    执行者将具有该程序拥有者(owner)的权限。

  Set GID 简称 SGID

    SGID 对于二进制程序有用;

    程序执行者对于该程序来说,需具备 x 的权限;

    执行者在执行的过程中将会获得该程序群组的支持!

  Sticky Bit 简称 SBIT

    SBIT 只针对目录有效;

    当用户对于此目录具有 w,x 权限,亦即具有写入的权限;

    当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

  SUID/SGID/SBIT 权限设定:

    4 为 SUID

    2 为 SGID

    1 为 SBIT

4.4 观察文件类型

  file filename

4.5 指令与文件的搜寻

4.5.1 脚本文件名的搜寻

  which [-a] command        寻找执行档

  选项与参数:

    -a:将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

  示例一:搜寻 ifconfig 指令的完整文件名

    [root@localhost /]# which ifconfig
    /sbin/ifconfig
4.5.2 文件档名的搜寻

  whereis [-bmsu] filename/dirname  由一些特定的目录中寻找文件名

  选项与参数:

    -l :可以列出 whereis 会去查询的几个主要目录而已

    -b:只找 binary 格式的文件

    -m:只找在说明文件 manual 路径下的文件

    -s :只找 source 来源文件

    -u :搜寻不在上述三个项目当中的其他特殊文件

  locate [-ir] keyword

  选项与参数:

    -i :忽略大小写的差异

    -c:不输出档名,仅计算找到的文件数量

    -l :仅输出几行的意思,例如输出五行则是 -l 5

    -S:输出 locate 所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等

    -r :后面可接正规表示法的显示方式

  update:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;

  locate  :依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。

  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 还要新的文件档名

    范例一:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出

      find /etc newer /etc/passwd

    2、与使用者或组名有关的参数:

      -uid n   :n 为数字,这个数字是用户的账号 ID,亦即 UID,这个 UID 是记录在 /etc/passwd 里面与账号名称对应的数字。

      -gid n   :n 为数字,这个数字是组名的 ID,亦即 GID,这个 GID 记录在 /etc/group。

      -user name  :name 为使用者账号名称,例如:root。

      -group name:name 为组名,例如:users。

      -nouser   :寻找文件的拥有者不存在 /etc/passwd 的人

      -nogroup    :寻找文件的拥有群组不存在于 /etc/group 的文件

    范例二:搜寻 /home 底下属于 zhouweijie 的文件

      find /home -user zhouweijie

    范例三:搜寻系统中不属于任何人的文件

      find / -nouser

    3、与文件权限及名称有关的参数:

      -name filename:搜寻文件名为 filename 的文件

      -size [+-] SIZE :搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:

              c:代表 byte,k:代表 1024bytes。

      -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 这个关键词的文件

      find / -name "*passwd*"

    范例五:找出 /run 目录下,文件类型为 Socket 的档名

      find /run -type s

    范例六:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性

      find / -perm /7000

    4、额外可进行的动作

      -exec command:command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。

      -print       :将结果打印到屏幕上,这个动作是预设动作!

    范例七:找出 /usr/bin,/usr/sbin 这两个目录下,具有 SUID 或 SGID 的文件,并将找到的文件使用 ls -l 列出来

      find /usr/bin /usr/sbin -perm /6000 -exec ls -l {} \;

      注:{} 代表的是【由 find 找到的内容】,find 的结果会被放置到 {} 位置中;

        -exec 一直到 \; 是关键词,代表 find 额外动作的开始(-exec)到结束(\;),在这中间的就是 find 指令内的额外动作。

        因为【;】在 bash 环境下是有特殊意义的,因此利用反斜杠来跳脱。

      

  

猜你喜欢

转载自www.cnblogs.com/zhouweijie/p/11538505.html