Linux基础学习笔记-文件与目录管理

前言

以下是关于Linux文件与目录管理的内容。

Linux文件与目录管理

目录与路径

绝对路径和相对路径的写法并不相同;

相对路径和绝对路径

  • 绝对路径:一定是从根目录写起的准确文件位置
  • 相对路径:不是从根目录写起,是相对于当前工作目录的路径

目录的相关操作

特殊符号

. 代表此层目录

.. 代表上一层目录

- 代表前一个工作目录

~ 代表当前使用者的家目录

~account 代表account这个使用者的家目录

cd

表示change directory,是最基础的命令了,在此不必多说:

1
2
3
4
cd    默认进入用户自己的家目录
cd .. 进入上层目录
cd ~ 进入家目录
cd - 回到刚刚的工作目录

pwd

print working directory,就是显示出目前所在的目录,加上-P选项可以取得正确的目录名称,而不是以连接文件的路径来显示:

1
2
3
4
5
[gard3nia@localhost ~]$ cd /var/mail
[gard3nia@localhost mail]$ ls
gard3nia root test1 xl
[gard3nia@localhost mail]$ pwd -P
/var/spool/mail

mkdir

创建新目录

1
2
3
mkdir [-mp] 目录名称
-m 设置文件的权限,直接设置,不需要看umask
-p 帮助你直接将所需要的目录递归建立起来

直接动动手就行了:

1
2
3
4
5
6
7
8
9
10
11
12
13
[gard3nia@localhost ~]$ mkdir -m 711 haha
[gard3nia@localhost ~]$ ls -l
total 24
-rw-rw-r--. 1 gard3nia gard3nia 16685 Nov 10 21:01 1.txt
drwxrwxr-x. 2 gard3nia gard3nia 64 Nov 10 09:00 hack
drwx--x--x. 2 gard3nia gard3nia 6 Nov 16 11:16 haha
drwxrwxr-x. 3 gard3nia gard3nia 48 Nov 9 03:41 test1
drwxr-xr-x. 78 root root 4096 Oct 27 23:18 vulhub

[gard3nia@localhost ~]$ mkdir -p test1/test2/test3
[gard3nia@localhost ~]$ ls
1.txt hack haha test1 vulhub
[gard3nia@localhost ~]$ cd test1/test2/test3/

notes

-p 这个选项非常好用,直接递归建立空文件夹,如果没有这个选项,我们只能一个一个建立文件夹

如果不使用-m选项给目录赋权限,则默认的新建目录的权限就和umask有关

rmdir

删除空目录,有一个选项-p,用于连同上层的空目录一起删除

1
2
3
[gard3nia@localhost ~]$ rmdir -p test1/test2/test3/
[gard3nia@localhost ~]$ ls
1.txt hack haha vulhub

如果想要将目录下面的东西全部都删除,只能采用rm -r

$PATH

当我们执行一个命令的时候,例如ls,系统会依照PATH的设置去每个PATH定义的目录下寻找文件名为ls的可执行文件,echo $PATH即可看到加入环境变量的路径

