Linux 文件管理及目录与权限控制

Linux 文件管理及目录与权限控制

前言

事实上提到对文件及目录管理时,我认为无法避免会说到用户及用户组.所以在这个主题下先提及一下.

Linux可以实现多用户登陆,这些用户可以共享一些文件,但他们也都有自己的空间.实际上他们的文件都是放在同一个物理磁盘甚至同一个目录的.这就是因为用户管理权限机制

所以有些文件,我们可能无法进行更改,后面会提到.

输入

1
who am i 

可以查看当前用户

image-20210913235127244

root账户权限最高,可以对其他用户文件进行删改

sudo 命令提升权限,否则一些命令可能无法执行

这个命令会常用

sudo #使用这个命令需要知道当前登陆用户密码且该用户在sudo用户组内.

用户组就是若干个用户在一起的组合,其他用户就是既不是本身用户也不是这个用户组里的用户.

文件及目录的管理

有了些基本知识就可以对文件进行操作了

Linux目录结构与Windows不同,以目录为主.可以理解为树形目录是一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是挂载在目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。

Linux目录配置依据 FHS。根据这个标准,Linux的目录该放那些文件是有规定的

img

img

关于目录树

绝对路径: 由根目录/开始写起的文件名或目录名称

相对路径:相对于目前路径的文件名写法

# 绝对路径

cd /usr/local/bin

相对路径

cd ../../usr/local/bin

cd 改变当前目录

  • 找到文件/目录位置:cd
  • 切换到上一个工作目录: cd -
  • 切换到home目录: cd or cd ~

image-20210913192130268

  • 显示当前路径: pwd

image-20210913192046022

  • 更改当前工作路径为

    1
    path: $cd path

image-20210913192304748

.. 表示上一级目录

. 表示当前目录

现在可以开始对文件的查看了

命令

  • 创建目录:mkdir
  • 删除:rm
  • 删除非空目录:rm -rf file目录
  • 删除日志 rm log (等价: $find ./ -name “log” -exec rm {} ;)
  • 移动:mv
  • 复制:cp (复制目录:cp -r )
  • 创建文件:touch

新建

touch 创建空白文件

image-20210913192915649

mkdir 新建目录

image-20210913193233984

我们发现如果想创建多层的目录直接使用mkdir不行,需要 mkdir -p

image-20210913193350560

同时一个目录下文件不能与文件夹同名

复制

使用 cp命令(copy)复制一个文件到指定目录

image-20210913193711075

文件的复制。默认复制文件的数据

image-20210913200119663

复制目录

直接使用cp复制目录会出错

加上参数 -r 递归复制

1
$cp -r source_dir  dest_dir

常用参数

