1.文件管理概述
1.Bash Shell对文件进行管理
谈到Linux文件管理,首先我们需要了解的就是,我们要对文件做些什么事情? 其实无非就是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等 例如 : 当我们想修改系统的主机名称,是否应该知道文件在哪,才能去做对应的修改?
2.内容摘要
系统目录结构 文件路径定位 文件管理命令 文件类型file 链接文件ln 文件编辑vim
2.系统目录结构
几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”。 Windows: 以多根的方式组织文件 C: D: Linux:以单根的方式组织文件 /
如下图为Centos7的目录结构
文件和目录被组织成一颗倒置的树状结构
文件系统从根开始,“/”
文件名称严格区分大小写
隐藏文件以"."开头
路径的分隔符为"/"
1 文件命名规范
文件字符最长为255个字符
包括路径在内文件名称最长为4095个
颜色表示
蓝色 ---> 文件夹
绿色 --> 可执行文件
红色 --> 压缩文件
蓝绿色 --> 链接文件
灰色-->其他文件
白色 --> 文件
除了斜杠和NULL,其他所有字符都可以使用
对大小写敏感
2 文件系统结构
/boot 引导文件的存放位置,内核文件、引导加载器都在此目录
/bin 所有的用户都可以使用的命令
/sbin 管理类的命令
/lib 启动时程序使用的基本库文件 .so结尾
/lib64 专门存放X86_64系统上得辅助库文件
/etc 存放配置文件
/home/USERNAME 普通用户的家目录
/root 管理员的家目录
/media 便携式移动设备的挂载点
/mnt 临时文件的挂载点
/dev 设备文件和特殊文件的存放位置
/opt 第三方的应用的安装位置
/tmp 临时文件的存放位置
/usr 存放安装程序
/var 存放经常变化的文件,比如日志
/proc 存放内核启动和进程相关的虚拟文件
/sys 输出当前系统上的硬件相关的文件
/srv 系统上允许的服务用到的数据
1.存放命令相关的目录
/bin, 普通用户使用的命令 /bin/ls, /bin/date /sbin,管理员使用的命令 /sbin/service,poweroff,useradd…
只要看到bin路径,就应该意识到放的是可执行文件
2.存放用户相关数据的家目录,比如:windows不同的用户登陆系统显示的桌面背景不一样
/home,普通用户的家目录, 默认为/home/username
环境变量的东西不要删,删掉试一下
/root,超级管理员root的家目录, 普通用户无权操作
3.系统文件目录
/usr,相当于C:Windows
/usr/local,软件安装的目录,相当于C:Program
/usr/bin/,普通用户使用的应用程序(重要)
/usr/sbin,管理员使用的应用程序(重要)
/usr/lib,库文件Glibc 32bit
/usr/lib64,库文件Glibc 64bit
# 1
df -h #df -h查看系统中文件的使用情况
Size 分割区总容量
Used 已使用的大小
Avail 剩下的大小
使用的百分比
Mounted on 路径地址
# 2
du -sh * 查看当前目录下各个文件及目录占用空间大小
du -sh /usr/
# 3 标准是实现自动化的基础
不通主机的相同的软件,都放在相同路径下,便于管理,实现自动化
现在一般安装的软件,不放在/usr/local下了
# 4 总共有一千来个命令
ls /usr/bin/ | wc -l
ls /usr/sbin/ | wc -l
# 5 查看命令依赖那些库文件
ldd /bin/ls
4.启动目录
/boot 存放的系统启动相关的文件,例如:kernel,grub(引导装载程序)
ls /boot
# linux内核
# 启动机器时可以选择的启动模式
5.配置文件目录
/etc,极其重要,后续所有å服务的配置都在这个目录中
/etc/sysconfig/network-script/ifcfg-,网络配置文件
/etc/hostname,系统主机名配置文件,主机名很重要,有些特殊服务要依赖主机名,没有主机名会报错起不来;修改了要重启:reboot
/etc/resolv.conf,dns客户端配置文件,域名解析服务器,一般我们不配置,因为网卡的配置好了,会覆盖掉它,网卡的优先级高
/etc/hosts,本地域名解析配置文件,域名解析,先找自己的hosts,再去域名解析
# 1
/etc/hosts 对应windows C:windows/system32/drivers/etc/hosts,黑客钓鱼网站
# 2 测试修改
yum install httpd -y
systemctl stop firewalld
echo "lqz NB" >/var/www/html/index.html
systemctl start httpd
6.可变的目录与临时目录
/var,存放一些变化文件,比如
/var/log/下的日志文件,登陆日志
/var/tmp,进程产生的临时文件 /tmp,系统临时目录(类似于公共厕所),谁都可以使用
# 1 查看登陆日志
cat /var/log/secure #查看登陆时间
# 2 进程产生的临时文件(360清理垃圾,就是会清理)
7.设备目录文件
/dev,存放设备文件,比如硬盘,硬盘分区,光驱,等等
/dev/sd 硬盘设备
/dev/null,黑洞设备,只进不出。类似于垃圾回收站
/dev/random,生成随机数的设备
/dev/zero,能远远不断的产生数据,类似于取款机,随时随地取钱
# 1 sda sdb sdc sda1 sdb4
linux中磁盘文件叫sd,第一个硬盘叫a,第二个叫b,sda1表示第一个磁盘的第一个分区,sdb4:第二个硬盘的第四个分区(服务可以插很多硬盘)
# 2 /dev/null
ls >/dev/null
# 3 /dev/random 生成随机数
echo $RANDOM
echo lqz_$RANDOM
批量创建随机用户,批量设置密码
# 4 源源不断取数据
dd if=/dev/zero of=/opt/test.txt bs=1M count=1024
'''
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
'''
ll /opt/test.txt
ll -h /opt/test.txt
8.虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)
/proc,反映系统当前进程的实时状态 :process
PS:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了。
ls /proc # 可以看到很多id号,pid号,进程号,唯一
ls 进程id号的文件夹
如果进程被关闭,id号的文件夹就没了
id号每次启动都不唯一,只有一个进程唯一,systemd 是进程号1的进程,所有进程都是基于它派生出来的
9 其他
#1 media:提供设备的挂载点,媒体文件
# linux 新增了盘符,需要手动挂载
# 把光盘里的数据,挂载到media目录
mount /dev/cdrom /media/
# 2 mnt:提供设备的挂载点(同上)
# 3 opt:第三方工具,第三方软件默认安装的(mysql...)
# run :下有pid,log结尾的文件
ls /run
cat sshd.pid # 进程运行的pid号,放在文件中
ps aux |grep sshd
# .lock文件的作用,锁机制
# 假设现在执行
yum install tree
# 再开一个窗口执行相同命令
yum install tree
'''
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: yum
Memory : 71 M RSS (470 MB VSZ)
Started: Tue Aug 18 00:26:31 2020 - 00:24 ago
State : Sleeping, pid: 6191
'''
cat /run/yum.pid
10.PS: 在Linux7系统中,
/bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下
/bin –> /usr/bin
/sbin –> /usr/sbin
lib -> usr/lib
lib64 -> usr/lib64
3 linux应用程序的组成
二进制文件
/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin
库文件
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
配置文件
/etc
/etc/name
/usr/local/etc
帮助文件
/usr/share/man
/usr/share/doc
/usr/local/share/man
/usr/local/share/doc
3 绝对路径和相对路径
在我们开始操作文件前,首先需要对文件进行定位,比如: 你要在哪创建什么文件? 你要将文件复制到什么地方? 或者你要删除的文件在什么地方?
那什么是定位: 比如/etc/hostname,整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,那么路径就是对文件进行定位的一种方式。例:如下图的message所在的路径是?
提问FQ: /home/oldboy/file 和/home/oldgirl/file是否是同一个文件?
1.每个目录下都有一个.和..的目录是干啥的?
一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。
假设当前目录在/usr/
下, 那么它的上层(/)目录用../
表示, 而/usr/
的下层(local)目录则用./local
表示。
2.那什么是绝对路径,什么又是相对路径呢?
绝对路径: 只要从/开始的路径,比如/home/alice/file
相对路径: 相对于当前目录来说,比如 a.txt ./a.txt ../bob/a.mp3 [加入: 此时在目录/home/alice]
小结: 所谓的(.)和(..)目录实际上属于相对路径的一种表示形式。
3.绝对路径与相对路径示例
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
cd改变目录,常见的使用方法
cd 绝对路径 cd /etc/hostname
cd 相对路径 cd test/abc cd . cd ..
# cd #切换目录,例: cd /etc
cd - #切换回上一次所在的目录
cd ~ #切换回当前用户的家目录,注意:root和普通用户是否有所不同吗?
cd . #代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./
cd .. #切换回当前目录的上级目录
绝对路径
以根开始
完整的文件的存放位置
可以读取到任何一个文件或者文件夹
相对路径
不以根开始
相对当前的位置来决定
可以简短的表示一个文件或者文件夹
. 当前目录
.. 父级目录
4 目录
1 目录名和基名
[root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33
[root@localhost log]#basename /etc/sysconfig/network-scripts
network-scripts
[root@localhost log]#dirname /etc/sysconfig/network-scripts
/etc/sysconfig
[root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts
2 切换目录
cd 切换目录 change directory
可以使用相对路径
可以使用绝对路径
3 切换到家目录
[root@localhost log]#cd
[root@localhost ~]#
4 切换到上一次的目录
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cd -
/root
[root@localhost ~]#cd -
/etc/sysconfig/network-scripts
5 显示当前的工作目录
pwd print working directory
[ ]
/etc/sysconfig/network-scripts
[ ]
[ ]
/usr/lib
6 列出目录或者文件
ls list
命令格式:Usage: ls [OPTION]... [FILE]...
ls -a 显示所有文件
ls -l 以长格式显示文件列表
total 21104
1 root root 0 Aug 22 17:21 10
硬盘的引用次数 属主 属组 大小 访问时间 文件名称
ls -R 递归显示目录
ls -d 显示目录本身
ls -1(数字1) 文件分行显示
ls -S 安装文件大小排序
ls -r 倒序显示
ls -t 按照时间来排序
ls -lh 显示人类易读的方式
ls -d */ 显示当前目录下的文件夹
只显示隐藏文件
7 查看文件类型
file 比ll命令,更准确和详细
m[root@192 test]#file /run/gssproxy.sock
/run/gssproxy.sock: socket
8 linux下的目录类型
- 用来表示文件
d 用来表示目录
b 块设备
c 字符设备
l 表示符号链接文件
s socket套接字
5 系统文件管理: 创建/复制/移动/删除
1.查看文件状态
~]#stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1747 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574992 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-08-22 12:09:03.288000381 +0900 # 访问时间
Modify: 2019-08-22 11:47:12.262947345 +0900 # 修改时间
Change: 2019-08-22 11:47:12.262947345 +0900 # 改动时间
atime 访问时间 查看文件内容就会改变
mtime 修改时间 改变内容发生变化
ctime 改动时间 元数据发生变化
2.touch
创建空文件和刷新时间,如果文件存在,则刷新时间,如果文件不存在,则创建文件
touch -a a
-a 只修改atime和ctime
touch -m a
-m 只修改mtime和ctime
m[root@192 test]#touch file{a..z} 创建后缀为a到z名的文件
m[root@192 test]#touch file{A..Z}
m[root@192 test]#touch file{0..9}
3.文件通配符
* 所有
? 匹配的是任意单个字符
~ 表示用户的家目录
[123] 其中一个
[^123] 取反
[0-9] 表示数字
file[a-z] 字母(有坑)缺少Z
file[A-Z] 字母(有坑)缺少a
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 所有字母 a-zA-Z
[:alnum:] 表示字母和数字
[:digit:] 表示数字
4.创建目录
mkdir 创建目录
-p 递归创建
-v 显示详细过程
5.显示目录树
安装:yum install -y tree
tree 显示目录树
-d 只显示文件夹
-L # 只显示#层
选项: -L: 显示目录树的层级
#显示当前目录下的结构 tree /home/od/
/home/od/
├── but
├── dir1
├── dir2
├── dir3
├── dir4
├── dir5
│ └── dir6
└── diu
6.删除目录
rmdir 只能删除非空目录
-p 递归删除空父目录
-v 显示删除过程
rm -rf 删除非空目录
7.复制文件和文件夹
cp copy 默认情况下是别名,原来本身命令是不提示覆盖的
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...
显示提示信息
不覆盖
-R 递归复制
只复制链接文件,不复制源文件
归档
显示过程
备份原来的文件
number 备份文件加上数字 =
保留原来的属性
如果源文件是文件的话
在文件夹中新建一个同名的文件,并把文件内容写到新文件中
目标文件如果不存在的话,则新建目标文件,并把内容写到目标文件中
如果目标文件存在的话,本来的命令是直接覆盖,建议使用-i来提示用户
目标是文件
目标是文件夹
如果源文件为多个文件的话
目标必须是文件夹,文件夹必须存在,其他情况都会报错
如果源文件是文件夹的话
如果是文件的话,则报错
如果是文件夹:则在目标文件夹中创建同名文件夹,并把所有数据都复制到新文件夹
目标文件是文件: 不可以
目标文件必须是文件夹,必须使用-r选项
如果目标文件不存在:则直接创建目标文件夹,并把源文件夹的数据都复制到目标文件夹
如果目标文件存在:
8.移动、重命名
mv move
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
-i 提示
-f 强制
-b 备份
--backup=number 备份后面加数字
-v 显示过程
9.删除
rm remove
Usage: rm [OPTION]... FILE...
提示
-R 递归删除
强制删除
rm -rf 慎用
rm -rf /*
cd /
rm -rf *
在虚拟机中,执行删除前,记得快照
6 文件管理之:查看文件内容(cat tac less more head tail tailf grep …)
------cat
cp /etc/passwd ./pass
#正常查看文件方式 cat pass
#-n显示文件有多少行 cat -n pass
#查看文件的特殊符号,比如文件中存在tab键 cat -A pass
#倒序查看文件 tac pass
cat >> test2.txt <<EOF
ads
adf
EOF
#------less、more
#使用光标上下翻动,空格进行翻页,q退出 less /etc/services
#使用回车上下翻动,空格进行翻页,q退出(有百分比) more /etc/services
#------head
#查看头部内容,默认前十行 head pass
#查看头部5行,使用-n指定 head -n5 pass
# 只看头部5个进程 ps aux | head -5
#------tail
# 查看文件尾部,默认10行 tail pass
log/secure # 查看文件尾部20行 tail -20 /var/
log/messages #-f动态查看文件尾部的变化 tail -f /var/
log/messages #查看文件尾部的变化 tailf /var/
ps aux | tail -2
#------grep过滤文件内容
"^root" pass #匹配以root开头的行 grep
"bash$" pass #匹配以bash结尾的行 grep
"ftp" pass #忽略大小写匹配 grep -i
"sync$|ftp" pass #匹配文件中包含sync结尾或ftp字符串 grep -Ei
"Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的下2行 grep -n -A 2
"Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上2行 grep -n -B 2
"Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上下2行 grep -n -C 2
# 上翻,下翻
control+b:下翻
control+f:上翻
cat 显示文本
-E 显示结尾的$符
-n 对显示的每一行进行编号
-b 对非空行进行编号
-s 对连续的空行进行压缩
tac 倒序显示
m[root@192 test]#cat issue
\S
Kernel \r on an \m
m[root@192 test]#tac issue
Kernel \r on an \m
\S
less 分屏显示文本
向下翻一屏 空格
向下翻一行 回车
q 退出
/ 文本 搜索文本
n 向下查找 N向上查找
less 是man命令的默认分页器
more 分页显示文件
默认情况下显示读取的百分比
读取完成自动退出
q 退出
-d 显示翻屏和退出的提示
head 显示文件的前面的内容
默认显示前10行
-# 显示前#行
head -2 passwd
-n # 显示前#行
-c # 显示前#个字符
tail 显示文件的后面的内容
默认显示后10行
-# 显示后#行
-n # 显示后#行
-c # 显示后#个字符,换行符也是一个字符
m[root@192 test]#tail -c 3 passwd
sh
7 文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、)
cut 切割
cut OPTION... [FILE]...
按照字符切割
tail passwd |cut -c2-5
指定切割符,默认是tab
# 显示第#个字段
#,#,# 显示离散的多个
#-# 表示连续的
可以结合使用
# 以冒号为切割
tail passwd |cut -d: -f1-5,7
tail passwd |cut -d: -f1-5
tail passwd |cut -d: -f1,3,5
cut OPTION... [FILE]...
选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -c 按字符取(空格也算)
echo "Im lqz, is QQ 306334678" >file.txt
过滤出文件里 lqz以及306334678
#实现上述题目几种思路
" " -f2,5 file.txt cut -d
" " -f2,5 file.txt |sed 's#,##g' cut -d
's#,# #g' file.txt | awk -F " " '{print $2 " " $5}' sed
'{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}' awk
"[, ]" '{print $2,$6}' file.txt awk -F
'[, ]+' '{print $2,$5}' file.txt awk -F
# awk 取列
awk '{print $2,$5}' file.txt
-F 指定分隔符
awk '{print $2,$5}' file.txt | awk -F "," '{print $1,$2}'
# sed 替换 sed 's###g'
's###g' 固定写法 sed
's#,##g' 把逗号替换成空 sed
cut -d " " -f2,5 file.txt | sed 's#,##g'
paste 合并
默认是相同行合并到一起,默认是tab键
-d 执行间隔符
-s 将所有的行按照列来显示
paste a.txt b.txt
paste -d: a.txt b.txt
paste -s a.txt b.txt
wc 用来对文本进行统计
[root@localhost test]#wc b.txt
4 5 20 b.txt
行数 单词数 字节数 文件名
-l 只显示行数
-w 只显示单词数
-c 只显示字节数
-m 只显示字符数
-L 显示文件中最长行的长度
wc [OPTION]... [FILE]...
选项:-l显示文件行数 -c显示文件字节 -w显示文件单词
# wc -l /etc/fstab #统计/etc/fstab文件有多少行
#统计/etc/services 文件行号 wc -l /etc/services
#统计当前路径下有多少文件和文件夹 ls |wc -l
#扩展方法
"." /etc/services | tail -1 grep -n
'{print NR $0}' /etc/services | tail -1 awk
cat -n /etc/services | tail -1
sort 排序
在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时就需要使用sort进行排序了。
Usage: sort [OPTION]... [FILE]...
or: sort [OPTION]... --files0-from=F
默认是按照字母排序
-r 倒序
-R 随机排序
-n 按照数字排序
-f 忽略大小写
-t 指定分隔符
-k # 指定按照第#个字段进行排序
sort -t: -k3 passwd
sort -nt: -k3 passwd
sort [OPTION]... [FILE]...
# -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1 3.1,3.3)
#1.首先创建一个文件,写入一写无序的内容
[root@lqz ~]# cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF
#2.使用sort下面对输出的内容进行排序
[root@lqz ~]# sort file.txt
a:4
b:3
c:2
d:1
e:5
f:11
#结果并不是按照数字排序,而是按字母排序。
#可以使用-t指定分隔符, 使用-k指定需要排序的列。
# -t 指定分隔符,-k指定列,按第二列排序
[root@lqz ~]# sort -t ":" -k2 file.txt
d:1
f:11 #第二行为什么是11?不应该按照顺序排列?
c:2
b:3
a:4
e:5
#按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。
#如果想要按照数字的方式进行排序, 需要使用 -n参数,按数字排序。
[root@lqz ~]# sort -t ":" -n -k2 file.txt
d:1
c:2
b:3
a:4
e:5
f:11
#测试案例,下载文件http://fj.xuliangwei.com/public/ip.txt,对该文件进行排序
[root@lqz ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt
uniq合并相同的行
如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq
命令解决这个问题(但是必须配合sort
使用,相邻的才能去重,所以要配合sort)。
相邻
完全一样
-c 显示相同的行出现的次数
-d 只显示重复的行
-u 显示从没有重复过的行
# d文件以空格为切割,第4的一个字符排序,显示相同的行出现的次数
cut -d" " -f4 d|sort |uniq -c
uniq [OPTION]... [INPUT [OUTPUT]]
#选项:-c 计算重复的行
#1.创建一个file.txt文件:
[root@lqz ~]# cat >>file2.txt <<EOF
abc
123
abc
123
EOF
#2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起
[root@lqz ~]# cat file.txt |sort
123
123
abc
abc
#3.使用uniq去除相邻重复的行
[root@lqz ~]# cat file.txt |sort|uniq
123
abc
#4.-c参数能统计出文件中每行内容重复的次数
[root@lqz ~]# cat file.txt |sort|uniq -c
2 123
2 abc
pv page # 一天访问量
uv user # 访问用户
diff 对比文件
[root@localhost test]#echo "123" >> f
[root@localhost test]#diff d f
11a12
> 123
[root@localhost test]#echo "1234" >> d
[root@localhost test]#diff d f
12c12
< 1234
---
> 123
8 系统文件属性
当我们使用ls -l列目录下所有文件时,通常会以长格式的方式显示,其实长格式显示就是我们Windows下看到的文件详细信息,我们也将其称为文件属性,那整个文件的属性分为十列。
[root@lqz ~]# ls -l ks.cfg
[root@lqz ~]# ll -h ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg
#
-rw-------. ①:第一个字符是文件类型,其他则是权限
1 ②:硬链接次数
root ③:文件属于哪个用户
root ④:文件属于哪个组
4434 ⑤:文件大小
May30 13:58 ⑥⑦⑧:最新修改的时间与日期
ks.cfg ⑨:文件或目录名称
9 系统文件类型
1.通常我们使用颜色或者后缀名称来区分文件类型,但很多时候不是很准确,所以我们可以通过ls -l以长格式显示一个文件的属性,通过第一列的第一个字符来近一步的判断文件具体的类型。
[root@lqz ~]# ll -d /etc/hosts /tmp /bin/ls /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
-rwxr-xr-x. 1 root root 117656 Jun 30 2016 /bin/ls
srw-rw-rw-. 1 root root 0 Jan 20 10:35 /dev/log
brw-rw----. 1 root disk 8, 0 Jan 20 10:36 /dev/sda
crw--w----. 1 root tty 4, 1 Jan 20 10:36 /dev/tty1
lrwxrwxrwx. 1 root root 22 Jan 13 11:31 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 199 Jan 20 11:03 /etc/hosts
prw-------. 1 root root 0 Jan 20 10:36 /run/dmeventd-client
drwxrwxrwt. 61 root root 8192 Jan 21 13:01 /tmp
#说明
- #普通文件(文本, 二进制, 压缩, 图片, 日志等)
d #目录文件
b #设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
c #设备文件(字符设备),终端 /dev/tty1, /dev/zero
s #套接字文件, 进程间通信(socket)
p #管道文件
l #链接文件
2.但有些情况下,我们无法通过ls -l文件的类型,比如: 一个文件,它可能是普通文件、也可能是压缩文件、或者是命令文件等,那么此时就需要使用file来更加精准的判断这个文件的类型。
[root@lqz ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@lqz ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped
[root@lqz ~]# file /dev/sda
/dev/sda: block special
[root@lqz ~]# file /dev/tty1
/dev/tty1: character special
[root@lqz ~]# file /etc/grub2.cfg
/etc/grub2.cfg: broken symbolic link to `../boot/grub2/grub.cfg'
[root@lqz ~]# file /home
/home: directory
[root@lqz ~]# file /run/dmeventd-client
/run/dmeventd-client: fifo (named pipe)
[root@lqz ~]# ll but
-rw-r--r-- 1 root root 42125 Apr 1 12:26 but
[root@lqz ~]# file but
but: Zip archive data, at least v1.0 to extract
PS: Linux文件扩展名不代表任何含义,仅为了我们能更好的识别该文件是什么类型。
10 链接
文件有文件名与数据,在Linux上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。 用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方,我们将其称为Block 元数据,即文件的附加属性,如文件大小、创建时间、所有者等信息。我们称其为Inode 在Linux中,inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号) 文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图1.展示了程序通过文件名获取文件内容的过程。
1 软链接
相当于windows的快捷方式
创建命令 ln -s 源文件 目标文件
可以对目录做软链接
指向另外的一个文件或者目录的路径,大小是路径的长度的字符
对磁盘引用次数没有影响
可以跨分区
源文件发生改变,软链接会跟着发生变化
源文件删除,软链接不能访问
#文件软链接示例
touch /root/file
ln -s /root/file /tmp/file_bak
ll /tmp/file_bak //root下file链接到/tmp下并重命名为file_bak
#目录软链接示例
mkdir /soft/nginx1.1 -p
ln -s /soft/nginx1.1/ /soft/nginx
ll /soft/nginx //查看链接指向
#软链接使用场景
1.软件升级
3.不方便目录移动
2 硬链接
磁盘引用次数会发生变化
指向的是硬盘上的同一块区域
磁盘的引用数会随着硬链接次数来增加
不能对目录做硬链接
不能跨越分区
源文件发生改变,硬链接也会跟着变化
源文件删除以后,硬链接可以访问
#文件硬链接示例
ln /root/file /tmp/file_hard
ll /tmp/file_hard
#PS:目录不能创建硬链接,硬链接文件可以用rm命令删除
3 硬链接与软链接区别
1)ln命令创建硬链接,ln -s命令创建软链接。 2)目录不能创建硬链接,并且硬链接不可以跨越分区系统。 3)目录软链接特别常用,并且软链接支持跨越分区系统。 4)硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。 5)删除软链接文件,对源文件及硬链接文件无任何影响。 6)删除文件的硬链接文件,对源文件及链接文件无任何影响。 7)删除链接文件的源文件,对硬链接无影响,会导致软链接失效。 8)删除源文件及其硬链接文件,整个文件会被真正的删除。
链接:https://www.cnblogs.com/coderxueshan/p/17920414.html
(版权归原作者所有,侵删)