目录
Linux文件系统 inode block superblock
uniq 去重 指排序过之后的去重,必须是相邻重复行才可以去重
find 实时查找,通过遍历指定的起始路径下文件系统层级结构完成文件查找
文件系统的层级结构标准 FHS
定义Linux系统中主要的目录和存放的内容
Linux操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构
[root@localhost /]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
/ :根目录 整个文件系统的起始节点/bin :用户在单用户模式下必须具备的二进制命令文件
/dev :必要的设备文件目录
/etc :系统配置文件
/home :普通用户家目录
/lib :依赖库
/lib64 :库文件 Glibc
/mnt :临时挂载点
/media :临时挂载点 可以热插拔的介质
/proc :虚拟的一个文件系统,系统启动后会将进程和内核信息以文件形式映射到系统上
/run :运行时变量数据 从本次启动到现在的系统信息
/srv :提供特定站点数据
/tmp :所有用户可以用来存放临时文件的目录
/var :系统在运行中内容不断发生改变的文件
/boot :boot lodeer文件
/opt :可选的应用程序包
/root :root用户家目录
/sbin :系统可执行的二进制命令文件
/sys :连接到计算机上的设备信息
/usr :用户的一些数据
常见的目录和文件
/etc 系统主要的配置文件存放目录
/etc/bashrc :用来定义系统范围内的函数和别名
/etc/crontab :计划任务的配置文件
/etc/fstab :记录系统中开机启动时所要自动挂载的相关文件系统列表
/etc/group :记录系统用户组的基本信息
/etc/gshadow :记录用户组密码
/etc/hosts :记录主机名和ip
/etc/issue :用户在登录系统前显示的信息
/etc/passwd :用户的基本信息
/etc/shadow :用户的密码信息
/etc/login.defs :设置用户账号的设置信息,再添加新用户时根据这个文件生成相应的显示内容
/etc/skel :添加新用户时将此目录中拷贝/home中并修改目录名为用户名
/etc/profile :每个用户的环境变量信息
/etc/profile.d :包含/etc/profile中需要执行的脚本
/etc/ssh :ssh服务配置文件
/etc/yum.repos.d :里面的配置文件用来连接系统和实际库 (yum仓库配置文件目录)
/proc 文件系统
/proc/bus :一些总线设备,USB的设备也记录在此
/proc/cpuinfo :处理器信息 如类型,制造商,型号,功能
/proc/net :网络协议状态信息
/proc/dma :显示当前使用的DMA通道
/proc/sys :存储内核运行的参数
/proc/uptime :系统启动的时间长度
/proc/ksyms :核心符号表
/var 系统在运行中内容不断发生改变的文件
/var/cache :应用程序本身运行过程中产生的一些暂存文
/var/lib :程序本身执行的过程中,需要使用到数据文件放置的目录
/var/local :存放安装程序的可变数据(系统管理员安装的程序)
/var/lock :锁定文件
/var/log :各种程序的日志文件
/var/run :保存在下一次系统引导有效的关于系统的信息文件
Linux文件目录常用管理命令
mkdir 创建目录
mkdir [OPTION]... DIRECTORY...
-p :递归创建
-v :显示创建过程
[root@localhost tmp]# mkdir -pv one/two
mkdir: created directory ‘one’
mkdir: created directory ‘one/two’
- 创建以下目录
- mylinux
- bin
- sbin
- usr
- bin
- sbin
- local
- etc
- sysconfig
- media
[root@localhost tmp]# mkdir -pv mylinux/{bin,sbin,usr/{bin,sbin,local},etc/{sysconfig},media}
mkdir: created directory ‘mylinux’
mkdir: created directory ‘mylinux/bin’
mkdir: created directory ‘mylinux/sbin’
mkdir: created directory ‘mylinux/usr’
mkdir: created directory ‘mylinux/usr/bin’
mkdir: created directory ‘mylinux/usr/sbin’
mkdir: created directory ‘mylinux/usr/local’
mkdir: created directory ‘mylinux/etc’
mkdir: created directory ‘mylinux/etc/{sysconfig}’
mkdir: created directory ‘mylinux/media’more less 逐屏显示文件内容(适合大文件)
more [options] file [...]
-num :一次显示num行+num :从第num行开始显示
操作命令:空格键 向下滚一屏
B 返回上一屏
cat 打印文件内容的标准输出(适合不超过20行的小文件)
cat [OPTION]... [FILE]...
[root@localhost tmp]# cat file
Hello Word!stat 查看文件的详细属性信息
stat [OPTION]... FILE...
[root@localhost tmp]# stat file
File: ‘file’
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 9151837 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2022-01-21 10:14:47.846804119 +0800
Modify: 2022-01-21 10:08:05.310826736 +0800
Change: 2022-01-21 10:14:47.846804119 +0800
Birth: -touch 改变指定文件的访问时间和修改时间创建文件
若没有文件则touch file创建文件 若已经拥有file文件则为修改文件
touch [OPTION]... FILE...
-a :只修改access time(访问时间)
[root@localhost tmp]# touch -a file
[root@localhost tmp]# stat file
File: ‘file’
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 9151837 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2022-01-21 10:14:47.846804119 +0800
Modify: 2022-01-21 10:08:05.310826736 +0800
Change: 2022-01-21 10:14:47.846804119 +0800
Birth: -
-d :指定时间-r :file 指定使用file的时间戳去更新文件
grep 过滤文本
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]diff 比较文件的差异
diff [OPTION]... FILES
[root@localhost tmp]# diff file file1
1c1
< Hello Word!
---
> Linux!!!-c :显示全部内文,并表处不同之处
-q :仅显示有无差异,不显示详细的信息
-y :以并列的方式显示文件的异同之处
[root@localhost tmp]# diff file file1 -y
Hello Word! | Linux!!!rm 删除文件或者目录或者子文件子目录
rm [OPTION]... FILE...
-f :强制先删除,删除不给提示-i :交互式删除,删除给提示
[root@localhost tmp]# rm -i file
rm: remove regular file ‘file’?-r(-R) :递归删除 删除子文件子目录
[root@localhost tmp]# rm -rf studyone-v :显示详细信息
mv 文件/目录改名或者更改存储位置
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE(从哪来)/文件名... DIRECTORY(到哪去)
mv [OPTION]... -t DIRECTORY SOURCE...
-b :当目标文件存在时,先备份在覆盖
[root@localhost tmp]# mv -b /mnt/study /tmp/-f :强制覆盖
[root@localhost tmp]# mv -bf /mnt/123 /tmp/-i :交互式移动
-t :先指定目标 在指定源文件
[root@localhost tmp]# mv -t /tmp/ /mnt/file
cp 拷贝
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE (从哪来)/文件名... DIRECTORY(到哪去)
cp [OPTION]... -t DIRECTORY SOURCE...[root@localhost tmp]# cp /tmp/file /mnt
-i :交互式复制
-f :强制覆盖
-r :递归复制
ln 在文件或目录之间创建连接的命令
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET (2nd form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
ln [OPTION]... -t DIRECTORY TARGET... (4th form)链接文件
硬链接:通过inode索引节点号来进行连接
软链接:类似于windows上的快捷方式
[root@localhost tmp]# ln file file_hard
-s 创建软链接
[root@localhost tmp]# ln -s file file_sort[root@localhost tmp]# ls -li
total 12
8830599 -rw-r--r--. 2 root root 17 Jan 22 11:36 file
8901649 -rw-r--r--. 1 root root 51 Jan 22 11:52 file1
8830599 -rw-r--r--. 2 root root 17 Jan 22 11:36 file_hard
8392329 lrwxrwxrwx. 1 root root 4 Jan 22 19:45 file_sort -> filefile 识别文件内容类型
file [-bchiklLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help][root@localhost tmp]# file file1
file1: ASCII text-f file :读取文件file中文件列表,并查看文件内容类型,而非查看file
[root@localhost tmp]# file -f file
/etc/fstab: ASCII text
/bin/mv: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3d1659181a1bdf21b51208da69474f5db5b35d41, stripped-b:不显示文件名
split 文档分割命令 默认是按照每1000行进行分割
-b:指定每一个文件的大小
[root@localhost tmp]# spilt -b 50K file
-d:以数字作为后缀 -a 指定后缀长度
[root@localhost tmp]# spilt -b 50k file -d -a 2
Linux文件系统 inode block superblock
inode:记录文件的属性信息,一个文件占用一个inode,同时记录文件的内容存放的block号码
block:实际记录文件内容的磁盘空间,不同文件大小,占用不同数量的block 一般一个block是4k大小
superblock:记录文件系统整体信息,包括inode/block的总量,使用量,剩余量 文件系统类型以及文件系统相关信息
磁盘的容量由inode和block同时决定
Linux文件删除原理
两个link计数器
i_count:调用的次数
i_nlink:文件的链接次数(硬链接)
对于rm命令而言,实际上是减少i_nlink
i_count=0&&i_nlink=0
Linux文件处理工具
cut 文件切割
cut OPTION... [FILE]...
-b:以字节单位进行切割
[root@localhost tmp]# cat file | cut -b 3,11
lo-c:以字符单位进行切割
-d:自定义分隔符
-f:与-d一起使用,指定显示那个区域
[root@localhost tmp]# cat file | cut -d" " -f 3
wordsort 用于字段排序
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
[root@localhost tmp]# cat file1
23asdasfdv:85asfasd:555
66adafasd:99asxzv:888
54acvxbdf:33safsfs:777-n:使用纯数字进行排序
[root@localhost tmp]# sort -n file1
23asdasfdv:85asfasd:555
54acvxbdf:33safsfs:777
66adafasd:99asxzv:888-r:反向排序
-u:去重
-t:指定分隔符
-k:与-t一起使用指定以那个域来排序
[root@localhost tmp]# sort -t ":" -f 2 file1
-o filename :output,结果输出到文件
uniq 去重 指排序过之后的去重,必须是相邻重复行才可以去重
uniq [OPTION]... [INPUT [OUTPUT]]
-c:显示出现的次数
[root@localhost tmp]# uniq file -c
-d:只显示重复的行
-D:显示所有重复行
-i:忽略大小写
-u:只输出唯一的行
-s:跳过前几个字符
-w:忽略第几个字符以后的内容
wc 文件中的字符、行数等等的统计
wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F[root@localhost tmp]# wc file
3 8 45 file-l:统计行数
-L:统计最长行的长度
-c:统计字节数
[root@localhost tmp]# wc -c file
45 file-w:统计字数
-m:统计字符数
文件内容搜索工具
文本处理工具三剑客 grep sed awk
正则表达式:由一类特殊的字符及文本编写成的一种模式,其中的字符和文本不代表
字面意思,二是表示控制或者通配的功能。
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...][root@localhost ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash--color=auto: 对匹配到的字符做高亮显示,
-i:忽略大小写
-o:仅显示匹配到的字符串
-E:使用扩展正则表达式
-n:显示行号
-v:显示不能被模式匹配到的行
-A num:后num行
-B num:前num行
-C num:前后num行
基本正则表达式
元字符:
字符匹配
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[0-9] 所有数字
[a-z] aAbB......z
[A-Z] AbB......zZ
[[:lower:]] 小写字母
[[:upper:]] 大写字母
[[:digit:]] 数字
[[:alpha:]] 所有字母
[[:punct:]] 标点符号
[[:alnum:]] 数字+字母
[[:space:]] 空白字符
[^[:lower:]] 除小写字母
[root@localhost ~]# grep "r[[:alpha:]][[:alpha:]]t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin匹配次数
*:匹配其前面的字符任意次 0次1次或者多次
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或者1次
\+:匹配其前面的字符1次或者多次
\{m\}:匹配其前面的字符m次
\{m,n\}:匹配其前面的字符至少m次 至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
位置锚定
^:行首锚定,用于模式的最左侧
[root@localhost ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash$:行尾锚定,用于模式的最右侧
^$:空行
^[[:space:]]$:空行,包含空白字符的行
^pattern$:用pattern来匹配整行
\< 或者\b:词首锚定,用于单词的左侧
\> 或者\b:词尾锚定,用于单词的右侧
\<word\>:匹配一个完整单词
[root@localhost ~]# grep "\<root\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin分组及引用
\(\):将一个或者多个字符捆绑在一起,当作一个整体来处理
\(\(\(\)\)\)
\1
\2
\3
.....
文件搜索命令
which 查找可执行文件 依赖PATH
which [options] [--] programname [...]
[root@localhost ~]# which cd
/usr/bin/cdwhereis 查看文件位置
whereis [options] [-BMS directory... -f] name...
[root@localhost ~]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz-b:只显示文件位置
-m:只显示man手册位置
[root@localhost ~]# whereis -m cd
cd: /usr/share/man/man1/cd.1.gz配置yum仓库
# cd /etc/yum.repos.d
# mkdir bak
# mv C* bak
# vi yum.repo
[base]
name=centos7
baseurl=file:///media
gpgcheck=0
enabled=1
检查虚拟机的光驱是否是连接状态
# mount /dev/sr0 /media/ ---每一次重启之后,都要执行这条命令
# yum clean all
# yum makecache
# yum install mlocate -y
locate 初次安装 执行updatedb创建数据库
会构建数据库
查找速度快,模糊查找
非实时查找
find 实时查找,通过遍历指定的起始路径下文件系统层级结构完成文件查找
查找速度慢
实时查找,精确查找
find [options] [查找起始路径] [查找条件] [处理动作]
查找条件:
文件名 支持通配符
-name filename:按名字查找
[root@localhost ~]# find /tmp -name file
-iname filename:忽略大小写
文件从属关系
-user USERNAME:查找属主指定用户的所有文件
[root@localhost ~]# find /var -user root-group GRPNAME:查找属组指定组成的所有文件
-uid UID:查找属主指定的UID的所有文件
-gid GID:查找属组指定的GID的所有文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
文件类型
-type TYPE
f:普通文件
[root@localhost ~]# find -type f
d:目录
b:快设备
c:字符设备
l: 链接文件
p:管道文件
s:套接字文件
文件大小
-size [+|-]#num
#num:等于
+#num:大于
[root@localhost ~]# find /var -size +1M
-#num:小于
时间戳:
以天为单位
-atime [+|-]#:访问时间 -amin:分钟
[root@localhost ~]# find -atime -7
-ctime:文件改变时间
-mtime:修改时间
# :# 到 #+1 天之间
+#:#+1 天之前
-#:#天以内
[root@localhost ~]# find -atime -7
根据权限查找:
-perm [/ l -]mode
mode:精确权限匹配
[root@localhost ~]# find /var -perm -555-:每一类用户(ugo)的权限中每一位(rwx)同时符合条件才满足 权限位与关系
/:每一类用户(ugo)的权限中任何一位(rwx)符合条件才满足 权限位或关系
根据目录层级:
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-maxdepth:在某个层次目录中按照递减方法查找
-mindepth:在某个层次目录中按照递减方法查找
逻辑关系
与 -a
或 -o
非 -not !
处理动作:默认是打印到标准输出
-ok commond {} \;:执行动作之前先提示,即需要交互
-exec commond {} \;:找到结果之后直接执行动作
| xargs
[root@localhost ~]# find /etc -perm -555 | xargs ls