-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的文件(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬链接 (hard link) 建立,而非复制档案本身;
-p :连同档案的属性(权限,时间,用户)一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;

-d:复制成为符号连接

默认情况下,cp后目标文件拥有者是命令执行者.如果想要连着这个属性更改需要加上-p

复制时需要考虑:

保留源文件完整信息?

源文件是否是符号链接

源文件是否是mulu

删除

使用 rm(remove files or directories)命令删除一个文件

image-20210913195612391

当然 不能删除本身不存在的文件

有时候你会遇到想要删除一些为只读权限的文件,直接使用 rm 删除会显示一个提示,加上 -f参数直接强制删除

-i 在删除前会询问

image-20210913195758530

删除目录

同样的,需要加上-r参数才能删除目录

image-20210913200839956

其实也可以使用rmdir,但只能删除空目录

image-20210913201913643

image-20210913201926192

移动

使用mv命令移动文件

1
mv source destination 

image-20210913201207839

重命名文件

mv 命令除了能移动文件外,还能给文件重命名。命令格式为 mv 旧的文件名 新的文件名

image-20210913201430489

文件权限

Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

查看文件与目录

之前也用到很多次 ls命令

image-20210913202256597

ls列出目录下的文件

-a 显示所有文件及目录(包含以“.”开头的隐藏文件)
image-20210913202947310-l 显示详细文件内容,长格式

-h 与-l一起使用,输出易于阅读的文件大小。 Human-readable

image-20210913202919245

-r 将文件以相反次序显示(原定以英文字母次序)

-d 若不加参数指定目录,ls会列出目录中的内容,若与-l结合则可以查看目录信息

image-20210913202837994

-t 安修改日期排序输出

-S 按文件大小排序输出

我们会发现 在长格式下,文件前面会有一些东西

image-20210913203233587

分别是 文件类型权限 链接数 文件所属用户组 文件大小Byte 文件最后修改时间 文件名 (当然后面可能会有软链接)

pic

关于权限

pic

读权限,表示你可以使用 cat <file name> 命令来读取某个文件的内容;写权限,表示你可以编辑和修改某个文件的内容;

执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。

image-20210913203914866

可以分析一下,这是个目录(d) 拥有者与用户组权限都是rwx,即可读可写可执行. 但其他用户不能写,说明其他用户不能改写该目录.所有者与所属用户组为shiyanlou

更改权限

chgrp:修改文件所属用户组

chown:修改文件拥有者

-R 参数递归修改连通目录下的所有文件

chomd:修改文件的权限

  • 改变文件的拥有者 chown
  • 改变文件读、写、执行等属性 chmod
  • 递归子目录修改: chown -R tuxapp source/
  • 增加脚本可执行权限: chmod a+x myscript

注意 用户组在 etc/group里。用户在etc/passwd里

实例

image-20210913205052643

创建用户,在该用户目录下创建ipone文件。发现该文件所有者是lilei

现在切回root

image-20210913205812323

发现该文件所有者变为shiyanlou

image-20210913205912499

现在是更改了文件的所有者,下面继续更改所属用户组

image-20210913212151973

这样的话lilei就只有rx的权限了,也就是说无法更改文件.我们试一试

image-20210913212322183

会发现无法修改…

接下来进行修改权限

  1. 二进制数字表示

    pic

第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。

例如image-20210913211810594

可以发现改为了拥有者可读可写

  1. 符号操作

    1
    $chmod userMark(+|-)PermissionsMark

    userMark取值:

    • u:用户
    • g:组
    • o:其它用户
    • a:所有用户

    PermissionsMark取值:

    • r:读
    • w:写
    • x:执行

image-20210913212537141

+- 分别表示增加和去掉相应的权限。

在shell中,要修改文件当前的用户必须具有管理员root的权限。可以通过su命令切换到root用户,也可以通过sudo获得root的权限

注意:对于文件和文件夹来说。 rwx权限不太一样

文件:r 读取文件内容 w修改文件内容 x执行文件内容

目录:r 读到文件名 w修改文件名 x进入目录权限

也就是说若没有x权限,无法进入目录(不代表不能知道目录下的东西)

实例

image-20210913213443471

创建一个目录 然后更改权限 使得用户组与其他用户只有r权限

image-20210913213634417

使用groups查看当前用户的用户组。发现他加入了多个用户组

image-20210913213536038

然后想要进入该目录权限不够,因为只有r

sudo大法 更改权限进入文件

image-20210913214229305

添加一个文件

image-20210913214622660

发现可以查询目录下的文件名列表但无法切换到目录内。甚至无法读取文件内容

file确定文件类型

Linux下不要求文件名反应文件类型,使用file命令可以查看类型

image-20210913215723013

image-20210913225537180

less查看文本文件

image-20210913215804478

我们可以上下翻页。q退出

cat

cat命令用于连接文件并打印到标准输出设备上。

我写在这里是因为这些命令用的挺多的

把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:

1
cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:

1
cat -b textfile1 textfile2 >> textfile3

查看文件:cat vi head tail more

显示时同时显示行号:

l
1
$cat -n

按页显示列表内容:

1
$ls -al | more

只看前10行:

1
$head - 10 **

显示文件第一行:

1
$head -1 filename

显示文件倒数第五行:

1
$tail -5 filename

查看两个文件间的差别:

1
$diff file1 file2

动态显示文本最新信息:

1
$tail -f crawler.log

链接

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接

在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的

软链接

也叫符号链接

与Windows的快捷方式类似

在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

1
ln -s cc ccTo :符号链接(软链接);删除源,另一个无法使用;(后面一个ccTo 为新建的文件)

image-20210913220642505

ls -li -i可以显示inode节点。通过这个判断链接。当然,符号链接inode不同且有箭头指向被链接的文件.

若源文件被删,则符号链接的文件也失效

image-20210913221115358

image-20210913221136588

硬链接

它与软链接实现方式不同

硬链接指通过索引节点来进行连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的链接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

image-20210913221552058

硬链接f2到f1,将f1删掉.因为节点相同,发现原本软链接到f1的f3硬链接到了f2

image-20210913221853123

删除被软链接的文件,在创建同名文件,发现软链接的文件更新了

image-20210913222100169

文件压缩与解压

在 Windows 上最常见的不外乎这两种 *.zip*.7z 后缀的压缩文件。而在 Linux 上面常见的格式除了以上两种外,还有 .rar*.gz*.xz*.bz2*.tar*.tar.gz*.tar.xz*.tar.bz2

Linux 常用的压缩与解压缩命令有:tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar 等

文件后缀名说明
*.zipzip 程序打包压缩的文件
*.rarrar 程序压缩的文件
*.7z7zip 程序压缩的文件
*.tartar 程序打包,未压缩的文件
*.gzgzip 程序(GNU zip)压缩的文件
*.xzxz 程序压缩的文件
*.bz2bzip2 程序压缩的文件
*.tar.gztar 打包,gzip 程序压缩的文件
*.tar.xztar 打包,xz 程序压缩的文件
*tar.bz2tar 打包,bzip2 程序压缩的文件
*.tar.7ztar 打包,7z 程序压缩的文件

简单来说,就是打包,压缩

tar

打包

最常用的打包命令是 tar,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了

​ tar实现了对 7z、gzip、xz、bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩.

下来来介绍参数

-c 创建一个tar包 -f指定文件名

-r 增加文件

1
sudo tar -cf mytar.tar file

image-20210913223434051

创建了一个tar包

还可以加上 -v 参数以可视的的方式输出打包的文件。

image-20210913223923573

1
tar -uf all.tar logo.gif

更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思

1
tar -tf all.tar

列出 all.tar 包中所有文件,-t 是列出文件的意思

  • 保留文件属性和跟随链接(符号链接或软链接),有时候我们使用 tar 备份文件当你在其他主机还原时希望保留文件的属性(-p 参数)和备份链接指向的源文件而不是链接本身(-h 参数):
1
tar -cphf etc.tar /etc
解包

解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数)

