首页 > 系统服务 > 详细

Linux学习笔记02:文件与目录管理

时间:2019-02-14 16:38:18      阅读:160      评论:0      收藏:0      [点我收藏+]

一、目录与路径

1、相对路径与绝对路径

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

         相对路径:路径的写法不是由\写起,指相对于目前工作目录的路径

         对于文件名的正确性来说,绝对路径的正确度要好。如果是在写程序(shell scripts)来管理系统的条件下,务必使用绝对路径的写法。如果使用相对路径在程序中,则可能由于执行的工作环境不同,导致一些问题的发生。

2、目录的相关操作

         一些特殊目录符号如下:

         .                 代表此层目录

         ..                代表上一层目录

         -                 代表前一个工作目录

         ~                代表“目前用户身份”所在的主文件夹

         ~account 代表account这个用户的主文件夹

         一些常用的目录处理命令如下:

         cd              切换目录

         pwd           显式当前目录

         mkdir        新建一个新的目录

         rmdir        删除一个空的目录

         cd(切换目录)

         cd [相对路径或绝对路径]

         cd是Change Directory的缩写,是用来切换工作目录的命令。用户刚登录时,会进入自己的主文件夹(~),如果仅输入cd时,代表的就是“cd ~”的意思。

         Linux的默认命令行模式(bash shell)具有文件补齐功能,可以利用[Tab]按键快速完整地输入目录,可以避免按错键盘输入错字。

         pwd(显式目前所在的目录)

         pwd [-P]

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

         pwd是Print Working Directory的缩写,也就是显示目前所在目录的命令。对于link文件,-P参数可以让我们取得正确的目录名称,而不是以连接文件的路径来显示的。

         mkdir(新建新目录)

         mkdir [-mp] 目录名称

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

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

         rmdir(删除空的目录)

         rmdir [-p] 目录名称

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

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

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

PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开,每个目录是有“顺序”之分的。可以通过“echo $PATH”来查看当前系统中包含的PATH列表。一般用户的PATH中,并不包含任何sbin目录存在。如果想让某个目录加入PATH环境变量,可以执行“$PATH=”$PATH”:/dir”。

4、注意

         ① 不同用户身份默认的PATH不同,默认能够随意执行的命令也不相同;

         ② PATH是可以修改的,所以一般用户还是可以通过修改PATH来执行某些位于/sbin或/usr/sbin下的命令来查询的;

         ③ 使用绝对路径或相对路径直接指定某个命令的文件名执行,会比查询PATH来得准确;

         ④ 命令应该要放置到正确的目录下,执行才会比较方便;

         ⑤ 本目录(.)最好不要放到PATH当中。

 

二、文件与目录管理

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号码

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

         -n:列出UID与GID,而非用户与用户组的名称

         -r:将排序结果反向输出,例如文件名有小到大,反向则为由大到小

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

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

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

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

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

         --color=always:显示颜色

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

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

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

         cp(复制文件或目录)

         cp [-adfilprsu] source destination

         cp [options] source1 source2 source3 … directory

         参数:

         -a:相当于-pdr的意思

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

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

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

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

         -p:连同文件的属性一起复制过去,而非使用默认属性

         -r:递归持续复制,用于目录的复制行为;

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

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

         如果源文件有两个以上,则最后一个目的文件一定要是目录才行。

         在默认的条件中,cp的源文件与目的文件的权限是不同的,目的文件的所有者通常会是命令操作者本身。因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件,例如密码文件以及一些配置文件,就不能直接以cp来复制,而必须要加上-a或者是-p等可以完整复制文件权限的参数才行。

         对于无修改文件所有者与用户组的普通用户来说,虽然能够复制源文件的相关权限与时间等属性,但是与所有者、用户组相关的,原本普通用户无法进行的操作,即使加上-a参数,也是无法达成完整复制权限的。

         rm(移除文件或目录)

         rm [-fir] 文件或目录

         参数:

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

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

         -r:递归删除(非常危险的参数!!!)

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

         mv [-fiu] source destination

         mv [options] source1 source2 source3 … directory

         如果有多个源文件或目录,则最后一个目标文件一定要是目录

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

         basename /etc/sysconfig/network ==> network 取得文件名

         dirname /etc/sysconfig/network ==> /etc/sysconfig 取得目录名

 

三、文件内容查阅

         如果要查阅一个文件的内容时,可以用到以下命令:

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

         tac:从最后一行开始显示

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

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

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

         head:只看头几行

         tail:只看结尾几行

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

