Linux 文件与目录管理

来源:互联网 发布:西北工业大学软件学院 编辑:程序博客网 时间:2024/04/29 06:48

Linux 文件与目录管理:

一、绝对路径与相对路径

1、绝对路径:写法由根目录“ / ”写起,例如在目录/home/shu/temp下有一个文件file.txt那么file.txt文件的绝对路径就是/home/lshu/temp。绝对路径写法复杂,但肯定不会出错。

对于文件的正确性来说,绝对路径的正确度更高,如果在写程序(shell scripts)进行管理系统时,则必须使用绝对路径。

2、相对路径:如果当前路径是在/home/shu下,那么file.txt文件的相对路径就是./temp,当前目录“./”;当前目录的上一级目录(如果有上一级目录的话)“../”;

相对路径的用途,适用场景:假设一个所写软件共有三个目录,分別是 etc, bin, lib,然而由于不同的人喜欢安裝在不同的目录之下, 假如甲安裝的目录是 /usr/local/pack/etc, /usr/local/pack/bin 及 /usr/local/pack/lib ,而乙喜欢安裝在 /home/pack/etc, /home/pack/bin, /home/pack/lib 中,这样在共同维护代码时,如果使用绝对路径就会发生错误,这种情况下,使用相对路径则比较简单。

但相对路径会出现在因执行的工作环境不同,导致出错。

二、操作目录的相关命令

1、系统中比较特殊的目录

.         代表此层目录..        代表上一层目录-         代表前一个工作目录~        代表“目前用户身份”所在的home目录~account  代表 account 这个用户的home目录(account是帐户名称)

注:

1)在所有目录下都存在2个目录:“ . ”和“ .. ”,分别代表此层目录和上层目录;

2)在根目录下使用“ ls -al /  ”去查询,可以看到根目录下存在“ . ”和“ .. ”2个目录,这2个目录的属性与权限完全一致,这说明根目录的“ . ”和“ .. ”是同一个目录。


2、常见操作目录的命令:

1)cd:变换目录,使用方法:

[shu@Test ~]$ su -  # 可先切换身份成为 root[root@Test ~]# cd [相对路径或绝对路径]

其中:如果只输入 cd ,代表“ cd ~ ”的意思,即会回到自己的home

使用中可利用Linux预设命令列模式 (bash shell)  的文件名补齐功能, 常常利用 [tab] 键完成目录完整性。

2)pwd:显示当前目录,使用方法:

[root@Test ~]# pwd [-P]-P  :显示真实的路径,而非使用链接 (link)路径。
3)mkdir:建立一个新的目录,使用方法:

[root@Test ~]# mkdir [-mp] 目录名称选项与参数:-m :直接设置文件权限-p  :帮助你直接将所需要的目录(包含上层目录)建立起來![root@Test tmp]# mkdir test1/test2/test3/test4mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory# 提示没有建立test3目录[root@study tmp]# mkdir -p test1/test2/test3/test4#加了 -p 的选项,可以自行建立多层目录,如果该目录已存在,也不会显示错误信息,但如果打错字,则目录名称会显得很乱[root@Test tmp]# mkdir -m 711 test2 #建立权限为rwx--x--x的目录[root@Test tmp]# ls -ld test*drwxr-xr-x. 2 root   root  6 Jun  4 19:03 testdrwxr-xr-x. 3 root   root 18 Jun  4 19:04 test1drwx--x--x. 2 root   root  6 Jun  4 19:05 test2# 如果没有加上 -m 來强制设定权限,系統会使用预设权限。

4)rmdir:刪除一个空的目录

[root@Test ~]# rmdir [-p] 目录名称选项与参数:-p :连同"上层 " " 空的 "目录一起刪除[root@Test tmp]# rmdir test   #可直接刪除掉[root@Test tmp]# rmdir test1  #因为尚有内容,所以无法删除rmdir: failed to remove ‘test1’: Directory not empty[root@Test tmp]# rmdir -p test1/test2/test3/test4[root@Test tmp]# ls -ld test*    #查看存在的目录drwx--x--x. 2 root   root  6 Jun  4 19:05 test2# 利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次性删除# 注意: rmdir 仅能“ 刪除空的目录 ”

rmdir删除目录需要一层一层的进行,而且被刪除的目录必须是空目录。如果要将目录下的所有东西都删除,需要使用 rm -r 目录 ,这个比较危险,也可以使用 -p 的选项,刪除上层目录。


3、关于执行文件路径的变量 $PATH

       当执行一个命令时,如 ls,系统会按照 PATH 的设定去每个 PATH 定义的目录下查找文件名为 ls的可执行文件, 如果在PATH定义的目录中含有多个文件名为 ls 的可执行文件,那么先查询到同名命令先被执行。

       使用echo $PATH 可查看有哪些目录被定义? echo有『显示/打印』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以会显示目前的 PATH :

#用root的身份列出PATH[root@Test ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin#用shu的身份列出PATH[root@Test ~]# exit    # 离开之前的 su -,变回原本的帐号![shu@Test ~]$ echo $PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
       PATH(一定大写)这个变量的内容由一堆目录组成,每个目录使用(:)分隔, 每个目录有顺序之分。无论是root还是shu都有 /bin 或 /usr/bin 这个目录在PATH变量内,所以就能在任何地方执行ls来找到/bin/ls执行文件

1)在PATH当中加入目录的方法如下,例如:在任何目录均可执行/root底下的命令,那么就将/root加入PATH当中即可。

[root@Test ~]# PATH="${PATH}:/root"
2)PATH的特点:
不同身份用户预设的PATH不同,预设能够随意执行的指令也不同;PATH是可以修改的;使用绝对路径或相对路径直接指定某个命令的文件名进行执行,会比查找PATH正确性更高;命令应该要放到正确的目录下,执行才会比较方便;本地目录(.)最好不要放到PATH当中。

三、文件与目录管理

1、查看文件与目录:ls