image-20210913225018181

image-20210913224507056

只查看不解包文件 -t 参数

压缩与解压

对于创建不同的压缩格式的文件,对于 tar 来说是相当简单的,需要的只是换一个参数

在创建 tar 文件的基础上添加 -z 参数

1
sudo tar -czf mytar.tar.gz file

image-20210913225228029

解压文件使用 -xzf (对于gzip)

image-20210913225338711

压缩文件格式参数
*.tar.gz-z
*.tar.xz-J
*tar.bz2-j

zip

其实光tar已经够了,这里稍微写一下zip

-r 参数表示递归打包包含子目录的全部内容

-q 参数表示为安静模式,即不向屏幕输出信息

-o,表示输出文件

还可以设置压缩等级

zip -r -o myzip.zip file

image-20210913225914594

du用于查看文件大小

-e设置密码

image-20210913230218420

-l 用于使LF转化为CR+LF. 也就是linux换行符为LF在windows上无法显示

unzip用于解压

-q 安静模式

-d 指定输出到的目录

-l 不解压只查看内容

中文压缩包 -O GBK 指定编码类型

小结

  • zip:
  • 打包 :zip something.zip something (目录请加 -r 参数)
  • 解包:unzip something.zip
  • 指定路径:-d 参数
  • tar:
  • 打包:tar -cf something.tar something
  • 解包:tar -xf something.tar
  • 指定路径:-C 参数

补充

find

实时查找

搜寻文件或目录:

1
$find ./ -name "core*" | xargs file

查找目标文件夹中是否有obj文件:

1
$find ./ -name '*.o'

指定目录 与 -name查找关键字(可用正则)

递归当前目录及子目录删除所有.o文件:

1
$find ./ -name "*.o" -exec rm {} \;

locate

locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库。

1
$locate string

寻找包含有string的路径:

1
$updatedb

与find不同,locate并不是实时查找。你需要更新数据库,以获得最新的文件索引信息。

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道