Linux学习笔记02:文件与目录管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux学习笔记02:文件与目录管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含19191字,纯文字阅读大概需要28分钟。
内容图文
一、目录与路径
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:文件与目录管理全部内容,希望文章能够帮你解决Linux学习笔记02:文件与目录管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。