[root@Test ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..[root@Test ~]# ls [--color={never,auto,always}] 文件名或目录名称..[root@Test ~]# ls [--full-time] 文件名或目录名称..选项与参数:-a  :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出來(常用)-A  :全部的文件,连同隐藏文件,但不包括 . 和 .. 这两个目录-d  :仅显示目录本身(.),而不是列出目录内的文件资料(常用)-f  :直接列出结果,而不进行排序 (ls 预设会以文件名排序)-F  :根据文件、目录等信息,给出附加的信息,例如:      *:代表可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;-h  :将文件的大小(例如 GB, KB 等等)列出來;但只用ls -h是看不见文件或者目录大小的。必须加上ls -lh。-i  :列出 inode 号码;-l  :显示详细信息,包含文件的属性与权限等等信息;(常用)-n  :列出 UID 和 GID 而非用户和群组的名称 ;-r  :将文件的排序反序输出,例如:原本文件由小到大,反向则由大到小;-R  :连同子目录的内容一起列出來,这样该目录下的所有内容都会显示;-S  :以文件的大小排序,而不是用文件名排序;-t  :以文件的更新时间排序,而不是用文件名排序。--color=never  :不根据文件的特性进行颜色区分;--color=always :显示颜色区分--color=auto   :系统自动根据设定判断是否进行颜色区分--full-time    :显示完整的时间 (包含年、月、日、时、分)--time={atime,ctime} :显示 access 时间或修改权限的时间 (ctime)                        而非文件内容的修改时间 (modification time)

因为常常使用-l,所以快捷方式 ll 表示 ls -l 的意思。

2、复制、删除、移动:cp、rm、mv

1)复制文件或目录cp:

[root@Test ~]# cp [-adfilprsu] 来源文件或目录(source) 目标文件或目录(destination)[root@Test ~]# cp [options] source1 source2 source3 .... directory选项与参数:-a  :相当于 -dr --preserve=all 的意思(常用)-d  :若来源为链接文件或目录(link file),则复制链接文件或目录而非文件或目录本身;-f  :强制执行复制动作,例如目标文件或目录已经存在且无法打开,则移除文件后再次尝试复制操作;-i  :如果目标文件或目录(destination)已存在,在覆盖时会提示用户(常用)-l  :复制硬式链接(hard link)文件,而非复制文件或目录本身;-p  :连同文件或目录的属性(权限、用户、时间)一起复制,而非使用预设属性(备份常用);-r  :用于目录的循环复制;(常用)-s  :复制成为快捷键文件 (symbolic link);-u  :目标文件 比 源文件 旧才更新 目标文件,或 目标文件 不存在的情况下才复制。--preserve=all :除了 -p 的参数外,还复制 SELinux, links, xattr的属性。注意:如果来源文件有两个以上,则最后一个必须是目录才能进行复制。
其示例如下:

[root@Test ~]# cp ~/.bashrc /tmp/bashrc  #用root身份,将home目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc[root@Test ~]# cp -i ~/.bashrc /tmp/bashrccp: overwrite `/tmp/bashrc'? n   #n不覆盖,y为覆盖,由于/tmp 底下已存在bashrc 了,加上 -i 后,则在覆盖前进行提示用户来进行第二次确认。[root@Test tmp]# cp /var/log/wtmp . #将/var/log/wtmp复制到当前目录(.)[root@Test tmp]# ls -l /var/log/wtmp wtmp-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp-rw-r--r--. 1 root root 28416 Jun 11 19:01 wtmp# 注意:不加任何选项时,文件的某些属性或权限会进行修改;[root@Test tmp]# cp -a /var/log/wtmp wtmp_2 #将文件的所有属性都进行复制,使用-a选项[root@Test tmp]# ls -l /var/log/wtmp wtmp_2-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 wtmp_2#复制 /etc/ 这个目录下的所有内容到 /tmp 下[root@Test tmp]# cp /etc/ /tmp  cp: omitting directory `/etc'       #因为是目录所以不能直接复制,要加上 -r 选项[root@Test tmp]# cp -r /etc/ /tmp  #-r进行复制目录,但权限还是可能会被改变,如果将权限一起复制,可使用 cp -ar /etc/ /tmp[root@Test tmp]# ls -l bashrc   #查看文件信息-rw-r--r--. 1 root root 176 Jun 11 19:01 bashrc[root@Test tmp]# cp -s bashrc bashrc_slink  #为 bashrc 建立快捷键[root@Test tmp]# cp -l bashrc bashrc_hlink  #为 bashrc 建立实体链接[root@Test tmp]# ls -l bashrc*  #再次查看文件信息-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc       #与未进行链接前的区别是link数由1变2        -rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc_hlink #实体链接与bashrc的属性和权限完全一样,lrwxrwxrwx. 1 root root   6 Jun 11 19:06 bashrc_slink -> bashrc  #快捷键链接到bashrc[root@Test tmp]# cp -u ~/.bashrc /tmp/bashrc  #若 ~/.bashrc 比 /tmp/bashrc 新才进行复制,常用于备份中[root@Test tmp]# cp bashrc_slink bashrc_slink_1     #将快捷键复制为bashrc_slink_1,不加任何选项,cp复制原始文件,而非链接属性[root@Test tmp]# cp -d bashrc_slink bashrc_slink_2  #将快捷键复制为bashrc_slink_2,加上-d选项,则复制链接文件的属性[root@Test tmp]# ls -l bashrc bashrc_slink*-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrclrwxrwxrwx. 1 root root   6 Jun 11 19:06 bashrc_slink -> bashrc-rw-r--r--. 1 root root 176 Jun 11 19:09 bashrc_slink_1            #与原始文件相同lrwxrwxrwx. 1 root root   6 Jun 11 19:10 bashrc_slink_2 -> bashrc  #是链接文件[root@Test tmp]# cp ~/.bashrc ~/.bash_history /tmp #将home目录的 .bashrc 及 .bash_history复制到/tmp 底下# 可以将多个文件复制到同一个目录中,最后面一定是目录[shu@Test ~]$ cp -a /var/log/wtmp /tmp/shu_wtmp #使用shu用户,完整的复制/var/log/wtmp文件到/tmp下,并更名为shu_wtmp[shu@Test ~]$ ls -l /var/log/wtmp /tmp/shu_wtmp-rw-rw-r--. 1 shu shu 28416  6月 11 18:56 /tmp/shu_wtmp-rw-rw-r--. 1 root   utmp   28416  6月 11 18:56 /var/log/wtmp#因为shu 用户并不能随意修改文件的拥有者或群组,所以虽然能复制wtmp的相同权限与时间属性,但与拥有者或群组相关的,原本 shu 用户无法进行的操作,即使加上 -a 选项,也是无法完整复制权限的。

