Linux系统学习(二)Linux文件系统

Linux文件系统含义

“文件系统”有以下几种含义:
(1)指一种特定的文件格式。比如,Linux的文件系统是ext3,MSDOS的文件系统是FAT16,而Windows XP的文件系统是NTFS或者FAT32。
(2)指按特定格式进行了“格式化”的一块存储介质。当我们说“安装”或“拆卸”一个文件系统时,指的就是这个意思。
(3)指操作系统中(通常在内核中)用来管理文件系统以及对文件进行操作的机制及其实现。

Linux文件系统使用单一的根目录结构,所有的分区都挂载到单一的“ / ”目录上。
Windows操作系统中,使用驱动器。

Linux文件

文件成分:

  • 索引节点:每个Linux分区中对文件使用的标识符。每个文件都有一个inode。
  • 数据。

文件命名:
同类文件使用同样的后缀或扩展名;Linux系统区分文件名的大小写;以圆点“ . ”开头的文件名是隐含文件。

1、Linux文件类型

1)普通文件 -

文本文件、数据文件、可执行二进制程序文件

2)目录文件 d

. ——本身

.. ——父目录

3)设备文件

字符设备 c :和传输数据有关

块设备 b :传输数据1KB为单位,和缓冲区有关

4)链接文件 l

Linux具有为一个文件起多个名字的功能,称为链接。
链接文件同一目录下不可以有同名文件,不同目录下可以有。

硬链接和软链接:硬链接链接文件公用一个inode号,说明是同一个文件,软链接原文件和链接文件有不同的inode号,表明是不同的文件。

2、文件导航

ls -a //显示所有文件,包含隐藏
ls -l //长格式显示详细信息
ls -m //逗号分隔的紧凑方式显示
ls -R //递归显示,即显示目录以及其目录下的子目录
ls -i //显示索引节点号

3、文件查看/复制

cat -n ——以行号的形式查看文件信息

cat > 文件名——建立小型文件,Ctrl+D存盘并退出

cat file1 file2 > file3 ——合并文件

tac ——从最后一行开始显示,可以看出 tac 是 cat 的倒着写

nl file1 ——按行号输出内容

more ——分屏显示文件内容,回车显示下一行,空格显示下一屏,按“q”退出

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

head -n 20 /etc/man.config ——只看前20行,默认看前10行

tail -n 20 /etc/man.config ——只看最后20行,默认看后10行

4、文件复制、删除、移动

cp -rf dir1 dir2——r是递归拷贝,f是强制,不提示

cp -f file1 file2 ——file1复制到file2

cp -f file[1-9] dir1 ——file[1-9]复制到dir1目录下

