DomBro Studio

Linux文件与目录管理

2017/12/10

目录

1. 目录与路径

  • 目录与文件的操作

Linux 下目录的操作包括在不同的目录间切换、创建与删除目录,创建与删除文件、查找文件、查看文件内容等。

1.1 相对路径与绝对路径

  • 绝对路径

路径的写法一定由根目录/写起,例如/usr/share/doc这个目录。

  • 相对路径

路径的写法不是由/写起,例如由/usr/share/doc 要到/usr/share/man 下面时,可以写成“cd ../man”,这就是相对路径的写法。相对路径意指相对于目前工作目录的路径。

至于特点——>使用相对路径更加简洁方便,但绝对路径的正确度要比较好

1.2 目录的相关操作

  • 比较特殊的目录

.  代表此层目录
 
.. 代表上一层目录
 
- 代表前一个工作目录
 
~ 代表“目前用户身份”所在的主文件~account 代表 account 这个用户的主文 件夹(account是个账号名称)

1.3 常见处理目录命令

  • 常见处理目录命令

cd:切换目录

pwd:显示当前目录

参数:

-P :显示出当前的路径,而非使用连接(link) 路径。

范例:单纯显示出当前的工作目录:

[root@www ~]# pwd

/root <== 显示出目范例:显示出实际的工作目录,而非连接文件本身的目录名而已

[root@www ~]# cd /var/mail <==注意,/var/mail是一个连接文件

[root@www mail]# pwd

/var/mail  <==列出目前的工作目录

[root@www mail]# pwd -P

/var/spool/mail <==怎么回事?有没有加 -P 差很多~

[root@www mail]# ls -ld /var/mail

lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail

看到这里应该知道为啥了吧?因为 /var/mail 是连接文件,连接到 /var/spool/mail


mkdir:新建一个新的目录

参数:

-m :配置文件案的权限。直接设置,不需要看默认权限(umask)

-p :帮助你直接将所需要的目录(包含上层目录)递归创建起来


rmdir:删除一个空的目录

参数:

-p :连同上层“空的 目录也一起删除

1.4 执行文件路径变量 $PATH

 当我们在执行一个命令的时候,举例来说“ls”好了,系统会依照 PATH 的设置去每个PATH定义的目录下查询文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行

我们执行的每个命令实际上都是可执行的文件,可以通过输入这个文件的绝对路径(比如 /bin/ls )去执行这个文件,但当将这个 /bin 放入到 PATH 变量中,就不需要去将这个可执行文件的绝对路径打出,直接 ls 就可以了

执行 echo $PATH 查看哪些目录被定义出来( echo 命令为 显示出打印,PATH 前面接的 $ 表示后面接的是变量,会显示出目前的路径!)

  • 范例

[root@www ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@www ~]# su - vbird

[vbird@www ~]# echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin

仔细看,一般用户 vbird 的PATH中,并不包含任何“sbin”的目录存在喔!
PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开,每个目录是有“顺序”之分的,如果两个路径下有相同可执行文件,优先执行排在前面目录中的文件。仔细看一下上面的输出,你可以发现无论是 root 还是 vbird 都有/bin 这个目录在PATH变量内,所以当然就能够在任何地方执行ls来找到/bin/ls执行文件

2. 文件与目录管理

文件与目录的管理在 Linux 重视很重要的,尤其是每个人自己主文件夹的数据也都需要注意管理。

2.1 查看文件与目录 : ls

  • ls 命令

[root@www ~]# ls [-aAdfFhilnrRSt]目录名称
[root@www ~]# ls [–color={never,auto,always}]目录名
[root@www ~]# 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} :输出访问时间或改变权限属性时间(ctime)

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

  • cp 复制文件或目录

[root@www ~]# cp [-adfilprsu] 源文件(source) 目标文件(destination)

[root@www ~]# cp [options] source1 source2 source3 …. directory

参数:

-a :连同文件的权限一同拷贝过来(常用)

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

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

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

-l :进行硬连接(hard link)的连接文件创建,而非复制文件本身;

-p :连同文件的属性一起复制过去,而非使用默认属性(备份常用)
-r :递归持续复制,用于目录的复制行为(常用)

-s :复制成为符号链接文件(symbolic link),即“快捷方式”文件;

-u :若 destination 比 source 旧才更新 destination。

最后需要注意的,如果源文件有两个以上,则最后一个目的文件一定要是“目录”才行

  • cp -a 特性