2)删除文件或目录rm

[root@Test ~]# rm [-fir] 文件或目录选项与参数:-f  :代表force 的意思,忽略不存在的文件或目录,不会出现警告信息;-i  :互动模式,在删除前提示用户进行确认-r  :循环删除,常常用在目录的删除中,非常危险[root@Test tmp]# rmdir /home/shu/svn #删除/home/shu/svn目录rmdir: failed to remove '/home/shu/svn': Directory not empty  #非空目录,不能删除[root@Test tmp]# rm -r /home/shu/svnrm: descend into directory `/home/shu/svn'? yrm: remove regular file `/home/shu/svn/fstab'? yrm: remove regular empty file `/home/shu/svn/crypttab'? ^C  # 按 [ctrl]+c 中断删除操作# 因为用户是 root ,默认情况下加了 -i 的选项,所以需要一直按 y 才能删除。如果不想继续按 y,可以按下 [ctrl]-c 结束rm[root@Test tmp]# \rm -r /home/shu/svn  # 如果确定需要删除掉此目录而不要进行询问,可以在命令rm前加上反斜线\# 删除一个带有 - 开头的文件[root@Test tmp]# touch ./-aaa-  #touch命令可以建立空文件[root@Test tmp]# ls -l -rw-r--r--. 1 root   root       0 Jun 11 19:22 -aaa-  #文件大小为0,所以是空文件[root@Test tmp]# rm -aaa-rm: invalid option -- 'a'                    # 因为 "-" 是选项,所以系统会报错Try 'rm ./-aaa-' to remove the file `-aaa-'.[root@Test tmp]# rm ./-aaa-   # 使用./则可以删除,也可以使用 rm -- -aaa-

3)移动文件或目录,或修改文件名称 mv

[root@Test ~]# mv [-fiu] source destination[root@Test ~]# mv [options] source1 source2 source3 .... directory选项与参数:-f  :force 强制进行,如果目标文件或目录已经存在,不会进行询问而直接覆盖;-i  :若目标文件或目录 (destination)已经存在,系统提示用户进行确认-u  :若目标文件或目录已经存在,且 source 比较新,才会更新 (update)# 复制一文件,建立目录,将文件移到新建目录中[root@Test ~]# cd /tmp[root@Test tmp]# cp ~/.bashrc bashrc[root@Test tmp]# mkdir mvtest[root@Test tmp]# mv bashrc mvtest[root@Test tmp]# mv mvtest mvtest2  #将文件进行更名# 而rename 命令进行多个文件名同时更名[root@Test tmp]# cp ~/.bashrc bashrc1[root@Test tmp]# cp ~/.bashrc bashrc2[root@Test tmp]# mv bashrc1 bashrc2 mvtest2 #将建立的2个文件都移动到/tmp/mvtest2目录中,如果有多个源文件或目录,目标文件一定是目录,即将所有的资料移动到该目录中。

3、获取路径的文件名词和目录名称

[root@Test ~]# basename /etc/sysconfig/networknetwork               #取得最后的文件名[root@Test ~]# dirname /etc/sysconfig/network/etc/sysconfig     #取得目录名

四、查看文件内容

1、直接查看文件内容:cat,tac,nl

1)cat  由第一行开始显示文件的信息,cat是Concatenate(连续)的缩写

[root@Test ~]# cat [-AbEnTv]选项与参数:-A  :相当于 -vET 的整合选项,可显示一些特殊字符而不是空白而已;-b  :显示行号,仅针对非空白行做行号显示,空白行不标记行号;-E  :将结尾的断行字符 $ 显示出來;-n  :显示行号,连同空白行也显示行号,与 -b 的选项不同;-T  :将 [tab] 键以 ^I 显示出來;-v  :列出一些看不出來的特殊字符[root@Test ~]# cat -n /etc/issue #查看/etc/issue文件的内容,并显示行号     1  \S     2  Kernel \r on an \m     3[root@Test ~]# cat -A /etc/man_db.conf  #显示/etc/man_db.conf的完整内容(包含特殊字符)# $........MANPATH_MAP^I/bin^I^I^I/usr/share/man$MANPATH_MAP^I/usr/bin^I^I/usr/share/man$MANPATH_MAP^I/sbin^I^I^I/usr/share/man$MANPATH_MAP^I/usr/sbin^I^I/usr/share/man$..........# 其中断行字符以 $ 表示,不过断行字符在Windows/Linux则不太相同,Windows的断行字符是 ^M$

2)tac  从最后一行开始显示文件的信息,tac 是 cat 倒着写来的

[root@Test ~]# tac /etc/issueKernel \r on an \m\S

3)nl   显示的时候,并输出行号和列号

[root@Test ~]# nl [-bnw] 文件或目录选项与参数:-b  :指定行号的方式,主要有两种:      -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);      -b t :如果有空行,空的那一行不要列出行號(默认值);-n  :列出行号表示的方法,主要有三种:      -n ln :行号在屏幕的最左方显示;      -n rn :行号在所在栏位的最右方显示,且不加 0 ;      -n rz :行号在所在栏位的最右方显示,且加 0 ;-w  :行号所在栏位占用的字符数。[root@Test ~]# nl /etc/issue #用 nl 显示 /etc/issue 的内容,默认情况下,空白行不显示行号     1  \S     2  Kernel \r on an \m[root@Test ~]# nl -b a /etc/issue #空白行加上行号     1  \S     2  Kernel \r on an \m     3[root@Test ~]# nl -b a -n rz /etc/issue  #空白行加上行号,且自动在所在栏位加上0,默认栏位是6位数000001  \S000002  Kernel \r on an \m000003[root@Test ~]# nl -b a -n rz -w 3 /etc/issue  #空白行加上行号,设置栏位占用3个字符数001     \S002     Kernel \r on an \m003

