[关闭]
@WillireamAngel 2018-05-21T02:56:35.000000Z 字数 7991 阅读 2073

Linux档案与目录管理

Linux


  1. 目录与路径
    1.1 绝对路径与相对路径
    相对路径:相对目录,适合程序
    绝对路径:绝对路径的正确度要比较好
    1.2 目录的相关操作
    .代表此层目录
    .. 代表上一层目录
    - 代表前一个工作目录
    ~ 代表『目前使用者身份』所在的家目录
    ~account 代表account 这个使用者的家目录(account是个帐号名称)
    处理目录的命令:
    cd:(Change Directory)变换目录 cd ~=cd,均返回当前账号家目录
    pwd:(Print Working Directory)显示目前的目录
    使用pwd -P,查看原始目录
    Linux的连接档:http://blog.csdn.net/qingsong_xu/article/details/49454965
    硬链接:同一个位置有多个链接,全部删除才会删除文件,存在于同一个磁盘分区中,Inode相同;软链接:类似于快捷方式,删除对文件无影响,Inode不同。
    Inode:文件识别信息
    Linux的inode的理解:https://www.cnblogs.com/itech/archive/2012/05/15/2502284.html#undefined
    mkdir:建立一个新的目录
  1. mkdir [-mp]目录名称
  2. mkdir -m 权限号码 目录名称(强制设置权限)
  3. mkdir -p 连续目录(强制建立补全父目录)

