Linux复习2——管理文件系统1
超级用户->普通用户:exit
普通用户->超级用户:su
Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限
系统目录结构
/——根目录
/home、/root——用户的宿主目录
/usr——命令程序文件
/etc——配置文件
/boot——系统启动文件
/dev——设备文件
/tmp、/var/tmp——临时文件
/var——变量数据(日志、邮件、web内容等)
绝对路径和相对路径
#绝对路径
以“/”开始的路径表示形式
文件系统中每个文件都有一个唯一绝对路径
#相对路径
指从当前工作目录到达指定文件所需的路径,
可以是以“.”或者”..”开始的目录路径
. 代表当前目录
.. 代表上一层目录
命令
pwd
功能:pwd 命令主要用于显示或者查看当前所在的目录路径。
格式:“pwd [选项]”。
实际代码和结果:
cd
功能: cd 命令主要用于切换工作目录。
格式:“cd [目录名称]”。
-使用“cd -”命令返回到上一次所处的目录
-使用“cd ..”命令进入上级目录,
-使用“cd ~”或者“cd”命令切换到当前用户的家目录,
-使用“cd ~username”切换到其他用户的家目录。
ls
功能:ls 命令用于显示目录中的文件信息。
格式:ls [选项] [文件] ” 。
实际代码和结果:
-[root@ localhost ~]#ls #查看当前目录所有的文件和目录
-[root@localhost ~]# ls -l #查看当前目录所有的文件和目录的详细信息
-[root@localhost ~]# ls -a #查看当前目录所有的文件和目录,包括隐藏文件
-[root@localhost ~]# ls -ld /etc #查看/etc 目录本身的权限与属性信息
ls -l详解
第一行:总计(total):当前目录下所有文件所占用的空间总和。可以使用ls –lh查看,也可使用ls –alh查看。h代表文件大小以人类易读的形式给出。
第二行:
-第1字段: 文件类型和文件权限(-:普通文件、b:块设备文件,如硬盘、光盘等、 d:目录文件、c:字符设备文件,如键盘、鼠标等 、l:链接文件 )
-第2字段:文件硬链接数
-第3字段:文件拥有者
-第4字段:文件拥有者所在组
-第5字段:文件大小(以字节为单位)
-第6字段:文件最后更改时间
-第7字段:文件名(若为链接文件则追加显示其链接的原文件的路径)
ls -l可以简写为“ll”
文件的权限
在 Linux 系统中,每个文件都有所属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限
文件的读、写、执行权限可以简写为 rwx,亦可分别用数字 4、 2、 1 来表示
#对于目录文件:
·可读:能够读取目录内文件列表
·可写:能在该目录内新增、删除、重命名文件
·可执行:能进入该目录
软链接与硬链接
硬链接(hard link): 可以将它理解为一个“指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和文件。 硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只有当该文件的 inode 连接数为 0 时,才算彻底将它删除。 需要注意的是,由于技术的局限性,不能跨分区对目录文件进行链接
软链接(也称为符号链接[symbolic link]): 仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。
命令
alias
运行alias ll命令
-显示别名,ll其实就是ls -l命令的别名。如果键入不带任何参数的alias 命令,将显示所有已定义的别名。
运行alias li='ls -li'命令
-定义li为ls -li命令的别名 ,在定义别名时,等号两边不能有空格。仅在命令中包含空格或特殊字符时才需要引号。
删除别名:unalias li
文本文件查看类命令
cat
功能: cat 命令用于查看纯文本文件(内容较少的)。
格式: cat [选项] [文件]。
实际代码和结果:
more
功能: more 命令用于分页查看纯文本文件(内容较多的)。
格式: more [选项] [文件]。
实际代码和结果:
注:空格键向下翻页,回车键向下翻行, 要退出more程序,应按q键
less
功能: 与more 命令相似,用于分页查看纯文本文件(内容较多的)。
格式: less [选项] [文件]。
实际代码和结果:
PageUp向上翻页,PageDown或空格键向下翻页。上下键向上向下翻行。退出,应按q键
less与more命令区别:
less命令允许用户向前或向后浏览文件
more命令只能向前浏览
head
功能: head 命令用于查看纯文本文档的前面部分内容。
格式: head [选项] [文件]。
实际代码和结果(显示前五行的内容):
tail
功能: tail 命令用于查看纯文本文档的后面部分内容。
格式: tail [选项] [文件]。
实际代码和结果(显示后五行的内容):
tail 命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用
wc
功能: wc 命令用于统计指定文本的行数、字数、字节数。
格式: wc [参数] 文本。
实际代码和结果:
目录操作类命令
mkdir
功能: mkdir 命令用于创建空白的目录。
格式: mkdir [选项] 目录。
实际代码和结果:
rmdir
功能: rmdir 命令用于删除空白的目录。
格式: rmdir [选项] 目录。
实际代码和结果:
文件操作操作类命令
touch
功能: touch 命令用于创建空文件或设置文件的时间。
格式: touch [选项] [文件]。
用于创建空文件,如创建一个名为new的空白文本文件
[root@localhost b]# touch new
如果该文件已存在,则修改文件的属性时间为当前系统时间
同时创建多个空文件
[root@localhost b]# touch file1 file2 file3
[root@localhost b]# touch file{1..3}(上面可以这样写)
cp
功能: cp 命令用于复制文件或目录。
格式: cp [选项] 源文件 目标文件。
在 Linux 系统中,复制操作具体分为 3 种情况:
➢如果目标文件是目录,则会把源文件复制到该目录中;
➢如果目标文件是存在的普通文件,则会询问是否要覆盖它;
➢如果目标文件不存在,则执行正常的复制操作。
实际代码和结果:
➢如果目标文件是目录,则会把源文件复制到该目录中
[root@localhost~]# touch file1
[root@localhost~]# mkdir cptest1
[root@localhost~]# cp file1 cptest1
[root@localhost~]# ls cptest1
file1
➢如果目标文件不存在,则会新建目标文件,并将源内容填充至目标文件中
[root@localhost~]# mkdir cptest2
[root@localhost~]# cp file1 cptest2/file2
[root@localhost~]# ls cptest2
file2
➢如果目标文件是已存在文件,则会询问是否要覆盖它,输入y会将源内容覆盖至目标文件中
[root@localhost~]# touch file3
[root@localhost~]# cp file1 file3cp:是否覆盖'file3'? y
➢如果源是目录:需使用-r选项,表示递归
[root@localhost~]# mkdiraa
[root@localhost~]# cp -r aa bb #aa目录复制到bb下,当前目录下没有bb文件夹但是会创建
➢使用-p选项,保留原始文件的属性
[root@localhost ~]# touch install.log
[root@localhost ~]# cp install.log x.log
[root@localhost ~]# ll install.log x.log
-rw-r--r--. 1 root root 0 9月 9 09:11 install.log
-rw-r--r--. 1 root root 0 9月 9 09:12 x.log
[root@localhost ~]# cp -p install.log x1.log
[root@localhost ~]# ll install.log x1.log
-rw-r--r--. 1 root root 0 9月 9 09:11 install.log-rw-r--r--. 1 root root 0 9月 9 09:11 x1.log
mv
功能: mv命令用于剪切文件或将文件重命名。
格式: mv [选项] 源文件 [目标路径|目标文件名]。
剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。
如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:
实际代码和结果:
[root@localhost ~]# mv x.log linux.log
[root@localhost ~]# ls
linux.log
rm
功能: rm 命令用于删除文件或目录。
格式: rm [选项] 文件。
在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm 命令后跟上-f 参数来强制删除。
另外,想要删除一个目录,需要在 rm命令后面一个-r参数才可以,否则删除不掉
[root@localhost~]# rm install.log # 删除install.log文件
rm:是否删除普通空文件'install.log'?y
[root@localhost~]# rm -f x1.log # 强制删除x1.log文件
[root@localhost~]# mkdir aa
[root@localhost~]# rm -rf aa # 强制删除目录aa]
diff
功能: diff 命令用于比较多个文本文件的差异,可以用来查篡改。
格式: diff [参数] 文件。
实际代码和结果:
[root@localhost diff_test]# diff -c file1 file2
*** file1 2021-09-0709:26:00.794949966 +0800
--- file2 2021-09-0709:27:58.540956911 +0800
***************
*** 1,5 ****
! welcome to hejin
Centos
! free Linux
Linux is not Unix
Linux Course
--- 1,6 ----
! welcome toooo hejin
Centos
! Free Linux
!
Linux is not Unix Linux Course
dd
功能: dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件。
格式: dd [参数] 。
实际代码和结果:
例如:我们用dd 命令从/dev/zero 设备文件中取出一个大小为360MB 的数据块,然后保存成名为360_file的文件
[root@localhost ~]# dd if=/dev/zero of=360_file count=1bs=360M
记录了1+0 的读入
记录了1+0 的写出377487360字节(377MB)已复制,3.20527 秒,118MB/秒
ln
功能: ln命令用于创建链接文件。
格式: ln [选项] 目标。
实际代码和结果:
创建一个硬链接,并查看一下当前目录:
$ ln myfile hard
$ ls -li
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile
然后我们修改一下刚才创建的hard 链接文件:
$echo "New line" >> hard
$cat myfile
Thisis a plain text file.
Newline
可以看到,这两个文件实际就是一个文件。
再建一个软链接文件:
$ ln -s myfile soft
$ ls -li
25869085 -rw-r--r-- 2 unixzii staff 36 78 17:45 hard
25869085 -rw-r--r-- 2 unixzii staff 36 78 17:45 myfile
25869216 lrwxr-xr-x1 unixzii staff 6 7 8 17:47 soft -> myfile
删除 myfile 文件,然后分别输出软硬链接的文件内容:
$ rm myfile
$ cat hard
This is a plain text file.
New line
$ cat soft
cat: soft: No such file or directory
再向这个软链接写点东西:
$echo "Something" >> soft
$ls
hardmyfile soft
刚才删除的myfile 文件竟然又出现了!当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。
硬链接:与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
软链接:保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。
压缩解压类命令
tar
功能: tar命令用于对文件进行打包压缩或解压。
格式: tar [选项...] [FILE]...。
例:
tar -cvf etc.tar /etc 将/etc目录打包放在当前目录
tar -tvf etc.tar 查看打包文件etc.tar中的文件内容参数
tar -xvf etc.tar 将打包后的文件解包到当前目录
tar -xvf etc.tar -C /root 将打包后的文件指定解包到/root目录下
tar -czvf etc.tar.gz /etc 将/etc目录通过gzip格式进行打包压缩
tar -xzvf etc.tar.gz 将压缩文件解压到当前目录
gzip
功能:gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个的文件,使用gzip压缩默认会在文件后加上.gz后缀并将源文件删除。
格式:gzip [参数] [文件]。
gzip命令使用参数-c能够指定输出并保留源文件。
例:使用gzip将文件/root/anaconda-ks.cfg压缩为anaconda-ks.cfg.gz并保留源文件
[root@localhost ~]# gzip -c anaconda-ks.cfg > anaconda-ks.cfg.gz gzip命令使用参数-c能够指定输出并保留源文件。
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz
gunzip
功能: gunzip命令用于解压缩gzip格式文件。
格式: gunzip [参数] [文件]。
zip
功能: zip命令用来压缩文件,适用于压缩多个文件的格式。
格式: zip [参数] [打包后的文件名] [打包的目录路径]。
unzip
功能: unzip命令用于解压缩zip文件。
格式: unzip [参数] file[.zip] 。
查找类命令
which
功能: which命令用来查找系统PATH目录下的可执行文件命令所在的位置。
格式: which [参数] 命令名称。
示例:查找命令cd所在的位置
[root@localhost ~]# which cd
/usr/bin/cd
whereis
功能: 寻找二进制文件、man手册页和源代码文件等相关文件的路径。
格式: whereis [-bms] 命令名称。
示例:
[root@localhost ~]# whereis cd
cd:/usr/bin/cd /usr/share/man/man1/cd.1.gz/usr/share/man/man1p/cd.1p.gz
从左向右依次为查询到的二进制程序、源文件、cd命令的man手册页路径
locate
功能: locate命令用于按照名称快速搜索文件所对应的位置。
格式: locate [参数]... [PATTERN]。
实例:
示例1:搜索etc目录下所有以m开头的文件
[root@localhost ~]# locate /etc/m
示例2:新增的文件在locate前先使用updatedb命令更新数据库,否则查找不到
[root@localhost~]# touch new.txt
[root@localhost~]# locate new.txt
[root@localhost~]# updatedb
[root@localhost~]# locate new.txt
/root/new.txt
find
功能: find 命令用于按照指定条件来查找文件。
格式: find [查找路径] 寻找条件 [操作]。
➢ 使用-name选项:按文件名称查找
例1:在当/etc目录中查找passwd文件
[root@localhost~]# find /etc -name passwd
例2:在当前目录及子目录中查找所有的*.log文件
[root@localhost~]# find . -name "*.log"
例3:在当前目录及子目录中查找文件名以一个大写字母开头的文件
[root@localhost~]# find . -name "[A-Z]*"
例4:查看HOME目录中的文件
[root@localhost~]# find ~ -name "*"
例5:在/etc目录中查找文件名以host开头的文件
[root@localhost~]# find /etc -name "host*"
例6:在当前目录查找文件名以一个个小写字母开头,最后是4到9加上.log结束的文件
[root@localhost~]# find . -name "[a-z]*[4-9].log"
➢ 使用-perm选项(表示权限,permission)
-perm 444 #查找文件权限
-perm -444 # -表示并且;查找文件权限中u位有r权限,并且g位有r权限,并且o位有r权限的文件
-perm /444 # /表示或者;查找文件权限中u位有r权限,或者g位有r权限,或者o位有r权限的文件
例1:在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
[root@localhost~]# find . -perm 755
例2:查看当前目录下文件权限中u位有r权限,或者o位有r权限的文件
[root@localhost~]# find . -perm /404
例3:查看当前目录下文件权限中u位有r权限,并且o位有r权限的文件
[root@localhost~]# find . -perm -404
➢ 按文件所有人和文件所有组查找
find /test-user student #查找/test目录下文件的所有者为student的文件
find/test -group student #按照文件的所有组查找
find/test -user root -group student #默认表示并且
find/test -user root -a -group student #-a表示并且
find/test -user root -o-group student#-o表示或者find /test -not -user student # -not表示非,反向选择
➢ 按更改时间和访问时间查找
atime最后一次访问时间, 如cat, more 等
ctime最后一次状态修改时间, 如 chmod, chown 等状态
mtime最后一次内容修改时间
-mtime 10 #查找文件更新距离现在10天的文件
-mtime +10 #查找文件更新距离现在超过10天的文件
-mtime -10 #查找文件更新距离现在10天以内的文件
-ctime +/-10 #查找文件更新距离现在超过10天/10天以内的文件
例1:在系统根目录下查找更改时间在5日以内的文件
find / -mtime -5
例2:在/var/adm目录下查找更改时间在3日以前的文件
find/var/adm -mtime +3
例3:查找根目录下过去3天前的24小时以内有改动的文件
find/ -mtime 3
➢ 查找比某个文件新或旧的文件
-newer newest_file_name !oldest_file_name
默认:当前目录
例1:查找更改时间比文件log2012.log新但比文件log2017.log旧的文件
find . -newer log2012.log ! log2017.log
例2:查找更改时间在比log2012.log文件新的文件
find. -newer log2012.log
➢ 按类型type查找
-type #文件类型
主要的文件类型:
f #普通文件
d #目录 l #链接
b #块设备 c #字符设备
s #套接字 p #管道
例1:在/etc目录下查找所有的目录
find /etc -type d
例2:在当前目录下查找除目录以外的所有类型的文件find . ! -type d
搜索最近七天内被访问过的所有文件
[root@localhost ~]# find / -type f -atime-7
搜索恰好在七天前被访问过的所有目录
[root@localhost ~]# find / -type d -atime7
搜索超过七天前被访问过的所有文件
[root@localhost ~]# find / -type f -atime+7
➢ 按大小size查找
-size #文件大小
-size 20K # 查找大小为20K的文件
-size -20K # -表示小于;查找比20K小的文件
-size +20k # +表示大于;查看比20K大的文件
例1:在test目录下查找大小比20K小的文件
find /test -size 20k
例2:搜索大于10KB的类型为普通文件:
find . -type f -size +10k
➢ 按文件所在的层次查找
-maxdepth #最大深度
-mindepth #最小深度
find/etc/ -maxdepth 1 -name passwd
find/etc/ -maxdepth 2 -name passwd
find/etc/ -mindepth 1 -maxdepth 2 -name *.conf # 查找/etc目录下最少层次为1最多层次为2的以.conf结尾的文件
➢ 对查找到的文件执行某些操作
-exec 命令 {} \; #对查找到的文件执行某命令;-exec表示开始执行动作;{}表示用find命令查找出的所有文件;\;表示命令的结尾。
例1:将系统中属于mail组的文件备份到/mnt下
find/ -group mail -exec cp {} /mnt \;
例2:查找当前目录下当天修改过的文件,列出其详细信息find ./ -mtime -1 -type f -exec ls -l {} \;