2、翻页查看文件内容:more,less

1)more 一页一页的显示文件信息

[root@Test ~]# more /etc/man_db.conf### This file is used# It is also used to provide# their PATH environment variable. #.........--More--(28%)  #光标停留在这一行,等待用户输入命令
在 more 这个命令运行过程中,可以使用以下按键进行后续操作:
空白键 (space):代表向下翻页;
Enter               :代表向下翻“ 一行 ”;
/字符               :代表在这个显示内容中,向下查询“ 字符 ”这个关键字;
:f                     :立刻显示出文件名以及目前显示的行数;
q                     :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b      :代表往回翻页,该操作只对文件有用,对管线无用。

n                     :重复搜索同一个字符

2)less 与 more 类似,比 more 更好的是可以向前翻页

less用法与more类似,不过在less运行过程中,可以使用以下按键进行后续操作:

空白鍵    :向下翻一页;
[pagedown]:向下翻一页;
[pageup]  :向上翻一页;;
/字符     :向下搜索“ 字符 ”的功能;
?字符     :向上搜索“ 字符 ”的功能;
n         :重复前一个搜索 (与 / 或 ? 有关)
N         :反向的重复前一个搜索 (与 / 或 ? 有关)
g         :显示到这个文件的第一行去;
G         :显示到这个文件的最后一行去 (注意大小写);
q         :离开 less 这个程序;

3、获取资料:head,tail

1)head 只看头几行

[root@Test ~]# head [-n number] 文件 选项与参数:-n  :后面接数字,代表需显示的行数[root@Test ~]# head /etc/man_db.conf          # 默认情况下,显示前面十行[root@Test ~]# head -n 20 /etc/man_db.conf    # 显示前 20 行[root@Test ~]# head -n -100 /etc/man_db.conf  # 显示除后面100行的资料

2)tail 只看末尾的几行

[root@Test ~]# tail [-n number] 文件选项与参数:-n  :后面接数字,代表显示的行-f  :表示继续监测后面的文件,直到按下[ctrl]-c才结束tail的监测[root@Test ~]# tail /etc/man_db.conf   # 默认情况下,显示最后十行。[root@Test ~]# tail -n 20 /etc/man_db.conf  # 显示最后的 20 行。[root@Test ~]# tail -n +100 /etc/man_db.conf # 只显示100行以后的信息。[root@Test ~]# tail -f /var/log/messages # 持续监测/var/log/messages的信息,直到输入[ctrl]-c后才离开tail这个命令的监测。

4、查看非纯文字文件:od

[root@study ~]# 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@study ~]# od -t c /usr/bin/passwd  #将/usr/bin/passwd的内容用ASCII方式显示0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \00000020 003  \0   >  \0 001  \0  \0  \0 364   3  \0  \0  \0  \0  \0  \00000040   @  \0  \0  \0  \0  \0  \0  \0   x   e  \0  \0  \0  \0  \0  \00000060  \0  \0  \0  \0   @  \0   8  \0  \t  \0   @  \0 035  \0 034  \00000100 006  \0  \0  \0 005  \0  \0  \0   @  \0  \0  \0  \0  \0  \0  \0.........# 最左边第一列是以 8 进制表示bytes数。例如第二列中0000020表示开头是第 16 个 byes (2x8) 的信息。[root@study ~]# od -t oCc /etc/issue #将/etc/issue这个文件的内容以8进制显示存值与ASCII的对照表0000000 134 123 012 113 145 162 156 145 154 040 134 162 040 157 156 040          \   S  \n   K   e   r   n   e   l       \   r       o   n0000020 141 156 040 134 155 012 012          a   n       \   m  \n  \n0000027# 如上,可以发现每个字符可以对应的数字,注意,这里是8进制,例如S对应的记录是123,转成十进制是:1x8^2+2x8+3=83。

5、修改文件时间与建立新文件:touch

1)linux下主要的变动时间:
a)modification time (mtime):当该文件的内容(仅指内容,不包括文件的属性或权限)发生变更,就会更新这个时间。
b)status time (ctime):当该文件的“ 状态 (status) ”(包括文件的属性或权限)改变时,就会更新这个时间。
c)access time (atime):当该文件的内容被读取时,,就会更新这个时间(access)。如使用 cat 去读取 /etc/man_db.conf 则更新文件的 atime 。

root@Test:~$ date;ls -l /etc/doc-base;ls -l --time=atime /etc/doc-base;\> ls -l --time=ctime /etc/doc-base  # 这2行其实是一行命令,用\隔开,为了让信息输出比较清晰,将3个命令同时按顺序执行,三个命令中用分号隔开2017年 01月 16日 星期一 10:39:23 CST # 目前的时间总用量 4                     drwxr-xr-x 2 root root 4096  4月 17  2014 documents # 在 2014/04/17 建立的内容(mtime),默认情况下,ls显示文件的mtime,即上次修改文件内容的时间总用量 4 drwxr-xr-x 2 root root 4096  1月  5 15:17 documents # 在 2017/01/05  读取过内容(atime)总用量 4drwxr-xr-x 2 root root 4096  9月 20 17:17 documents # 在 2016/09/20 更新过状态(ctime),因为文件的安装时间是2016/09/20,也是这个文件被改动的时间

2)touch用于修改文件时间与建立新文件