rmdir:删除一个空的目录,非空目录(本目录或上层目录包括其它文件/目录)
rmdir -P:删除所有非空目录(含父目录)
1.3 关于执行文件路径的变量:PATH`:可显示usr可查询路径,可执行环境变量,对于无权访问的命令,可通过绝对路径执行。 添加$PATH:PATH="$PATH":[文件夹路径]
查询文件路径或粗略查询路径:find or locate https://www.cnblogs.com/ccode/p/4033088.html
e.g.

  1. [root@localhost ~]# find / -name httpd.conf
  2. find: ‘/run/user/1000/gvfs’: Permission denied

Linux 复制粘贴快捷键: ctrl +insert(copy);shift + insert(paste)
注意:由于使用PATH查询的目录是经常使用的命令,为了安全起见,不建议将‘.’加入PATH查询目录
- 不同身份使用者预设的PATH不同,预设能够随意执行的指令也不同(如root与dmtsai);
- PATH是可以修改的;
- 使用绝对路径或相对路径直接指定某个指令的档名来执行,会比搜寻PATH来的正确;
- 指令应该要放置到正确的目录下,执行才会比较方便;
- 本目录(.)最好不要放到PATH当中。
2. 文件与目录管理
2.1 查看文件与目录:ls
常用的参数有:-a,-d,-l

  1. [root@study ~]# ls [-aAdfFhilnrRSt]档名或目录名称..
  2. [root@study ~]# ls [--color={never,auto,always}]档名或目录名称..
  3. [root@ study ~]# ls [--full-time]档名或目录名称..

2.2 复制、删除与移动:cp、rm、mv(可直接rename
2.2.1 cp
常用的参数有:-a(特性完全复制),-i,-p,-r(可复制目录,文件目录权限可能改变)

  1. [root@study ~]# cp [-adfilprsu]来源档(source)目标档(destination)
  2. [root@study ~]# cp [options] source1 source2 source3 .... directory

直接cp不加任何参数是复制的是源文件,而不是连接文件的属性
cp可以将多个文件复制到一个文件夹,最后一个一定是文件夹
2.2.2 rm

  1. [root@study ~]# rm [-fir]档案或目录
  2. 参数:-f :就是force 的意思,忽略不存在的档案,不会出现警告讯息;
  3. -i :互动模式,在删除前会询问使用者是否动作
  4. -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

\rm可以忽略alias的指定参数
2.2.3 mv

  1. [root@study ~]# mv [-fiu] source destination
  2. [root@study ~]# mv [options] source1 source2 source3 .... directory
  3. 选项与参数:
  4. -f force 强制的意思,如果目标档案已经存在,不会询问而直接覆盖;
  5. -i :若目标档案(destination) 已经存在时,就会询问是否覆盖!
  6. -u :若目标档案已经存在,且source 比较新,才会更新(update)

2.3 取得路径的文件名与目录名称
basename:文件名
dirname:目录名
3. 文件内容查询

  1. cat 由第一行开始显示档案内容
  2. tac 从最后一行开始显示,可以看出tac cat 的倒着写!
  3. nl 显示的时候,顺道输出行号!
  4. more 一页一页的显示档案内容
  5. less more 类似,但是比more 更好的是,他可以往前翻页!
  6. head 只看头几行
  7. tail 只看尾巴几行
  8. od 以二进位的方式读取档案内容!

3.1 直接查看文件内容
3.1.1 cat:concatenate

  1. cat [-AbEnTv]

参数:
-A :相当于-vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字元$ 显示出来;
-n :列印出行号,连同空白行也会有行号,与-b 的选项不同;
-T :将[tab] 按键以^I 显示出来;
-v :列出一些看不出来的特殊字符。
其中,cat -A可以显示出空格和TAB的差别
3.1.2 tac(反向列示)
3.1.3 nl(添加行号打印)

  1. [root@study ~]# nl [-bnw]档案

参数:
-b :指定行号指定的方式,主要有两种:
-ba :表示不论是否为空行,也同样列出行号(类似cat -n);
-bt :如果有空行,空的那一行不要列出行号(预设值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加0 ;
-n rz :行号在自己栏位的最右方显示,且加0 ;
-w :行号栏位的占用的字元数。
nl可自动加上行号,相比于cat -n具有更多的显示设计
3.2 可翻页查看
3.2.1 more(一页一页翻动)
快捷键:
空白键(space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f :立刻显示出档名以及目前显示的行数;
q :代表立刻离开more ,不再显示该档案内容。
b 或[ctrl]-b :代表往回翻页,不过这动作只对档案有用,对管线无用。
3.2.2 less(一页一页翻动)
快捷键:
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻(与/ 或? 有关!)
N :反向的重复前一个搜寻(与/ 或? 有关!)
g :前进到这个资料的第一行去;
G :前进到这个资料的最后一行去(注意大小写);
q :离开less 这个程式;
3.3 数据选取
3.3.1 head(取出前面几行)

  1. 如果后面100行的资料都不列印,只列印/etc/man_db.conf的前面几行,该如何是好?
  2. [root@study ~]# head -n -100 /etc/man_db.conf

3.3.2 tail(取出后面几行)

  1. [root@study ~]# tail [-n number]档案

参数:
-n :后面接数字,代表显示几行的意思(预设中显示十行)
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
取出第十行到第二十行的操作:

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

3.4 非纯文本文件:od

  1. 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 ;
ASCII码对照实例:

  1. echo password | od -t oCc

echo可以在萤幕上面显示任何资讯,而这个资讯不由萤幕输出,而是传给od去继续处理!就可以得到ASCII code对照
3.5 修改档案时间或建置新档: touch
时间参数:
modification time (mtime):文件内容资料变更
status time (ctime):权限与属性变更
access time (atime):文件内容读取

  1. [root@study ~]# touch [-acdmt]档案

参数:
-a :仅修订access time;
-c :仅修改档案的时间,若该档案不存在则不建立新档案;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用--date="日期或时间"
-m :仅修改mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
备注:ll=ls -l
touch的主要应用:创建空的文件、修改文件日期为当前日期 (mtime与atime)
4. 文件与目录的默认权限与隐藏权限
修改属性:'chown',修改权限:'chmod'
4.1 文件默认权限:umask
创建文件默认权限为:-rw-rw-rw-
创建目录默认权限为:drwxrwxrwx

  1. [willireamangel@localhost ~]$ umask
  2. 0002

'umask'的分数指的是该预设值需要减掉的权限.r、w、x分别是4、2、1分。
4.2 文件隐藏属性chattr,lsattr
4.2.1 chattr(设置文件的隐藏属性)

  1. [root@study ~]# chattr [+-=][ASacdistu]档案或目录名称

选项:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
重要参数:
a :当设定a 之后,这个档案将只能增加资料,而不能删除也不能修改资料,只有root 才能设定这属性
i :i 可以让一个档案『不能被删除、改名、设定连结也无法写入或新增资料!』(即使root也无权限修改),对于系统安全性有相当大的助益!只有root 能设定此属性
4.2.2 lsattr(显示文件隐藏属性)

  1. [root@study ~]# lsattr [-adR]档案或目录

参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的资料也一并列出来!
利用chattr设置的权限,可以利用lsattr显示出来
4.3 文件特殊权限:SUID、SGID、SBIT
4.3.1 Set UID
功能:
- SUID 权限仅对二进位程式(binary program)有效;
- 执行者对于该程式需要具有x 的可执行权限;
- 本权限仅在执行该程式的过程中有效(run-time);
- 执行者将具有该程式拥有者(owner) 的权限。
可以类比于暂时利用root权限的操作,SUID仅可用在binary program上,不能够用在shell script上面。
4.3.2 Set GID
当s 标志在档案拥有者的x 项目为SUID,s 在群组的x 时则称为Set GID。
功能:
- SGID 可以针对档案或目录来设定
- SGID 对二进位程式有用;
- 程式执行者对于该程式来说,需具备x 的权限;
- 执行者在执行的过程中将会获得该程式群组的支援!
具体功能:
- 使用者若对于此目录具有r 与x 的权限时,该使用者能够进入此目录;
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若使用者在此目录下具有w的权限(可以新建档案),则使用者所建立的新档案,该新档案的群组与此目录的群组相同。
4.3.3 Sticky Bit
Sticky Bit, SBIT 目前只针对目录有效,对于档案没有效果
功能:
- 当使用者对于此目录具有w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下建立档案或目录时,仅有自己与root 才有权力删除该档案。
e.g. 如果将A目录加上了SBIT的权限项目时,则甲只能够针对自己建立的档案或目录进行删除/更名/移动等动作,而无法删除他人的档案。

SUID&SGID&SBIT权限设置:
4 为SUID 2 为SGID 1 为SBIT
符号法:SUID=u+s SGID=g+s SBIT=o+t
SUID 不是用在目录上,而SBIT 不是用在档案上的
4.4 观察档案类型:file
5. 命令与文件的查询
5.1 脚本文件名的查询
which(寻找'执行文件')

  1. [root@study ~]# which [-a] command

参数:
-a :将所有由PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
这个指令是根据『PATH』这个环境变数所规范的路径,去搜寻『执行档』的档名~所以,重点是找出『执行档』
5.2 档案档名的搜寻
5.2.1 whereis(寻找特定文件)

  1. whereis [-bmsu]档案或目录名

参数:
-l :可以列出whereis 会去查询的几个主要目录而已
-b :只找binary 格式的档案
-m :只找在说明档manual 路径下的档案
-s :只找source 来源档案
-u :搜寻不在上述三个项目当中的其他特殊档案
whereis按照数据库里的参数进行文件的查找,所有均以数据库为准
5.2.2 locate

  1. [root@study ~]# locate [-ir] keyword

参数:
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的档案数量
-l :仅输出几行的意思,例如输出五行则是-l 5
-S :输出locate 所使用的资料库档案的相关资讯,包括该资料库纪录的档案/目录数量等
-r :后面可接正规表示法的显示方式
locate是按照数据库进行查询,有一定更新时延,centos是每天更新一次
updatedb:根据/etc/updatedb.conf 的设定去搜寻系统硬碟内的档名,并更新/var/lib/mlocate 内的资料库档案;
locate:依据/var/lib/mlocate 内的资料库记载,找出使用者输入的关键字档名。
5.2.3 find

  1. [root@study ~]# find [PATH] [option] [action]

选项与参数:
- 与时间有关的选项:共有-atime, -ctime 与-mtime ,以-mtime 说明
-mtime n :n 为数字,意义为在n 天之前的『一天之内』被更动过内容的档案;
-mtime +n :列出在n 天之前(不含n 天本身)被更动过内容的档案档名;
-mtime -n :列出在n 天之内(含n 天本身)被更动过内容的档案档名。
-newer file :file 为一个存在的档案,列出比file 还要新的档案档名
- 与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的帐号ID,亦即UID ,这个UID 是记录在
/etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是群组名称的ID,亦即GID,这个GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者帐号名称喔!例如dmtsai
-group name:name 为群组名称喔,例如users ;
-nouser :寻找档案的拥有者不存在/etc/passwd 的人!
-nogroup :寻找档案的拥有群组不存在于/etc/group 的档案!
当你自行安装软体时,很可能该软体的属性当中并没有档案拥有者,
这是可能的!在这个时候,就可以使用-nouser 与-nogroup 搜寻。
- 与档案权限及名称有关的参数:
-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 ,亦即-perm /755 时,但一个档案属性为-rw-------
也会被列出来,因为他有-rw.... 的属性存在!
- 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果列印到萤幕上,这个动作是预设动作!
权限与指令的关系
一、让使用者能进入某目录成为『可工作目录』的基本权限为何:
可使用的指令:例如cd 等变换工作目录的指令;
目录所需权限:使用者对这个目录至少需要具有x的权限
额外需求:如果使用者想要在这个目录内利用ls 查阅档名,则使用者对此目录还需要r 的权限。
二、使用者在某个目录内读取一个档案的基本权限为何?
可使用的指令:例如本章谈到的cat, more, less等等
目录所需权限:使用者对这个目录至少需要具有x 权限;
档案所需权限:使用者对档案至少需要具有r的权限才行!
三、让使用者可以修改一个档案的基本权限为何?
可使用的指令:例如nano或未来要介绍的vi编辑器等;
目录所需权限:使用者在该档案所在的目录至少要有x 权限;
档案所需权限:使用者对该档案至少要有r, w权限
四、让一个使用者可以建立一个档案的基本权限为何?
目录所需权限:使用者在该目录要具有w,x的权限,重点在w啦!
五、让使用者进入某目录并执行该目录下的某个指令之基本权限为何?
目录所需权限:使用者在该目录至少要有x 的权限;
档案所需权限:使用者在该档案至少需要有x 的权限

范例一:

特殊权限

特殊的地方有{} 以及\; 还有-exec 这个关键字,这些东西的意义为:
{} 代表的是『由find 找到的内容』,如上图所示,find 的结果会被放置到{} 位置中;
-exec 一直到\; 是关键字,代表find 额外动作的开始(-exec) 到结束(\;) ,在这中间的就是find 指令内的额外动作。在本例中就是『 ls -l {} 』啰!因为『 ; 』在bash 环境下是有特殊意义的,因此利用反斜线来跳脱。

范例二:
找出/etc 底下,档案容量大于50K 且档案所属人不是root 的档名,且将权限完整的列出(ls -l);

  1. find /etc -size +50k -a ! -user root -exec ls -ld {} \;

or

  1. find /etc -size +50k -a ! -user root -type f -exec ls -l {} \;

上面两式均可!注意到! ,那个!代表的是反向选择,亦即『不是后面的项目』之意!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注