1
2
[gard3nia@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gard3nia/.local/bin:/home/gard3nia/bin

需要新增环境变量:

1
PATH="${PATH}:新加入的路径"

notes:

  • 不同用户的默认PATH不同,默认能执行的命令也不同
  • PATH可修改
  • 本目录不要加入到PATH中

文件与目录管理

文件与目录查看:ls

参数:

1
2
3
4
5
6
7
8
9
10
-a 全部文件,连同隐藏文件
-A 全部文件,连同隐藏文件,但是不包括.和..
-d 仅仅列出目录本身,而不是列出目录内的文件数据
-f 直接列出结果,不进行排序
-h 文件大小以GB,KB等等列出,可读性强
-i 列出inode号码
-l 详细信息显示,包括文件的属性与权限等数据
-n 列出UID和GID取代名称
-R 连同子目录的内容一起显示出来,该目录下面的所有文件都会被列出
--full-time 完整时间模式输出

具体的其他一些不经常使用的参数查看–help即可

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

cp

复制文件

1
2
3
4
5
6
7
8
9
10
cp 源文件 目标文件
-a 相当于-dr --preserve=all的意思
-d 若源文件为链接文件的属性,则复制链接文件属性而非文件本身
-f 为强制的意思,如果目标文件已经存在并且无法打开,则删除以后再尝试
-i 在目标文件已经存在的时候,覆盖时会先进行询问
-p 连同文件的属性一同复制过去,而非使用默认属性(备份)
-r 递归复制,用于目录的复制操作
-s 复制成为链接文件,即快捷方式
-u 目标文件比源文件旧才更新目标文件,或者目标文件不存在的情况下才复制
--preserve=all 除了-p的属性,还加入了SELinux属性

notes:

cp这个命令,不同的执行者执行这个命令会产生不同的结果,在默认情况下,cp的源文件与目标文件的权限是不同的,目标文件的拥有者通常会是命令操作者本身,所以我们在进行备份的时候,就不能直接以cp来复制,必须要加上-a或者-p这样的参数来保持原来的属性不变

rm

移除文件或者目录

1
2
3
-f force强制删除
-i 互动模式
-r 递归删除,用于目录的删除,危...

mv

移动文件与目录,或者重命名

1
2
3
4
mv 源文件 目标文件
-f force强制的意思,如果目标文件已经存在,则直接复覆盖
-i 目标文件已经存在的时候,就会询问是否覆盖
-u 如果目标文件已经存在,而且source比较新,才会更新

用来重命名很好用…

文件内容查看

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

tac 从最后一行开始显示

nl 显示的时候,同时输出行号

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

less 和more类似,但是可以向前翻页

head 只看前几行

tail 只看后几行

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

touch 创建新文件

  1. cat
1
2
-b 打印出行号,不连同空白行
-n 打印出行号,连同空白行一起

2.tac

1
cat反过来输出

3.nl

1
添加行号打印

4.more,less

1
一页一页翻动

5.head,tail 数据截取

1
2
head -n number 文件名
tail -n number 文件名

6.touch 可以用来修改或者创建新文件

1
2
3
mtime 修改时间(内容)
ctime 状态时间(权限属性)
atime 读取时间(内容被读取)
1
2
3
4
5
-a 自定义atime
-c 仅仅修改文件的时间,不存在则不会自己创建文件
-d 后面接欲自定义的时间而不用现在的时间
-m 修改mtime
-t 自定义时间

常用于建立空文件和将某个文件日期自定义为目前的时间

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

默认权限设置umask

1
2
dq@dq-PC:~/Documents$ umask
0022

0022表示在默认值上面需要减去的权限,第一组是特殊权限用的,后面三组分别表示u,g,o,默认权限如下:

  • 建立的是文件:默认没有x执行权限,即rw,最大就是666,权限为-rw-rw-rw-
  • 建立的是目录:由于x与进入本目录有关系,所以最大为777,权限为drwxrwxrwx

减去022以后分别为:

1
2
-rw-r--r--
drwx-r-xr-x

修改nmask:

1
nmask 002

文件隐藏属性chattr lsattr

1
2
3
chattr +a 设置a以后,这个文件只能增加数据,不能删除也不能修改数据
chattr +i 可以让一个文件不能被删除,改名,设置链接,也无法写入或者新增数据
lsattr 可以查看文件的隐藏属性

对于像logfile这种文件,+a还是很重要的

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

  • Set UID

    SUID权限仅仅对二进制程序有效

    执行者对该程序具有x的可执行权限

    本权限仅仅在执行该程序的过程中有效

    执行者将具有该程序拥有者的权限

    举例:

    /etc/shadow的权限为000,只有root可读可写,但是一般的普通用户也可以修改自己的密码,为什么?这就要用到passwd和SUID的功能了

    1
    2
    [gard3nia@localhost tmp]$ ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27856 Aug 8 21:39 /usr/bin/passwd

    其中:

    1.一般用户对于/usr/bin/passwd具有x的权限

    2.passwd的拥有者是root这个账号

    3.一般用户执行passwd的过程中,会暂时获得root权限

    4./etc/shadow就会被普通用户修改

    但是如果一般用户去使用cat去读取shadow时,因为cat是不具备SUID的,所以是不可以的,而且SUID仅仅可以用在二进制文件上,不可以用在shell脚本上。

    Mrj334.png

  • Set GID

    当s的标志在文件拥有者的x项为SUID,那么s在用户组的x时则被称为SGID

    SGID对二进制程序有用

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

    执行者在执行的时候会获得该程序用户组的支持

    举例:

    其实和SUID非常类似,如果用gard3nia这个账户去执行locate时,那么gard3nia会取得slocate用户组的支持,因此就可以去读取mlocate.db

    除了二进制程序以外,SGID也能够用在目录中,这也是非常常见的一种用途,,当一个目录设置了SGID以后,功能如下:

    用户具有rx权限时,该用户能够进入此目录

    用户在此目录下的有效用户组将会变成该目录的用户组

    若用户在此目录下具有w的权限,则用户所建立的新文件,该新文件的用户组与此文件的用户组相同

  • Sticky Bit

    对于目录有效:

    当用户对于此目录有wx权限时,即具有写入的权限

    当用户在该目录下建立文件或者目录时,仅仅有自己和root才有权利删除该文件

    举例:例如在根目录下的/tmp,具体的权限情况如下:

    1
    drwxrwxrwt.  12 root root  275 Nov 16 04:50 tmp

    可见所有人都有写入的权利,所以现在将身份切换为xl,然后新建1.txt,将权限改为777

    1
    2
    3
    4
    5
    [xl@localhost tmp]$ touch 1.txt
    [xl@localhost tmp]$ chmod 777 1.txt
    [xl@localhost tmp]$ ls -l
    total 4
    -rwxrwxrwx. 1 xl xl 0 Nov 16 16:51 1.txt

    再切换回gard3nia,试图删除1.txt,删除失败:

    1
    2
    [gard3nia@localhost tmp]$ rm 1.txt
    rm: cannot remove ‘1.txt’: Operation not permitted
  • 权限设置:

    SUID 4

    SGID 2

    SBIT 1

    使用chmod 4755 filename 即可设置SUID

观察文件类型

1
file 文件名称

命令与文件的查找

1.脚本文件的查找 which

两次tab可以让用户知道有多少命令可以执行,which可以用来查找这些目录的完整文件名放在哪里,通过PATH这个环境变量所规范的路径,去查找执行文件的文件名,如果加上-a的参数,则可以列出所有的可以找到的同名执行文件,而非显示第一个。

2.文件的查找 whereis locate find

whereis

查找速度较快,但是只是查找几个固定的目录,并没有全系统去查询,主要针对的是/bin,/sbin下面的执行文件,以及/usr/share/man下面的man page文件

locate

查找速度也非常快,这是因为locate寻找的数据是由已建立的数据库/var/lib/mlocate里面的数据所查找到的,所以不需要从硬盘读取数据,但是需要及时更新数据库文件

1
2
sudo updatedb
locate xxx

find

1
find [path] [option] [action]

速度慢,影响硬盘性能

1.与时间有关的参数:共有-mtime,-ctime,-atime选一种介绍:

1
2
3
-mtime n   n天前被修过的文件(一天)
-mtime +n n天之前,被修改的文件
-mtime -n n天之内,被修改的文件

MsPMp6.png

2.与使用者或者用户组有关的参数

1
2
3
4
5
6
-uid n
-gid n
-user name
-group name
-nouser 查找文件的拥有者不再passwd中
-nogroup 查找文件的拥有用户组不在group中

3.与文件权限有关的参数

1
2
3
4
-name filename
-size +-SIZE 表示比size大(+)或者比size(-)小的文件
-type TYPE
-perm mode
Author: Gard3nia
Link: https://gardenia30.top/2019/11/05/Linux基础学习笔记-文件与目录管理/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.