[root@www tmp]# cp -a /var/log/wtmp wtmp_2

[root@www tmp]# ls -l /var/log/wtmp wtmp_2

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

-rw-rw-r– 1 root utmp 96384 Sep 24 11:54 wtmp_2

#整个数据特性完全一模一样。这就是 -a 的特性。

这个cp的功能很多,由于我们经常会进行一些数据的复制,所以也会经常用到这个命令的。一般来说,我们如果去复制别人的数据(当然,该文件你必须要有read的权限才行.)时,总是希望复制到的数据最后是我们自己的,所以,在默认的条件中,cp 的源文件与目的文件的权限是不同的,目的文件的所有者通常会是命令操作者本身

由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件,例如密码文件(/etc/shadow)以及一些配置文件,就不能直接以cp来复制,而必须要加上-a或者是-p等可以完整复制文件权限的所有者等) 否则,其他人还是无法针对你给予的文件进行修订的操作**。

  • rm 移除文件或目录

[root@www ~]# rm [-fir]文件或目录

参数:

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

-i :互动模式,在删除前会询问用户是否操作;

-r :递归删除。最常用在目录的删除了。这是非常危险的参数!!!

在进行删除操作时尽量加上 -i 选项

  • mv 移动文件目录或更名

[root@www ~]# mv [-fiu] source destination

[root@www ~]# mv [options] source1 source2 source3 …. dire参数:

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

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

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

  • 移动文件范例

[root@www ~]# cd /tmp

[root@www tmp]# cp ~/.bashrc bashrc

移动单个文件

[root@www tmp]# mkdir mvtest

[root@www tmp]# mv bashrc mvtest

移动多个文件
[root@www tmp]# cp ~/.bashrc bashrc1

[root@www tmp]# cp ~/.bashrc bashrc2

[root@www tmp]# mv bashrc1 bashrc2 mvtest2

注意如果由多个源文件或目录,则最后一个目标文件一定是目录,意思是说将所有的数据移动到该目录

  • 重命名范例

[root@www tmp]# mv mvtest mvtest2 <== 这样就重命名了。

2.3 取得文件名与目录名称

  • basename 与 dirname

[root@www ~]# basename /etc/sysconfig/network

network  <== 很简单!就取得最后的文件名。

[root@www ~]# dirname /etc/sysconfig/network

/etc/sysconfig <== 取得目录名。

3. 文件内容查阅

  • 查阅文件的几个基本命令

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

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

nl:显示的时候,顺便输出行号。

more:一页一页地显示文件内容。

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

head:只看头几行。

tail:只看结尾几行。

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

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

  • cat (concatenate)

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

参数:

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

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

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

-n :打印出行号,连同空白行也会有行号,与-v :列出一些看不出来的特殊字符。

cat 是 concatenate(连续)的简写,主要功能是将一个文件的内容连续显示在屏幕上面。建议文件在超过40行时不要使用 cat ,因为根本来不及看到结果。

  • tac (反向示例)

仔细看一下 cat 与 tac ,tac 刚好是将 cat 反写过来,所以他的功能和 cat 相反,由最后一行到第一行反向在屏幕上显示出来。

  • nl (添加行号打印)

[root@www ~]# nl [-bnw] 文件

参数:

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

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