[root@Test ~]# touch [-acdmt] 文件选项与参数:-a  :仅修改 access time;-c  :仅修改文件的时间,若该文件不存在则不建立新文件;-d  :后面可以接想修改的日期而不用目前的日期,也可以使用 --date="日期或时间"-m  :仅修改 mtime ;-t  :后面可以接想修改的时间而不用目前的时间,格式为[YYYYMMDDhhmm]# 新建一个空的文件并查看时间[shu@Test tmp]# touch testtouch[shu@Test tmp]# ls -l testtouch-rw-rw-r--. 1 shu shu 0 Jun 16 00:45 testtouch# 注意,这个文件的大小是 0 ,默认情况下,如果 touch 后面接文件,则该文件的3个时间 (atime/ctime/mtime) 都会更新为目前时间。若该文件不存在,则会自动建立一个空文件。# 将 ~/.bashrc 复制成为 bashrc,如果复制完全的属性,查看日期[shu@Test tmp]# cp -a ~/.bashrc bashrc [shu@Test tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc2017年 01月 16日 星期一 11:07:22 CST            # 目前的时间-rw-r--r-- 1 shu shu 4081 12月  7 11:54 bashrc  # mtime-rw-r--r-- 1 shu shu 4081  1月 16 09:35 bashrc  # atime-rw-r--r-- 1 shu shu 4081  1月 16 11:06 bashrc  # ctime
因为这个文件是刚刚被建立,所以状态(ctime)就变成现在的时间。使用touch进行修改

[shu@Test tmp]# touch -d '2 days ago' bashrc # 修改bashrc文件的时间为2天前[shu@Test tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc2017年 01月 16日 星期一 11:13:01 CST-rw-r--r-- 1 shu shu 4081  1月 14 11:12 bashrc-rw-r--r-- 1 shu shu 4081  1月 14 11:12 bashrc-rw-r--r-- 1 shu shu 4081  1月 16 11:12 bashrc# 这样(atime/mtime)时间被修改到2天前, ctime 并没有跟着改变。[shu@Test tmp]# touch -t 201701160202 bashrc # 将bashrc的日期修改为 2017/01/16 2:02[shu@Test tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc2017年 01月 16日 星期一 11:16:06 CST-rw-r--r-- 1 shu shu 4081  1月 16 02:02 bashrc-rw-r--r-- 1 shu shu 4081  1月 16 02:02 bashrc-rw-r--r-- 1 shu shu 4081  1月 16 11:16 bashrc# 注意,atime、mtime的日期都改变了,但ctime 则是记录目前的时间。
       通过 touch 这个命令,可以建立一个空的文件,也可以将某个文件的日期进行修改(mtime和atime),平时看文件属性中,比较重要的是mtime,因为大多数时间都是关心文件内容被修改的时间。但不能修改ctime,ctime可以记录文件最近的状态 (status) 被改变的时间。

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

1、默认文件权限:umask

umask 指定“ 目前使用者在建立文件或目录时权限的默认值 ”, 其查看或设置umask方法:

[shu@Test ~]# umask0002            # 与一般权限有关的是后面3个数字[shu@Test ~]# umask -Su=rwx,g=rx,o=rx

默认如下(其中r、w、x 分别是 4、2、1 分):
若使用者建立为 文件 则默认 没有可执行( x )權限,即只有 rw 这两个权限,也就是最大权限为 666 ,默认权限如下:-rw-rw-rw-
若使用者建立为 目录,则由于 x 与是否可以进入此目录有关,因此默认开放所有权限,即777,默认权限如下:drwxrwxrwx

注意,umask 的分数指“ 该默认值需要减去的权限 ”。即当需要拿掉写的权限,则为 2,而如果要拿掉读的权限,则为 4 分。上面umask为002,表示user、 group并没有被拿掉任何权限,不过others 的权限被拿掉了 2 (w的权限)

当建立文件时:(-rw-rw-rw-) - (---------w-) ==> -rw-rw-r-- ; 建立目录时(drwxrwxrwx) - (d-------w-) ==> drwxrwxr-x

shu@Test:~$ touch test1shu@Test:~$ mkdir test2shu@Test:~$ ll -d test*-rw-rw-r-- 1 shu shu    0  1月 16 11:54 test1drwxrwxr-x 2 shu shu 4096  1月 16 11:54 test2/

设定umask时可直接在其后加数字:

[root@Test ~]# umask 022[root@Test ~]# touch test3[root@Test ~]# mkdir test4[root@Test ~]# ll -d test[34]   # 中括号 [ ] 代表中间指定字符,而不是任意字符-rw-r--r-- 1 shu shu    0  1月 16 13:47 test3drwxr-xr-x 2 shu shu 4096  1月 16 13:47 test4/

2、文件隐藏属性:chattr,lsattr

1)设置文件隐藏属性chattr:

[root@study ~]# chattr [+-=][ASacdistu] 文件或目录名称选项与参数:+   :增加某一个特殊参数,其他原本存在参数则不动。-   :移除某一个特殊参数,其他原本存在参数则不动。=   :设置一个,且只有该参数的参数A  :若设定了 A 这个属性,当存取此文件(或目录)时,它的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系統挂载参数处理文件)S  :一般文件是否同步写入磁盘,如果加上 S 这个属性,在对文件进行任何修改时,该变更会同步写入磁盘中。a  :当设置 a 后,这个文件将只能增加信息,不能修改、删除信息,只有root才能设定这个属性。c  :当设置这个属性后,将会自动对该文件进行 压缩,在读取时进行自动解压缩,但在保存时,将会先进行压缩再保存(用于大文件的操作)。d  :当 dump 程序被执行时,设置 d 属性将可使该文件(或目录)不会被 dump 备份i  :当设置 i 后,则该文件“ 不能被刪除、改名、设置链接也无法写入或新增信息 ”,可增加系统安全性,只有root能设置该属性,常用于log files  :当设置 s 后,如果这个文件被刪除,则该文件将被完全的移除硬盘空间,如果误删除,完全无法补救。相当于物理删除。u  :与 s 相反,当设置 u 后,如果这个文件被刪除,则文件内容仍然保存在硬盘中,可以用来补救文件。相当于逻辑删除。[root@Test tmp]# touch attrtest     # 建立一个空文件[root@Test tmp]# chattr +i attrtest # 给予 i 属性[root@Test tmp]# rm attrtest        # 进行删除rm: remove regular empty file `attrtest'? yrm: cannot remove `attrtest': Operation not permitted[root@Test tmp]# chattr -i attrtest #将文件的 i 属性取消
注意:常见的属性是 a 和 i ,且很多属性只有root才能设置。xfs 文件系统仅支持 AadiS 。