1、直接查看文件内容

         直接查看文件内容可以用cat、tac、nl这几个命令。

         cat(concatenate)

         格式:cat [-AbEnTv] 文件

         参数:

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

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

         -E:将结尾的断行字符$显示出来(断行字符在Windows、Linux中不太相同,Windows中的断行字符是^MS);

         -n:打印出行号,连同空白行也会有行号,与-b的参数不同;

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

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

         tac(反向列示)

         格式:tac 文件

         tac刚好是将cat反写过来,所以它的功效就跟cat相反。

         nl(添加行号打印)

         格式:nl [-bnw] 文件

         参数:

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

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

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

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

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

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

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

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

         nl可以将输出的文件内容自动加上行号,其默认的结果与cat –n有点不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动补0等的功能。

2、可翻页查看

         more(一页一页翻动)

         在more这个程序运行的过程当中,有如下按键可以选择:

         空格键(Space):代表向下翻一页;

         Enter:代表向下滚动一行;

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

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

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

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

         less(一页一页翻动)

         less的用法比起more又更有弹性,在使用more的时候,我们并没有办法向前面翻,只能往后面看,但若使用了less时,就可以使用上下等按键的功能来往前往后翻看文件。可以输入的命令有:

         空格键(Space):向下翻动一页;

         [PageDown]:向下翻动一页;

         [PageUp]:向上翻动一页;

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

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

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

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

         q:离开less这个程序。

3、数据选取

         head与tail都是以“行”为单位进行数据选取的。

         head(取出前面几行)

         格式:head [-n number] 文件

         参数:

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

         若number为-a,代表列出前面的所有行数,但不包括后面的a行。

         tail(取出后面几行)

         格式:tail [-n number] 文件

         参数:

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

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

         若number为+a,代表该文件从a行以后都会被列出来,包括第a行。

4、非纯文本文件:od

         格式:od [-t TYPE] 文件

         参数:

         -t:后面可以接各种“类型”的输出,例如:

                   a:利用默认的字符来输出;

                   c:使用ASCII字符来输出;

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

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

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

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

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

         每个文件在Linux下面都会记录许多的时间参数,有三个主要的变动时间,其意义分别为:

         modification time(mtime):当该文件的“内容数据”更改时,就会更新这个时间。

         status time(ctime):当该文件的“状态”改变时,就会更新这个时间。

         access time(atime):当“该文件的内容被取用”时,就会更新这个读取时间。

         在默认的情况下,ls显示出来的是该文件的mtime,也就是这个文件的内容上次被更改的时间。

         有时系统时间会出现错误的情况,如果要修改错误时间,可以使用touch命令。

         格式:touch [-acdmt] 文件

         参数:

         -a:仅修改访问时间;

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

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

         -m:仅修改mtime;

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

         touch命令最常用的情况是创建一个空的文件、将某个文件日期改为目前时间(mtime与atime)。

 

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

1、文件默认权限:umask

         umask就是指定目前用户在新建文件或目录时候的权限默认值。

         查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种是加入-S(Symbolic)这个参数,就会以符号类型的方式显示出权限了。umask第一组是特殊权限用的。

         默认情况下,若用户创建“文件”,则默认没有可执行(x)权限,即只有rw这两个选项,即为-rw-rw-rw-(666);若用户创建“目录”,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即为drwxrwxrwx(777)。

         umask的分数指的是“该默认值需要减掉的权限”。例如0022,表示user没有拿掉任何权限,group与others的权限被拿掉了2(也就是w这个权限)。那么当用户新建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--;新建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x。

         在默认的情况中,root的umask会拿掉比较多的属性,root的umask默认是022,这是基于安全的考虑,至于一般身份用户,通常他们的umask默认是002,即保留同用户组的写入权利。

2、文件隐藏属性chattr,lsattr

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

         格式:chattr [+-=] [ASacdistu] 文件或目录名称

         参数:

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

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

         =:仅有后面接的参数。

         A:当设置了A属性时,若访问文件/目录时,访问时间atime将不会被修改,可避免I/O较慢的机器过度访问磁盘。

         S:加上S属性时,当进行任何文件的修改,该改动会“同步”写入磁盘中。

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

         c:设置c属性后,将会自动将此文件压缩,在读取的时候将会自动解压缩,但是在存储的时候,将会先进行压缩后再存储。

         d:当dump程序被执行时,设置d属性将可使该文件/目录不会被备份。

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

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

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

         lsattr(显示文件隐藏属性)

         lsattr [-adR] 文件或目录

         参数:

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

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

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

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

    l  Set UID

         当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID,简称为SUID的特殊权限。SUID有这样的限制与功能:

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

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

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

         4) 执行者将具有改程序所有者(owner)的权限。

         SUID仅可用在二进制程序上,不能够用在shell script上面。这是因为shell script只是将很多的二进制执行文件调度来执行而已。所以SUID的权限部分,还是要看shell script调用进来的程序的设置,而不是shell script本身。SUID对于目录也是无效的。

    l  Set GID

         s在用户组的x时则称为Set GID,SGID。

         与SUID不同的是,SGID可以针对文件或目录来设置。如果是对文件来说,SGID有如下功能:

         1) SGID对二进制程序有用;

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

         3) 执行者在执行的过程中将会获得该程序用户组的支持。

         当一个目录设置了SGID的权限后,它将具有如下的功能:

         1) 用户若对于此目录具有r与x的权限时,该用户能够进入此目录;

         2) 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组;

         3) 若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。

    l  Sticky Bit

    Sticky Bit(SBIT)目前只针对目录有效。SBIT对于目录的作用是:

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

         2) 当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件。

         例如,当甲这个用户于A目录是具有用户组或其他人的身份,并且拥有该目录w的权限,这表示甲用户对该目录内任何人新建的目录或文件均可进行删除、重命名、移动等操作。不过,如果将A目录加上了SBIT的权限项目时,则甲只能够针对自己创建的文件或目录进行删除、重命名、移动等操作,而无法删除他人的文件。

    l  SUID/SGID/SBIT权限设置

         数字形态更改权限的方式为三个数字的组合,如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了:4为SUID,2为SGID,1为SBIT。

         如果user、group以及others都没有x这个可执行的标志,当分配相对应权限时,会显示S、T,表示权限为空。

         除了数字法之外,也可以通过符号法来处理。其中SUID为u+s,而SGID为g+s,SBIT为o+t。