-b t :如果有空行,空的那一行不要列出行号(默-n :列出行号表示的方法,主要有三种:

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

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

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

-w :行号字段占用的位数。

  • nl 范例

[root@www ~]# nl -b a -n rz -w 3 /etc/issue

001 CentOS release 5.3 (Final)

002 Kernel \r on an \m

003

nl 可以将输出的文件内容自动加上行号!其默认结果与 cat -n 不太一样,nl 可以将行号做比较多的现实射击,包括为数与是否自动补0的功能。

3.2 可翻页查看 : more , less

  • more (一页一页的翻动)

[root@www ~]# more /etc/man.config

#

# Generated automatically from man.conf.in by the

# configure script.

#

# man.conf from man-1.6d

….(中间省略)….

–More–(28%) <== 重点在这一行。你的光标也会在这里等待你的命令。

仔细看看上面的范例,如果more后面接的文件内容行数大于屏幕输出的行数时,就会出现类似上面的图示。重点在最后一行,最后一行会显示出目前显示的百分比,而且还可以在最后一行输入一些有用的命令。
空格键(Space):代表向下翻一页;

Enter :代表向下滚动一行;

/字符串 :代表在这个显示的内容当中,向下查询“字符串”这个关键字;

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

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

b或[ctrl]-b :代表往回翻页,不过这操作只对文件有用,对管道无用。

要离开more这个命令的显示工作,可以按下q就能够离开了。而要向下翻页,就使用空格键即可。
比较有用的是搜寻字符串的功能,举例来说,我们使用“more /etc/man.config”来查看该文件,若想要在该文件内搜寻MANPATH这个字符串时,可以这样做:

[root@www ~]# more /etc/man.config

# Generated automatically from man.conf.in by the

# configure script.

#

# man.conf from man-1.6d

….(中间省略)….

/MANPATH <== 输入了 / 之后,光标就会自动跑到最下面一行等待输入。

如同上面的说明,输入了/之后,光标就会跑到最下面一行,并且等待你的输入,你输入了字符串并按下[Enter]之后,more就会开始向下查询该字符串,而重复查询同一个字符串,可以直接按下 n 即可。最后,不想要看了,就按下 q 即可离开 more。

  • less (一页一页的翻动)

[root@www ~]# less /etc/man.confi#

# Generated automatically from man.conf.in by the

# configure script.

#

# man.conf from man-1.6d

….(中间省略)….

: <== 这里可以等待你输入命令!

less的用法比起more又更加有弹性 。在使用more的时候,我们并没有办法向前面翻,只能往后面看,但若使用了less时,就可以使用下、下等按键的功能来往前往后翻看文件,你瞧,是不是更容易使用来查看一个文件的内容了呢!

除此之外,在less里头可以拥有更多的查询功能。不只可以向下查询,也可以向上查询,实在是很不错,基本上,可以输入的命令有空格键 :向下翻动一页;

[PageDown] :向下翻动一页;

[PageUp] :向上翻动一页;

/字符串 :向下查询“字符串”的功能;

?字符串 :向上查询“字符串”的功能;

n :重复前一个查询(与 / 或 ? 有关);

N :反向重复前一个查询(与 / 或 ? 有关);

q :离开 less这个程序;

less 是一个非常重要的可翻页查看文件的命令!

3.3 数据选取 : head , tail

  • head(取出前面几行)

[root@www ~]# head [-n number] 文件

参数:

-n :后面接数字,代表显示几行的意思

[root@www ~]# head /etc/man.config

默认的情况中,显示前10行!若要显示前 20 行,就得要这样:

[root@www ~]# head -n 20 /etc/man.confi
范例:如果后面100行的数据都不打印,只打印/etc/man.config的前面几行,该如何是好?

[root@www ~]# head -n -100 /etc/man.config

head的英文意思就是“头”,那么用法自然就是显示出一个文件的前几行。若没有加上-n这个参数时,默认只显示十行,若只要一行呢?那就加入“head -n 1 filename ”即可!

另外那个-n 参数后面的参数较有趣,如果接的是负数,例如上面范例的-n-100 时,代表列出前面的所有行数,但不包括后面100行。
举例来说,/etc/man.config共有141行,则上述的命令“head -n -100 /etc/man.config”就会列出前面 41 行,后面 100 行不会打印出来了。

  • tail (取出后面几行)

[root@www ~]# tail [-n number] 文件

参数:

-n :后面接数字,代表显示几行的意思

-f :表示持续检测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的检
[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的10行。
若要显示最后的 20 行,就得要这样:

[root@www ~]# tail -n 20 /etc/man.config

  • 例题

若想显示 /etc/passwd 的 第11行到20行怎么办?

head -n 20 /etc/passwd | tail -n 10

虽然涉及到管道命令,但还是可以理解,即用head取出前 20 行,再用 tail 取出这20行中的后10行。

非纯文本文件 : od

  • od

[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。

3.5 修改文件时间或创建新文件 : touch

  • Linux 下面 文件的三个主要变动时间

modification time(mtime)

当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。
status time(ctime)
当该文件的“状态”(status)改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。

access time(atime)

当“该文件的内容被取用”时,就会更新这个读取时间(access)。举例来说,我们使用cat去读取/etc/man.config,就会更新该文件的atime了。

  • touch [-acdmt] 文件

[root@www ~]#touch [-acdmt] 文件

参数

-a :仅修改访问时间;

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

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

-m :仅修改 mtime ;

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

  • 范例

[root@www tmp]# cp -a ~/.bashrc bashrc

[root@www tmp]# ll bashrc; ll –time=atime bashrc; ll –time=ctime bashrc

-rw-r–r– 1 root root 176 Jan 6 2007 bashrc <==这是 mtime

-rw-r–r– 1 root root 176 Sep 25 21:11 bashrc <==这是 atime

-rw-r–r– 1 root root 176 Sep 25 21:12 bashrc <==这是 ctime

我们平时看的文件属性中,比较重要的还是 mtime 。我们经常挂心这个文件的 “内容” 是什么时候被改动过的。

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

  • Linux 隐藏权限

除了基本的 r,w,x 权限外,在 Linux 的 Ext2/Ext3文件系统下,我们课可以设置其他的系统隐藏属性,这部分可以使用 chatter 来设置,lsatter 来查看,最重要的是属性就是可以设置其不可修改的特性。让连文件所有这个都不能进行修改。

4.1 文件默认权限 : umask

  • umask

 我们知道如何新建或者是改变一个目录或文件的属性了,不过,你知道当你新建一个新的文件或目录时,它的默认权限会是什么吗?那就与umask这个玩意儿有关了。那么umask是在搞什么呢?基本上,umask 就是指定“目前用户在新建文件或目录时候的权限默认值”,那么如何得知或设置umask呢?它的指定条件以下面的方式来指定:

[root@www ~]# umask

0022   <==与一般权限有关的是后面三个数字。

[root@www ~]# umask -S

u=rwx,g=rx,o=rx

 查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种则是加入-S(Symbolic)这个参数,就会以符号类型的方式来显示出权限了。奇怪的是,怎么umask会有四组数字啊?不是只有三组吗?是没错。第一组是特殊权限用的,我们先不要理他,所以先看后面三组即可。

 在默认权限的属性上,目录与文件是不一样的。从第6章我们知道x权限对于目录是非常重要的。但是一般文件的创建则不应该有执行的权限,因为一般文件通常是用于数据的记录。当然不需要执行的权限了

因此,默认的情况如下:
若用户创建“文件”则默认没有可执行(x)权限,即只有r、w这两个选项,也就是最大为666,默认权限如下:

 -rw-rw-rw-

 若用户新建“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,即为777分,默认权限如下:

drwxrwxrwx

 要注意的是,umask的分数指的是“该默认值需要减掉的权限”。因为 r、w、x分别是 4、2、1,也就是说,当要拿掉能写的权限,就是输入 2,而如果要拿掉能读的权限,也就是 4,那么要拿掉读与写的权限,也就是6,而要拿掉执行与写入的权限,也就是3,这样了解吗?请问你,5是什么?就是读与执行的权限。

  • umask 的利用与重要性 : 专题制作

 想象一个情况,如果你跟你的同学在同一台主机上工作时,因为你们两个正在进行同一个专题,老师也帮你们两个的账号创建好了相同用户组的状态,并且将/home/class/目录作为你们两个人的专题目录。想象一下,有没有可能你所制作的文件你的同学无法编辑?果真如此的话,那就伤脑筋了。

 这个问题很常发生啊!举上面的案例来看就好了,你看一下test1的权限是几?644。意思是如果umask设定为022,那新建的数据只有用户自己具有w的权限,同用户组的人只有r这个可读的权限而已,并无法修改。这样要怎么共同制作专题?。

 所以,当我们需要新建文件给同用户组的用户共同编辑时,那么 umask 的用户组就不能拿掉2这个w的权限。umask就得要是002之类的才可以。这样新建的文件才能够是-rw-rw-r–的权限模样。那么如何设置umask呢?直接在umask后面输入002就好了。

[root@www ~]# umask 002[root@www ~]# mkdir test4

[root@www ~]# ll

-rw-rw-r– 1 root root 0 Sep 27 00:36 test3

drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4

 所以说,这个umask对于新建文件与目录的默认权限是很有关系的。这个概念可以用在任何服务器上面,尤其是未来在你架设文件服务器,如 SAMBA Server 或者是 FTP Server时,都是很重要的观念。这牵涉到你的用户是否能够将文件进一步利用的问题,不可小看了。

4.2 文件的隐藏属性chattr.lsattr

  • chattr (设置文件的隐藏属性)

[root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称

参数:

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

- :删除某一个特殊参数,其他原本存在参数则不动。

= :仅有后面接的参数。

A :当设置了 A 这个属性时,若你有访问此文件(或目录)时,他的访问时间 atime将不会被修改,可避免I/O较慢的机器过度访问磁盘。这对速度较慢的计算机有帮助。

S :一般文件是异步写入磁盘的(原理请参考第5章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该改动会“同步”写入磁盘中。

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

c :这个属性设置之后,将会自动将此文件压缩,在读取的时候将会d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份。

i :这个 i 可就很厉害了。它可以让一个文件“不能被删除、改名,设置连接也无法写入或添加数据。“对于系统安全性有相当大的帮助。只有 root 能设置此属性

s :当文件设置了 s 属性时,如果这个文件被删除,它将会被完全从这个硬盘空间中删除。

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

  • chattr 范例

请尝试到/tmp下面创建文件,并加入 i 的参数,尝试删除看看。
[root@www ~]# cd /tmp

[root@www tmp]# touch attrtest <==创建一个空文件

[root@www tmp]# chattr +i attrtest <==给予 i 的属性
[root@www tmp]# rm attrtest  <==尝试删除看看

rm: remove write-protected regular empty file `attrtest’? y

rm: cannot remove `attrtest’: Operation not permitted <==操作不许可

看到了吗?连 root 也没有办法将这个文件删除呢!赶紧解除设置!

[root@www tmp]# chattr -i attrtest

这个命令是很重要的,尤其是在系统的数据安全上面!由于这些属性是隐藏的性质,所以需要以lsattr才能看到该属性。其中,个人认为最重要的当属+i与+a这个属性了。+i可以让一个文件无法被更动,对于需要强烈的系统安全的人来说,真是相当重要的。里头还有相当多的属性是需要root才能设置的

  • lsattr (显示文件隐藏属性)

[root@www ~]# lsattr [-adR] 文件或目录

参数:

-a :将隐藏文件的属性也秀出来;

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

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

[root@www tmp]# chattr +aij attrtest

[root@www tmp]# lsattr attrtest

—-ia—j— attrtest

4.3 查看文件类型 : file

  • file 得到某文件的基本类型

[root@www ~]# file ~/.bashrc

/root/.bashrc: ASCII text <==告诉我们是 ASCII 的纯文本文件。

[root@www ~]# file /usr/bin/passwd

/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1
(SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for
GNU/Linux 2.6.9, stripped

# 执行文件的数据可就多得不得了!
[root@www ~]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: data <== 这是 data 文件。

通过这个命令,我们可以简单地先判断这个文件的格式为何。

5.命令与文件的查询

5.1 脚本文件名的查询

  • which (寻找“执行文件”)

[root@www ~]# which [-a] comman参数:

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

范例一:分别用root与一般账号查询 ifconfig 这个命令的完整文件名

[root@www ~]# which ifconfig

/sbin/ifconfig   <==用 root 可以找到正确的执行文件名

[root@www ~]# su - vbird <==切换身份成为 vbird 去!

[vbird@www ~]$ which ifconfig

/usr/bin/which: noifconfigin(/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin)  <==见鬼了!竟然一般身份账号找不到!

# 因为 which 是根据用户所设置的 PATH 变量内的目录去查找可执行文件的,所以# 不同的 PATH 设置内容所找到的命令当然不一样了。
因为 /sbin 不在 vbird 的
# PATH 中,找不到也是理所当然的。

[vbird@www ~]$ exit <==记得将身份切换回原本的 root

5.2 文件名的查找

在Linux下面也有相当优异的查找命令。通常find不很常用的,因为速度慢!通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来查找。为什么呢?因为whereis与locate是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间

  • whereis (寻找特定文件)

[root@www ~]# whereis [-bmsu] 文件或目录名

参数:

-b :只找二进制格式的文件

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

-s :只找 source 源文件

-u :查找不在上述三个选项当中的其他特殊文件

  • locate

[root@www ~]# locate [-ir] keyword

参数:

-i :忽略大小写的差异;

-r :后面可接正则表达式的显示方式范例一:找出系统中所有与 passwd 相关的文件名

[root@www ~]# locate passwd

/etc/passwd

/etc/passwd-

/etc/news/passwd.nntp

/etc/pam.d/passwd

….(下面省略)….

 这个 locate 的使用更简单,直接在后面输入“文件的部分名称”后就能够得到结果。举上面的例子来说,我输入 locate passwd,那么在完整文件名(包含路径名称)当中,只要有 passwd在其中,就会被显示出来的!这也是个很方便好用的命令,如果你忘记某个文件的完整文件名时。

 但是,这个东西还是有使用上的限制。为什么呢?你会发现使用 locate 来寻找数据的时候特别,这是因为locate寻找的数据是由已创建的数据库/var/lib/mlocate/里面的数据所查找到的,所以不用直接在去硬盘当中访问数据,当然是很快速那么有什么限制呢?就是因为它是经由数据库来查找的,而数据库的创建默认是每天执行一次(每个 distribution 都不同,CentOS 5.x 是每天更新数据库一次),所以当你新建文件后查找该文件,那么locate会告诉你“找不到”!因为必须要更新数据库。

 那能否手动更新数据库吗?当然可以,更新 locate 数据库的方法非常简单,直接输入“updatedb”就可以了!updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,嗌然后再去硬盘里面进行查找文件名的操作,最后就更新整个数据库文件 !
 因为 updatedb会去查找硬盘,所以当你执行updatedb时,可能会等待数分钟的时间。

 updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件。

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

6. 权限与命令间的关系

  • 让用户能进入某目录成为 “可工作目录” 的基本权限

可使用的命令:例如cd等切换工作目录的命令。

目录所需权限:用户对这个目录至少需要具有x的权限。

额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要r的权限。

  • 用户在某个目录内读取一个文件的基本权限

可使用的命令:例如 3.1 谈到的 cat, more, less 等。

目录所需权限:用户对这个目录至少需要具有x权限。

文件所需权限:用户对文件至少需要具有r的权限才行!

  • 让用户可以修改一个文件的基本权限

可使用的命令:例如nano或未来要介绍的vi编辑器等。

目录所需权限:用户在该文件所在的目录至少要有x权限。

文件所需权限:用户对该文件至少要有 r, w 权限。

  • 让一个用户可以创建一个文件的基本权限

目录所需权限:用户在该目录要具有w, x 的权限,重点在 w 。

  • 让用户进入某目录并执行该目录下的某个命令的基本权限是什么

目录所需权限:用户在该目录至少要有x的权限。
文件所需权限:用户在该文件至少需要有x的权限。

  • 范例

让一个用户vbird能够进行“cp/dir1/file1/dir2”的命令时,请说明dir1, file1, dir2的最小所需权限。

答:执行cp时,vbird要能够读取源文件,并且写入目标文件。所以应参考上述第二点与第四点的说明,因此各文件/目录的最小权限应该是:

◆ dir1:至少需要有 x 权限;

◆ file1:至少需要有 r 权限;

◆ dir2:至少需要有 w, x 权限。

说明

整理笔记参考了 《鸟哥的Linux私房菜》 一书。这本书我是买的京东阅读的正版电子书籍。

如果不想买书看的话可以直接戳这里进入鸟哥Linux私房菜的线上博客 : http://linux.vbird.org/。请大家支持正版!!

至于笔记中的命令我是都敲过一遍的并进行了理解,并不是单纯的复制粘贴呦!

CATALOG
  1. 1. 目录
  2. 2. 1. 目录与路径
    1. 2.1. 1.1 相对路径与绝对路径
    2. 2.2. 1.2 目录的相关操作
    3. 2.3. 1.3 常见处理目录命令
    4. 2.4. 1.4 执行文件路径变量 $PATH
  3. 3. 2. 文件与目录管理
    1. 3.1. 2.1 查看文件与目录 : ls
    2. 3.2. 2.2 复制、删除与移动 : cp , rm , mv
    3. 3.3. 2.3 取得文件名与目录名称
  4. 4. 3. 文件内容查阅
    1. 4.1. 3.1 直接查看文件内容 : cat , tac , nl
    2. 4.2. 3.2 可翻页查看 : more , less
    3. 4.3. 3.3 数据选取 : head , tail
    4. 4.4. 非纯文本文件 : od
    5. 4.5. 3.5 修改文件时间或创建新文件 : touch
  5. 5. 4.文件目录的默认权限与隐藏权限
    1. 5.1. 4.1 文件默认权限 : umask
    2. 5.2. 4.2 文件的隐藏属性chattr.lsattr
    3. 5.3. 4.3 查看文件类型 : file
  6. 6. 5.命令与文件的查询
    1. 6.1. 5.1 脚本文件名的查询
    2. 6.2. 5.2 文件名的查找
  7. 7. 6. 权限与命令间的关系
    1. 7.1. 说明