2)显示文件隐藏属性lsattr:

[root@Test ~]# lsattr [-adR] 文件或目录名称选项与参数:-a :显示隐藏属性;-d :如果接的是目录,则仅显示目录本身的属性而不是目录内的文件名;-R :连同子目录的文件一起显示。[root@Test tmp]# chattr +aiS attrtest[root@Test tmp]# lsattr attrtest--S-ia---------- attrtest

3、文件特殊权限:SUID,SGID,SBIT,权限设定

1)设置UID,简称 SUID 的特殊权限

查看passwd的权限:

[root@Test ~]# ls -l /usr/bin/passwd-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

当 s 这个标志出现在文件拥有者的x权限上时则为set UID,简称 SUID 的特殊权限。 SUID限制与功能:

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

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

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

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

如,在系统中所有帐号密码都记录在 /etc/shadow 这个文件里,这个文件的权限为:---------- 1 root root,则该文件只有 root可读且仅有root可以强制写入。 但一般用户在修改密码时,因为具有SUID权限,则

一般用户shu 对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 shu 能执行 passwd;

passwd 的拥有者是 root 这个帐号;

shu 执行 passwd 的过程中,会 暂时 获得 root 的权限;/etc/shadow 就可以被 shu 所执行的 passwd 所修改。

但如果 shu 使用 cat 去读取 /etc/shadow 时,因为 cat 不具有 SUID 的权限,所以不能读取 /etc/shadow 的。

另外,SUID 仅可用在binary program 上, 不能夠用在 shell script 上面,这是因为 shell script 由很多binary执行文件组成,所有SUID 的权限,需要根据组成 shell script 的程序进行设置,而不是 shell script 本身,SUID 对于目录也是无效的。

2)SGID

当 s 标志在文件拥有者的 x 权限上时 SUID,当 s 在群组的 x 时则成为 Set GID, SGID 。如下:

[root@Test ~]# ls -l /usr/bin/mlocate-rwxr-sr-x 1 root mlocate 39520  6月 20  2013 /usr/bin/mlocate
与 SUID 不同的是,SGID 可以针对文件或目录进行设置。对于文件来说, SGID 有如下的功能:
SGID 对二进制程序有用;
程序执行者对于该程序来说,需具备 x 的权限;
执行者在执行的过程中将会获得该程序群组的支援。
如,上面的 /usr/bin/mlocate 这个程序可以去查询 /var/lib/mlocate/mlocate.db 文件的内容, mlocate.db 的权限如下:
[root@Test ~]# ll /usr/bin/mlocate /var/lib/mlocate/mlocate.db-rwxr-sr-x 1 root mlocate    39520  6月 20  2013 /usr/bin/mlocate*-rw-r----- 1 root mlocate 12495159  1月 16 09:40 /var/lib/mlocate/mlocate.db
与 SUID 类似,若使用 shu 这个帐号去执行 mlocate,那 shu 将会取得 mlocate 群组的支援,则可以读取 mlocate.db 。

除了 binary program 之外, SGID 也可用于目录上,当一个目录设置了 SGID 的权限后,则具有如下的功能:
使用者若对于此目录具有 r 和 x 的权限时,该使用者能夠进入此目录;
使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

3)SBIT

Sticky Bit, SBIT 目前只针对目录有效,对于文件没有效果。SBIT 对于目录的作用是:
当使用者对于此目录具有 w, x 权限,即具有写入、执行的权限;
当使用者在该目录下建立文件或目录时,仅用户自身和 root 才有权限刪除该文件。

即:当 甲 使用者对 A 目录是具有群组或其他人的身份,並且拥有该目录 w 的权限, 则 甲使用者对该目录内任何人建立的目录或文件均可进行 "刪除/更名/移动" 等操作。 不过,如果将 A 目录加上了 SBIT 的权限时, 则甲只能对自己建立的文件或目录进行刪除/更名/移动等操作,而无法刪除他人的文件。

如 /tmp 本身的权限是『drwxrwxrwt』, 则任何人都可以在 /tmp 内新增、修改文件,但仅有该文件/目录建立者和 root 能夠刪除自己的目录或文件。

4)设置SUID/SGID/SBIT权限

更改权限中,三个数字之前再加上一个数字,最前面的那个数字就代表SUID/SGID/SBIT权限,其中
4 为 SUID
2 为SGID
1 为 SBIT
如将一个文件的权限修改为 -rwsr-xr-x,由于 s 在使用者权限中,则为 SUID ,这样在原来的 755 前加上 4 ,即: chmod 4755 filename 

[root@Test tmp]# touch test                  # 建立一个空文件[root@Test tmp]# chmod 4755 test; ls -l test # 加入具有 SUID 的权限-rwsr-xr-x 1 root root 0 Jun 16 02:53 test[root@Test tmp]# chmod 6755 test; ls -l test # 加入具有 SUID/SGID 的权限-rwsr-sr-x 1 root root 0 Jun 16 02:53 test[root@Test tmp]# chmod 7666 test; ls -l test # 具有空的 SUID/SGID/SBIT 权限-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
注意:因为 s 与 t 都是取代 x 这个权限的,但下达的 7666 中 user, group 以及 others 都没有 x 这个可执行权限,所以,这个 S, T 代表的就是 空的 。因为SUID 是表示 该文件在执行时,具有文件拥有者的权限 ,但是文件拥有者都无执行权限,则无法赋予其他用户权限。

也可通过符号进行设置权限,其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t ,如:

[root@Test tmp]# chmod u=rwxs,go=x test; ls -l test   # 设置权限成为 -rws--x--x-rws--x--x 1 root root 0 Jun 16 02:53 test[root@Test tmp]# chmod g+s test; ls -l test  # 设置权限成为 -rws--xs--x-rws--s--- 1 root root 0 Jun 16 02:53 test

4、查看文件类型:file

查看文件的基本信息,如文件属于ASCII、data或者binary,判断使用 tar 包时,该 tarball 文件使用的压缩功能。

[root@Test ~]# file ~/.bashrc/root/.bashrc: ASCII text     # 显示文件的类型是 ASCII 的纯文字文件[root@Test ~]# file /usr/bin/passwd/usr/bin/passwd: setuid ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs),for GNU/Linux 2.6.24, BuildID[sha1]=999e2f8579c0a26bd358b4d81416881c81a2ad8c, stripped# 执行文件的信息很多,如文件的suid权限、兼容Intel x86-64 的硬件平台、使用 Linux 核心 2.6.24 的动态方法库连接等等。[root@Test ~]# file /var/lib/mlocate/mlocate.db/var/lib/mlocate/mlocate.db: data  # 显示文件的类型是 data

六、查找命令和文件

1、查找命令的文件名:which

[root@Test ~]# which [-a] command选项或参数:-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称[root@Test ~]# which ifconfig  # 查询 ifconfig 这个命令的完整文件名/sbin/ifconfig [root@Test ~]# which which   # 用 which 去找出 which 的文件名alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'        /bin/alias        /usr/bin/which# 显示2个 which ,其中一个是 alias 命令别名(输入which等于后面接的那串命令)[root@Test ~]# which history   #查询 history 这个命令的完整文件名/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)[root@Test ~]# history --help-bash: history: --: invalid optionhistory: usage: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg 
whilh 是根据 PATH 这个环境变量所规范的路径,去查询 执行文件 的文件名,which 后面接 完整文件名 。若加上 -a ,则列出所有可以找到的同名执行文件,而非仅显示第一个。
最后一个应用中, history 这个常用命令找不到,是因为 history 是 bash 内建命令, 但是 which 默认查找 PATH 内所规范的目录( bash 就有 history)。但可以通过 type 这个命令进行查询。
2、查找文件的文件名:whereis,locate/updatedb,

1)whereis 在一些特定的目录中查询文件的文件名

[root@Test ~]# whereis [-bmsu] 文件或目录选项与参数:-l     :可以列出 whereis 查询的几个主要目录-b    :只查找 binary 格式的文件-m   :只查找在说明文件 manual 路径下的文件-s     :只查找 source 來源文件-u    :查询不在上述几项当中的其他特殊文件[root@Test ~]# whereis ifconfig   # 查找ifconfig的文件名ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz#查找与 passwd 有关的 说明文件 的文件名(man page)[root@Test ~]# whereis passwd     # 全部的文件名通通列出來!passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz[root@Test ~]# whereis -m passwd  # 只查询在 man 里面的文件名passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
whereis 主要是针对 /bin /sbin 底下的执行文件, 以及 /usr/share/man 底下的 man page 文件,或者几个特定的目录进行查找。所以速度较快。可以使用 whereis -l 查看whereis查找的目录

2)locate

[root@Test ~]# locate [-ir] keyword选项与参数:-i  :忽略大小写差异;-c  :不显示文件名,仅显示找到的文件数量-l  :仅显示几行查找结果数据,例如显示五行则是 -l 5-S  :显示 locate 所使用的资料库文件的相关信息,包括该资料库记录的文件/目录数量等-r  :后面可接正规表达式的显示方式[root@Test ~]# locate -l 5 passwd   # 查找系統中所有与 passwd 相关的文件名,且只列出 5行/etc/passwd/etc/passwd-/etc/pam.d/passwd/etc/security/opasswd/usr/bin/gpasswd[root@Test ~]# locate -S   # 显示 locate 查找所使用的资料库文件的文件名与各资料数量Database /var/lib/mlocate/mlocate.db:        8,086 directories     # 总记录目录数        109,605 files         # 总记录文件数        5,190,295 bytes in file names        2,349,150 bytes used to store database
locate的使用很简单,直接在后面输入 文件的部分名称 后,就能得到查询结果。如输入locate passwd,在完整文件名 (包含路径名) 当中,只要有 passwd 在其中, 则会显示。

使用 locate 查询资料时特别快,这是因为 locate 查询的资料是在“ 已建立的资料库 /var/lib/mlocate/ ”中资料进行查询得到的,所以不用直接在去硬盘当中存取资料。
3)updatedb

       因为locate在资料库中进行查询,而资料库的建立默认每天执行一次 (每个系统会有所不同),所以当新建文件后,但在资料库更新前查询该文件,则 locate 无法查询,因为必须使用updatedb更新资料库。

       更新 locate 资料库的方法非常简单,直接输入  updatedb  就可以了。 updatedb 命令会去读取 /etc/updatedb.conf 设置文件,然后再去硬盘里面进行查询文件名操作, 最后就更新整个资料库文件。因为 updatedb 会去查询硬盘,所以当执行 updatedb 时,会非常耗时。

       locate:依据 /var/lib/mlocate 内的资料库记载,找出使用者输入的关键字文件名。

4)find

a)find与时间有关的参数

[root@Test ~]# 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 还要新的文件文件名[root@Test ~]# find / -mtime 0   # 显示过去系统中 24 小时内有改动过内容 (mtime) 的文件# 其中 0 代表目前的时间,则从现在开始到 24 小时前,有改动过内容的文件都会被显示那如果是?[root@Test ~]# find / -mtime 3   # 显示三天前的 24 小时内有改动过内容的文件[root@Test ~]# find /etc -newer /etc/passwd   #查询 /etc 底下的文件,如果文件日期比 /etc/passwd 新就显示# -newer 常用在分辨两个文件之间的新旧关系
  

find 相關的時間參數意義
图中最右边为目前时间,越往左边则代表越早之前的时间。其中