cp ./* Dir1 ——把当前目录下所有文件复制过去

cp在不同分区间复制有问题,cp命令没有用。

mv 源文件或目录 目标文件或目录——移动

rm -rf file1 ——删除file1

rm -rf /* ——删库跑路的命令,勿碰!

5、文件检索

grep -n ——以行号形式显示出来

grep -n huaxin /etc/passwd

cat /etc/passwd | grep huaxin

cat /etc/logrotate.conf | grep -v “^$”

-v “^$”——过滤空格(不显示)

-v “^#”——过滤#

6、sort排序

sort -r file1 ——r为反向排序
sort -r -o outf1 file1 ——o为输出

sort -u file1 ——u去除重复项

sort -n file1 ——n以数值来排序,不然可能会遇到过10比2小的情况
sort -k 3 file1 —— k为关键字
sort -n -k 3 file1 —— n为数值
ls -l | sort -n -r -k 5

把root目录下所有文件(包含隐藏文件)按文件大小进行排序
① find . -type f -exec du -h {} + | sort -r -h
du -h显示这些文件大小,然后再使用sort对输出进行排序
② ls -laSh

7、目录操作

mkdir dir1 dir2 ——创建dir1和dir2

mkdir -p dir1/dir2 —— p 创建不存在的中间目录

mkdir -m 744 /usr/dir2 —— m 为新创建的目录指定权限

rm -rf 目录名

8、文件权限

文件权限:哪些用户和组群可以访问文件以及可执行什么样的操作。
属主:所有者
属组:划分的组所拥有的权限

chown [选项] [所有者] [:[组]] 文件列表

[]表示可选,可写可不写

eg:chown wdg f1
chown :wdg f1
chown wdg:wdg f2

访问权限规定三种不同类型的用户组:

  • 文件属主(owner):文件的所有者,称为属主;
  • 同组用户(group):文件属组的同组用户;
  • 其他用户(others):可以访问文件的其他用户。

文件的权限表示方法:

  • 三组九位字母表示法
  • 三组九位二进制表示法
  • 三位八进制表示法

文件权限修改

文件权限表示3种方法

①字母表示

②三位8进制

③3位二进制

1)字母形式修改权限
chmod [选项] 模式[,模式] 文件名

用户对象:
u:user表示用户,即文件或目录的所有者;
g:group表示同组用户;
o:others表示其他用户;
a:all表示以上所有用户。

操作符号:
+:添加某个权限;
-:取消某个权限;
=:赋予给定权限并取消其他所有权限。

例如,d rwx rw- r–

每3位表示( )的权限:文件属主、同组用户、其他用户

r:可读,数字4

w:可写,数字2

x:可执行,数字1

示例:
chmod a=rw f2 —— 给所有用户赋予读写权限

chmod u+x ,g+w,o-r f1 —— 将f1所有者提升可执行,同组用户可写,其他用户降权可读

Linux系统学习(二)Linux文件系统
Linux系统学习(二)Linux文件系统

在上图中,可以看到/home/dev01/.bahsrc文件由用户dev01所有,并且属于用户组dev01;/bin/bash文件由用户root所有,并且属于用户组root;helloworld.sh由用户dev01所有,并且属于用户组dgroup。

2)数字形式修改权限
chmod 700 f1

rwx:4+2+1=7

特殊权限:

用户置位s(SUID),组置位s(SGID),黏着置位t(sticky)

这几个权限有大小写之分,大写表示没开权限,小写是开。

特权的含义:
suid/sgid程序:进程继承了命令拥有者的权限

t属性:告诉系统在程序完成后在内存中保存一份运行程序的备份

s属性:在该目录下创建的任何文件及目录属于该目录所拥有的组。

T属性:只有root用户才能删除某些文件

数字修改权限时setuid、setgid、sticky的八进制位分别是4000、2000、1000。字母形式分别是u+s、g+s、o+t。

例如,
chmod u+s m1
chmod u+xs m2
chmod 1755 m3

文件默认权限umask掩码:新创建的文件所拥有的权限,Linux通过设置umask掩码来指定。

计算公式:
文件创建时的默认权限 =0666-umask
目录创建时的默认权限 =0777-umask

例如,
系统默认的掩码是0022,文件创建的权限是0677-0022=0655(要减去0022)

umask 2000 ——修改掩码

9、文件的链接

(1)硬链接

ln 源文件 创建的目标链接文件

限制
不能对目录文件做硬链接;
不能在不同的文件系统之间做硬链接。

特点
创建的硬链接文件属性和源文件相同,节点号相同,命名可以和源文件不同;
源文件删除了,而链接文件仍具有原来特性;
更改源文件或链接文件属性,则全部更改。

硬链接的文件内容被删,位置被链接过去了,删除内容之后还可以访问这个区域,相当于是一个可变区域。

(2)软链接

又叫符号链接,类似快捷方式。

ln -s 源文件 创建的目标链接文件

将文件的路径名链接到一个文件上,类似于Windows系统中的快捷方式。

特点:
软链接是一个新文件,和源文件有不同的节点号;
可以对目录文件做软链接,也可以在不同文件系统中做;
删除文件或目录时,软链接不会删除,但链接失效;
软链接的大小是其链接文件的路径名中的字节数。

在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是1.

要实现在各用户之间共享文件,可以用以下几种方式:

通过系统服务:
<1>NFS:网bai络文件系统,用于Linux与Linux系统之间的du文件共享
<2>Samba:用于windows与Linux系统之间的共享
<3>FTP:windows与Linux都可以,有图形化界面与命令行两种方式访问共享数据

通过权限设置:
<1>ACL
<2>如果不在乎权限范围过大,可以直接设置要共享的文件的权限为任何人和组都可读写和执行

文件体积越大,压缩比率越大,但是达不到100%。


命令练习1:

  • 启动计算机,使用自己创建的用户登录系统。
  • 使用pwd命令查看当前工作目录,使用ls命令查看当前目录下有哪些内容。
  • 使用cd命令切换到tmp目录,使用pwd命令检查当前工作目录是否改变。
  • 使用-l选项查看tmp目录下的详细信息。在这一步中,要求同学们根据输出的第一个字符判断文件的类型,即判断哪些是目录,哪些是普通文件;使用-a选项查看隐藏文件,观察隐藏文件的特点。
  • 使用cat命令查看文件file1的内容,并显示行号。
    cat -n file1
  • 在tmp目录下创建子目录dir2、文件file2及file3。将file1复制到目录dir1中,复制后的文件名为file1.bak。将file2移动到dir2中,将file3重命名为file3.bak。
    mkdir dir2
    touch file2 file3
    cp file1 dir2/file1.bak
    mv file2 dir2
    mv file3 file3.bak
  • 用grep命令在profile文件中对关键字then进行查询,并与上面的结果比较。
    grep then profile
    cat profile | grep -i then
  • 给文件profile创建一个符号链接lnsprofile和一个硬链接lnhprofile。
    ln -s lnsprofile
    ln profile lnhprofile
  • 长格式显示文件profile、lnsprofile和lnhprofile的详细信息。注意比较3个文件链接数的不同。
    ls -l
  • 删除文件profile,用长格式显示文件lnsprofile和lnhprofile的详细信息,比较文件lnhprofile的链接数的变化。
    rm -r profile
    ls -l
  • 用less命令查看文件lnsprofile的内容,看看有什么结果。
    less lnsprofile
  • 删除文件lnsprofile,显示当前目录下的文件列表,回到上层目录。
    rm -r lnsprofile
    ls
    cd ./
  • 用tar命令把目录test打包
    tar -zcvf test.tar.gz test
    或 tar -cvf test.tar test
  • 用命令将打包好的包压缩
    gzip test.tar
  • 把文件test.tar.gz改名为backup.tar.gz。
    mv test.tar.gz backup.tar.gz
  • 显示当前目录下的文件和目录列表,确认重命名成功。
    ls -l
  • 把文件backup.tar.gz移动到test目录下。
    mv backup.tar.gz ./test
  • 显示当前目录下的文件和目录列表,确认移动成功。
    ls
  • 进入test目录,显示目录中的文件列表。
    cd ./test
    ls
  • 将文件test.tar.gz解压
    tar -zxvf test.tar.gz
  • 显示当前目录下的文件和目录列表,复制test目录为testbak目录作为备份。
    cp -r test testbak
  • 查找root用户自己的主目录下的所有名为newfile的文件。
    find -name newfile
  • 删除test子目录下的所有文件。
    rm -rf test/*
  • 利用rmdir命令删除空子目录test。
    rmdir test
  • 回到上层目录,利用rm命令删除目录test和其下所有文件。
    cd …
    rm -rf test
    ls
  • 利用命令显示当前系统时间,并修改系统时间
    date
    date -s “19:16:34 2020-11-17”
  • 显示当前登录到系统的用户状态
    who
  • 显示系统的磁盘分区及使用状况
    fdisk -l
  • 显示当前目录下的各级子目录的硬盘占用情况
    du

练习2:

  • 启动计算机,使用自己创建的用户登录系统。
  • 使用su - root命令切换到root用户。
    su
  • 使用cat /etc/passwd命令查看当前系统用户的信息
  • 使用grep hx /etc/passwd命令确认系统中是否已有hx用户。查询结果显示不存在这个用户,因此使用useradd hx命令创建了这个新用户,并使用passwd hx为其设置初始密码123456。
    useradd hx
    passwd hx 123456
  • 使用命令将hx用户加入到信息安全系用户组中。
    groupadd Xinan
    usermod -a -G Xinan hx
  • 切换到/ito/pub目录,新建示例文件readme.ito。/ito/pub目录中保存的是软件学院的公共文件,本学院的所有老师都能读取文件的内容,但只有系统管理员可以修改文件。另外,其他学院的老师无法读取文件内容。
    cd /ito/pub
    touch readme.ito
    chown root readme.ito
    ls -l readme.ito
    -rw-r–r--. 1 root root 0 11月 17 19:19 readme.ito
    chmod o-r readme.ito
  • 使用su hx命令切换到hx用户。使用vim打开readme.ito文件,可以正常打开,但尝试修改时提示只有读权限。使用exit命令退出hx用户,返回root用户。
    su hx
    vim reame.ito
    exit
  • 切换到/ito/sie/pub目录,新建示例文件readme.sie。/ito/sie/pub目录中保存的是信息安全系的公共文件,本系的所有老师都可以读写这些文件,而其他系的老师只能读取文件内容。
    cd /ito/sie/pub
    touch readme.sie
    chown root readme.sie
    ls -l readme.sie
    -rw-r–r--. 1 root root 0 11月 17 19:19 readme.ito
    chmod g+w readme.sie
  • 分别切换到hx和自己创建的用户用户,并尝试对readme.sie进行读和写操作。
  • 分别在/ito/pub和/ito/sie/pub两个目录中建立一个子目录,并对其进行不同权限的设置,使用不同的用户进行验证,加深对普通文件和目录权限管理的理解。