4、查看文件类型:file

         可以通过file命令查看某个文件的基本数据,且其中有没有使用到动态函数库(share library)。

 

五、命令与文件的查询

1、脚本文件名的查询

         which(寻找“执行文件”)

         格式:which [-a] command

         参数:

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

         这个命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。所以,重点是找出执行文件而已,且which后面接的是完整文件名。若加上-a参数,则可以列出所有的可以找到的同名执行文件,而非仅显示第一个而已。

2、文件名的查找

         通常find不很常用的,因为速度慢!通常我们我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来查找。因为whereis和locate是利用数据库来查找数据,所以相当快,而且没有实际查询硬盘,比较节省时间。

         whereis(寻找特定文件)

         格式:whereis [-bmus] 文件或目录名

         参数:

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

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

         -s:只找source源文件

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

         Linux系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用whereis或者是下面要说的locate时,会找到已经被删除掉的文件!而且也找不到最新的刚才创建的文件。

         locate

         格式:locate [-ir] keyword

         参数:

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

    -r:后面可接正则表达式的显示方式。

    locate寻找的数据是由已创建的数据库/var/lib/mlocate/里面的数据所查找到的,所以不用直接再去硬盘当中访问数据。数据库的创建默认是每天执行一次(每个distribution都不同),所以当你新建文件后查找该文件,那么locate会告诉你“找不到”,因为必须要更新数据库。

    updated命令会去读取/etc/updated.conf这个配置文件的设置,然后再去硬盘里进行查找文件名的操作,最后就更新整个数据库文件了。

    find

    格式: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还要新的文件名。

    2)、与用户或用户组有关的参数:

         -uid n:n为UID,是记录在/etc/passwd里面与账号名称对应的数字;

         -gid n:n为GID,记录在/etc/group中;

         -user name:name为用户账号名称;

         -group name:name为用户组名;

         -nouser:寻找文件的所有者不存在/etc/passwd中的文件;

         -nogroup:寻找文件的所有用户组不存在/etc/group中的文件。

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

         -name filename:查找文件名为filename的文件;

         -size [+-] SIZE:查找比SIZE还好大(+)或小(-)的文件;

         -type TYPE:查找文件的类型为TYPE的;

         -perm mode:查找文件权限“刚好等于”mode的文件;

         -perm -mode:查找文件权限“必须要全部包括mode的权限”的文件;

         -perm +mode:查找文件权限“包含任一mode的权限”的文件。

    4)、其他可进行的操作:

         -exec command:command为其他命令,-exec后面可再接其他的命令来处理查找到的结果;

         -print:将结果打印到屏幕上,这个操作是默认操作。

         例如:find / -perm +7000 -exec ls -l {} \;

         1) {}代表的是“由find找到的内容,find的结果会被放置在{}位置中”;

         2) -exec一直到“\;”是关键字,代表find额外命令的开始(-exec)到结束(\;),在这中间的就是find命令内的额外命令,在本例中就是“ls -l {}”;

         3) 因为“;”在bash环境下是有特殊意义的,因此利用反斜杠来转义。

 

六、权限与命令间的关系

         1) 让用户能进入某目录成为“可工作目录”的基本权限是什么

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

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

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

         2) 用户在某个目录内读取一个文件的基本权限是什么

         可使用的命令:例如cat、more、less等

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

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

         3) 让用户可以修改一个文件的基本权限是什么

         可使用的命令:例如nano或vi编辑器等

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

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

         4) 让一个用户可以创建一个文件的基本权限是什么

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

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

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

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

Linux学习笔记02:文件与目录管理

原文:https://www.cnblogs.com/fantastic-clouds/p/10375296.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!