+4代表大于等于5天前的文件名:ex> find /var -mtime +4
-4代表小于等于4天内的文件名:ex> find /var -mtime -4
4则是代表4-5那一天的文件名:ex> find /var -mtime 4

b)find与使用者或群组名称有关的参数

[root@Test ~]# find [PATH] [option] [action]选项与参数:2. 与使用者或群组名称有关的参数:   -uid n :n 为数字,这个数字是使用者的帐号 ID(UID),这个 UID 记录在 /etc/passwd 里面与帐号名称对应的数字。   -gid n :n 为数字,这个数字是群组名称的 ID(GID),这个 GID 记录在 /etc/group   -user name :name 为使用者帐号名称,如shu   -group name:name 为群组名称,如 users ;   -nouser    :查询文件的拥有者不存在于 /etc/passwd 的用户   -nogroup   :查询文件的拥有群组不存在于 /etc/group 的文件;当自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这时,可以使用 -nouser 与 -nogroup 查询。[root@Test ~]# find /home -user shu  # 查询 /home 下属于 shu 的文件,可利用这个命令将属于任何一个使用者在系统中的所有文件都找出來。[root@Test ~]# find / -nouser  # 查询系统中不属于任何人的文件,可以找出那些不太正常的文件。例如以原始码自行编译的软件
        使用上述的选项与参数,可以找出某个使用者在系统下建立的文件。其中 -nouser 或 -nogroup 的选项,一般发生在用户自行在网络上面下载文件;或者发生在将系统里面某个帐号刪除后,但是该帐号已经在系统内建立很多文件,这时就可以使用这个 -nouser 来找出该类型的文件。

c)find与文件权限及名称有关的参数

[root@Test ~]# find [PATH] [option] [action]选项与参数: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(/755)时,会显示文件属性为 -rw-------的文件,因为有-rw.... 的属性存在。[root@Test ~]# find / -name passwd   # 找出文件名为 passwd 这个文件[root@Test ~]# find / -name "*passwd*"   #找出文件名包含了 passwd 这个关键字的文件[root@Test ~]# find /run -type s     # 找出 /run 目录下,文件类型为 Socket 的文件名[root@Test ~]# find / -perm /7000    # 查询文件当中含有 SGID 或 SUID 或 SBIT 的属性,其中 7000 就是 ---s--s--t                                                             # 使用 -7000 表示必须同时含有 ---s--s--t 的三个权限。使用 /7000,则只要含有 s 或 t 的就会显示。[root@Test ~]# find /usr/bin /usr/sbin -perm /6000   # 查找 /usr/bin, /usr/sbin 这两个目录下,只要具有 SUID 或 SGID 就显示该文件
其中,find 后面可以接多个目录进行查询。另外,find 本来就会查询次目录。

d)find的其他参数

[root@Test ~]# find [PATH] [option] [action]选项与参数:4. 其他可进行的操作:   -exec command :command 为其他命令,-exec 后面可再接其他的命令进行处理查询到的结果。   -print        :将结果显示到屏幕上,该操作为默认操作。[root@Test ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;   # 将找到的文件使用 ls -l 显示,-exec后的其他命令,不支持命令别名,即仅能使用 ls -l 不可以使用 ll 。[root@Test ~]# find / -size +1M   # 找出系统中,大于 1MB 的文件
其中, {}  \;  -exec 的功能如下:

    {} 代表“ 由 find 找到的内容 ”,find 的结果会被放置到 {} 位置中;
    -exec 到 \; 是关键字,代表 find 其他操作的开始 (-exec) 到结束 (\;) ,这中间的就是 find 命令内的其他操作, 如“ ls -l {} ”。因为 ; 在 bash 环境下有特殊意义,所以使用反斜线进行区分。

find可以查找具有特殊属性(如 SUID 、文件拥有者、文件大小等等)的文件,但locate 是无法查找的。find 还可以利用通配字符(*)进行查找文件。

因为 find 直接查询硬盘,如果硬盘比较老旧,则会非常耗时的。

七、重点

绝对路径:“ 一定由根目录 / 写起 ”;相对路径:“ 不由 / 写起,而是由相对当前目录写起 ”
特殊目录有:., .., -, ~, ~account需要注意;
与目录相关的命令有:cd, mkdir, rmdir, pwd 等;rmdir 仅能刪除空目录,要刪除非空目录需使用“ rm -r ”命令;
使用者能使用的命令是依据 PATH 变量所规定的目录去查找的;
ls 可以查看文件的属性,可使用 -d, -a, -l 等选项;
文件的复制、刪除、移动可以分别使用:cp, rm , mv等命令进行操作;
检查文件的内容(读取文件)可使用的命令包括有:cat, tac, nl, more, less, head, tail, od 等
cat -n 与 nl 均可显示行号,但默认情況下,空白行会不会编号并不相同;
touch 的目的在修改文件的时间参数,但也可用来建立空文件;
一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默认显示的是 mtime。
除了rwx权限之外,在Ext2/Ext3/Ext4/xfs文件系统中,可以使用chattr与lsattr设定及查看隐藏属性。 常见的包括只能新增内容的 +a 与完全不能更动文件的 +i 属性。
新建文件/目录时,新文件的默认权限使用 umask 进行规范。默认目录完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-。
文件具有SUID的特殊权限时,代表当使用者执行此一binary程序时,在执行过程中使用者会暂时具有程序拥有者的权限。
目录具有SGID的特殊权限时,代表使用者在这个目录下新建的文件之群组都会与该目录的群组名称相同。
目录具有SBIT的特殊权限时,代表在该目录下使用者建立的文件只有自己与root能夠刪除。
查看文件的类型可以使用 file 命令进行查看;
查找命令的完整文件名可用 which 或 type ,这两个命令都是通过 PATH 变量进行查找文件名;
查找文件的完整文件名可以使用 whereis 找特定目录或 locate 到资料库去查找,而不实际查找文件系统;
利用 find 可以加入许多选项进行直接查询文件系统,来得到想要的文件名。



0 0
原创粉丝点击