3.1 Linux目录、路径、掌握目录路径切换
3.1.1 Linux目录用途
首先下载 tree命令
yum install -y tree
使用 tree 查看
tree / # 查看/目录下的树状图
常见目录的用途
/:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件
/bin 存放的管理命令
/sbin 存放的系统命令
/root 超级管理员的家目录
/home 普通用户的家目录
/dev 设备文件主目录 比如移动硬盘 都是块设备文件
/etc 配置文件的主目录
/tmp 临时文件的主目录
/opt 第三方安装程序的主目录
/lib 库文件目录
/proc 伪文件系统存放的是cpu内存的一些息
/sys 伪文件系统跟硬件设备属映射文件
/srv 存放的是服务器启动后需要提取的数据
/mnt 挂载点目录
/media 挂载点目录 移动设备
/boot 系统启动文件目录 包含启动文件内核
/run 与程序运行的相关消息
/var 可变化的数据目录 如:邮件 日志
/usr 用户程序目录
3.1.2 认识路径
绝对路径:从根路径出发
相对路径:从当前路径出发
注意:~/ 是绝对路径 因为~相当于 /home或者/root 也是从根路径出发
3.1.3 pwd cd
pwd 查看当前路径
cd 切换路径
3.1.4 列出目录列表 ls
语法 : ls 选项 路径 选项可不写可多写
以下是选项
-a ## 隐藏文件也显示出来
-l ## 显示详细信息
-h ## 以人类看得懂的形式显示出来,和 -l一起使用
-d ## 仅显示该目录信息,而不是显示目录下的目录和文件信息
-i ## 显示inode节点编号
3.1.5 Linux中文件类型
Linux中一切皆是文件,包括目录(文件夹 -d)也是文件
文件有七种类型
- :表示普通文件 在type匹配时候用 f 来代替 f是file的缩写
d :目录文件 其实是目录,文件夹的意思,不过Linux只有文件,叫目录文件
l :链接文件
b :块设备文件
c :字符设备文件
p :管道文件
s : 套接字文件
记前面两个,了解后面两个
3.2 文件和目录的基本操作
3.2.1 创建目录和文件
1 mkdir 命令 创建目录
语法 : mkdir [选项] 目录文件名 选项有-p 可不写
mkdir /tmp/a ## /tmp本身就存在,创建a目录
mkdir -p /tmp/a/b ## 递归创建 a,b目录
2 touch 命令 创建文件
或者更新时间戳(更新最后访问时间,最后修改时间,最后改动时间)
语法 : touch 文件名
touch /tmp/1.txt ## 创建 1.txt文件
touch /tmp/1.txt ## 因为本来已有1.txt,更新1.txt的时间戳
touch /tmp/a{1..5}txt ## 创建 a1.txt 到 a5.txt 文件
3.2.2 复制命令 cp
语法 : cp [选项] 原文件… 新路径
选项有 -r/R -i -f -a 特殊情况 \cp (原始cp) ,cp 命令本身是 cp -i
这里 优先级 -i > -f 也就是说使用 -f也还是会询问是否覆盖,所以 -f相当于没用
选项:
-r,-R ## 复制目录
-i ## 本身自带,有同名时访问是否覆盖,可用 type cp 查看
-f ## 强制执行,不询问,这里优先级不够高没用
-a ## 保留全部内容复制,权限和所属用户所属组也不会改变
\cp ## 真正的cp ,相当于不要 -i
cp /tmp/1.txt /tmp/2.txt ## 复制1.txt 粘贴并改名 2.txt 此时 /tmp/ 有两个文件
3.2.3 移动改名命令 mv
语法 : mv [选项] 原文件… 新路径
选项有 -f -i 同上 不过这里 优先级 -f > -i 使用-f会强制覆盖
选项:
-i ## 本身自带,有同名时访问是否覆盖,可用 type cp 查看
-f ## 强制执行,不询问,这里优先级比 -i 高
\mv ## 真正的mv ,相当于不要 -i
mv /tmp/1.txt /tmp/a/ ## 1.txt移动到a目录下
mv /tmp/1.txt /tmp/a/2.txt ## 1.txt移动到a目录下并改名为2.txt
3.2.4 删除命令 rm
1 rm命令
功能 : 删除目录和文件
语法 : rm [选项]… m目录或文件
选项有 -r/R -f -i 同上 优先级 -f > -i 使用-f会强制覆盖
注意:切忌 rm -rf /* 切记切记
选项:
-r,-R ## 用于删除目录
-f ## 强制执行
-i ## 本身自带,有同名时访问是否覆盖,可用 type rm 查看
\rm ## 真正的rm ,相当于不要 -i
rm /tmp/1.txt ## 删除1.txt
rm -rf /tmp/a ## 删除a目录,也可以删除文件 (慎重且慎用,虽然本人常用)
2 rmdir 命令
有rm不用这个,不重要
功能 : 删除空目录
语法 : rmdir 空目录
mkdir /tmp/a ## 创建空目录
rmdir /tmp/a ## 删除空目录
3.2.5 查看文件内容
1 cat(常用)
功能:查看文件内容,一次显示整个文件的内容
语法:cat [选项] <文件名>
选项用-n可显示行数,下面的除了 cat 和 tail ,别的不能用-n显示行数
cat /tmp/passwd
cat -n /tmp/passwd ## 显示行数
2 tac
功能:查看文件内容,一次显示整个文件的内容,只不过是反向显示
基本不用
tac /tmp/passwd
3 more
语法:more <文件名>
功能:以分页形式显示文件内容,按下回车刷新一行,按下空格刷新一屏
不能向上翻页,可以用关键字n进行搜索,比如可以用/root 搜索root位置,如果第一页有root,第500行也有,按n会从第一行跳到第500页。
先查找关键字,在用n向下进行排查
按q退出,会留内容在上方
4 less
语法 : less <文件名>
功能和more 支持向上翻页
可以用关键字n进行搜索,在用n向下进行排查,用N向上排查
按q退出会清除查看的内容
5 tail(常用)
功能:用于显示文件中的尾部内容。默认在屏幕上显示指定文件的末尾 10 行,正向的显示最后10行
语法:tail [选项] <文件名>
选项:
-n 显示n行 n 可以为数字,或者后面接数字
-f 动态显示数据 (重要)
tail -30 /tmp/passwd ## 显示最后30行内容,不够30行就全部显示
或
tail -n 30 /tmp/passwd ## 显示文件 /tmp/passwd 的最后30行内容
6 head
功能:用于显示文件的开头的内容。在默认情况下,head 命令显示文件的头10行内容
和tail相反 也可以使用 -n
head -30 /tmp/passwd ## 显示文件 /tmp/passwd 的前30行内容
或
head -n 30 /tmp/passwd ## 显示文件 /tmp/passwd 的前30行内容
7 wc
功能:wc 命令会输出三个值,分别表示行数、单词数量和字节数。如果只想获取其中一个值,可以使用 -l、-w 或 -c 选项来指定。
语法: wc 文件路径名
wc /etc/passwd 查看有多少用户,一行就是一个用户
不加选项,分别表示行数、单词数量和字节数 比如 wc /etc/passwd
-l ## 统计:行数
-W ## 统计:单词数
-c ## 统计:字节数
-m ## 统计:字符数
-L ## 显示:最长行的长度
3.2.6 | 管道命令符
把前面的输出当作后面的输入
找到 passwd 文件里面的第25行并且显示行数出来
思路:把25行变成行首在变成行尾,或者变成行尾在变成行首
cat -n passwd | head -25 | tail -1
## 先显示行数,再取1 ~ 25 行 ,再取最后一行即25行
3.2.7 ; 命令
可以使用 ; 将几条命令连接起来
mkdit -p /tmp/cl/dj ; touch /tmp/cl/dj/love.txt ; mv /tmp/cl/dj/like.txt
3.2.8 echo命令
输出echo后面的的内容
echo 123 ## 会在终端输出 1223
echo 'user01:123' | chpasswd ## 设置用户user01的登录密码
3.2.9 > 和 >> 重定向符
echo 123 > 1.txt ## 给1.txt写入123,并且覆盖里面的内容
echo "123" >>1.txt ## 在1.txt文档里面追加123内容,不会覆盖以前的
3.3 文件和目录管理
3.3.1 压缩和解压缩
用到的工具 : gzip bzip2 xz
一般 gzip 和 xz是系统自带 bzip2 要手动安装 输入 yum install bzip2 -y 安装
一般是先进行打包操作在压缩 gzip压缩后是 .gz结尾 bzip2则是以 bz2 结尾 xz是以 .xz 结尾
适用于文件
功能:对文件进行压缩 功能:对压缩文件进行解压缩
语法 :gzip 文件 语法 :gzip -d 压缩文件
以gzip 为例子 对文件 1.txt进行操作
gzip 1.txt ## 压缩成1.txt.gz
gzip -d 1.txt.gz ## 解压缩
gzip -c 1.txt ## 压缩之后保留原文件,相当于有一个原文件一个压缩文件
gzip -c -d 1.txt.gz ## 解压之后保留压缩文件
注意:bzip 和 xz 不是-c 而是 -k 保留
注意 : 所有压缩工具包括 gzip 不能压缩目录 ,-r也不行 ,要想压缩目录,一般是用 tar命令进行打包成 .tar 结尾的文件才可以进行压缩
3.3.2 打包和解包(归档和解归档)
tar 命令 可进行打包,同时 也可时候 -a 在打包时候进行压缩
注意: 进行打包后,无论是文件还是目录,都会变成文件,比如打包a目录,使用追加内容时候,只能追加到tar包里面,而不能追加到tar包里面的a下
注意 :打包时候会保留原文件 ,解包时候也会保留解包文件,所以一般用作备份,且后面打包的内容,当解包了,如果同名会覆盖前面先解包的内容
打包的目录下的一些原文件再次增加内容可以直接对增加内容的文件打包,因为解包时候后面增加进来的同名文件会覆盖前面先进来的文件
适用于文件与目录 一般是对目录进行打包压缩,然后目录下的文件 变成 .tar.gz 结尾
功能:归档与解归档目录或文件,通常用于实现数据备份、数据还原。
语法:tar [选项]… [打包后的文件名] [源目录或文件]…
选项:
语法 :tar 选项 打包名 原名
-c ## 打包 ctx
-t ## 查看包的内容
-x ## 解包
## 以上三选一
—a ## 可在打包和解包的过程中根据包名后缀选择对应的 压缩工具进行 压缩或者解压
## 注意: 打包的时候可以使用 -f进行改名,但是解包只能-C指定解包到哪个目录下,名字会变回原文件名
-v ## 显示详细过程
-f ## 指定打包名,就是可改名字,#可指定打包到哪个目录 不指定会打包到当前目录
-C ## 大写的 C 可在解包时候 #指定解包到哪个目录 不指定就是解压到当前目录
语法 :tar 打包名 选项 "指定文件名" ## (需要指定文件路径下的文件名,要把该目录写出来,不能只写文件名)
--delete ## 删除包里指定内容 比如删除a.tar 里面的1.txt 指定的文件名要写 a/1.txt
-r ## 在包里后面增加内容,就算有同名也会增加,不过解包时候后面增加的文件会覆盖前面的同名文件,因为前面文件先解包
-u ## 在包里增加内容,有同名且内容一样会覆盖原里面有的内容(相当于不变), 同名但内容不一样,会增加该文件到包最后面
## 注意:只能对打包没压缩的文件或者目录进行操作,压缩后不能删除和增加
对目录 a 进行打包 a下面有 三个文件分别是 1.txt 2.txt 3.txt
tar -cvf a.tar a ## 对a进行打包
tar -cvf b.tar a ## 对a进行打包且打包名叫b.tar
tar -acf ~/c.tar.gz /data/mysql ## 对 /data/mysqldata打包到家目录下
tar -tvf a.tar ## 对a进行看包
tar -xvf a.tar ## 对a.tar进行解包
tar -xvf b.tar -C /tmp ## 对b.tar进行解包,且解包后的内容放到 /tmp下,同时解包变成 a 而不是b目录,因为打包的是a目录,只是改了打包名
tar -acvf a.tar.gz a ## 对a进行打包且压缩 在那个目录下执行操作,则打包到哪个目录下
tar -acvf a.tar.gz ## 对a.tar.gz压缩包 进行解压解包
tar -xvf c.tar.gz -C / ## 解包到根目录下, 直接生成 /data/mysql ,如果本来就有 /data,那会并入到里面,不会影响
## 但是如果在/data 里面解包,会在里面生成 /data/mysql 即 /data/data/mysql
tar -vf a.tar --delete "a/3.txt" ## 删除包里的a目录下的3.txt
tar -rvf a.tar {4..5}.txt ## 将4.txt 和 5.txt放进包里,不过和a目录平级而不是在a目录下,因为打包之后a相当于文件而不是目录
tar -vf a,tar --delete "5.txt" ## 删除5.txt
## 注意: 一次只能删除一个文件或目录,但是可以增加多个文件
3.3.3 unzip
对于 zip 文件,即window的 ,可以 unzig 文件名 去解压该文件 例子
unzip farm-ucenter1.5.zip
unzip farm-ucenter1.5.zip -d /tmp ## 指定解压路径
3.4 文件和目录搜索
3.4.1 which 命令
功能:依据$PATH 环境变量中的目录路径,查找命令的绝对路径
which cp ## 查找cp的绝对路径
whereis命令和 which差不多 不过多了一个查找命令的man帮助路径 (了解即可)
whereis cp
主要使用which
3.4.2 find 命令
功能:搜索文件或目录路径,强大的搜索命令
语法:find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
find 搜索范围… 搜索条件 处理动作(不写的话默认是print)
常用的find 搜索范围: 直接指定:[选项] <目录路径1> <目录路径2> 指定搜索范围可以写多个可以写一个
搜索条件:根据各种特征比如文件名,权限查找,创建或者访问文件时间,文件用户或用户组等等各种特征去查找
处理动作:-print(默认) -exec -ok -delete
搜索条件选项:
-name "匹配模式" ## 根据匹配文件名关键字搜索 ,区分大小写
-iname "匹配模式" ## 和-name 一样,不区分大小写
-size +- n ## 查找大于或等于或者小于 n大小的文件路径 等于用空格隔开
-user 用户名 ## 通过用户名进行搜索
-group 组名 ## 通过用户组名进行搜索
-type [bcdpflsD] ## 通过文件类型进行搜索 比如 d表示目录,f表示普通文件,b表示块文件
-perm ## 用于按照文件权限来搜索匹配的文件
-path "匹配路径" ## 匹配路径,和name差不多,不过name是匹配文件名
-prune ## -prune表示不进去那个目录
-atime +=- n ## 匹配最后访问时间 n为数字代替
-mtime +=- n ## 匹配最后修改时间
-ctime +=- n ## 匹配最后状态改变时间
注意:从0到以前 -1 代表一天内(24小时前到现在) =1 代表2天前到1天前 +1 代表两天以前(前天之前)
-a and 且
-o or 或
! 取反
find / -type f -atime +6 ## 搜索最后访问时间超过 7天 的普通文件
find / -type f -mtime +29 ## 搜索30内没有修改过的普通文件(最后修改时间超过30天)
find /etc -name "1.txt" ## 从/etc目录下搜索1,txt的文件
find /etc -name "1*" ## 从/etc目录下搜索1开头的所有文件或目录
find /etc -name "*.txt" ## 从/etc目录下搜索 .txt 结尾的所有文件或目录
find /etc -name "*ens33*" ## 从/etc目录下搜索文件名中间有ens33的所有文件或目录
find / -perm -u=s -type f ## 搜索全部拥有 suid 权限的 文件
find /tmp -perm 644
find /tmp -perm -u=rw,g=r,o=r
find /etc -size 100M ## 从/etc目录下搜索空间为100M的文件
find /etc -size +100M -size -200M ## 从/etc目录下搜索空间大于100M且小于200M的文件
find /etc -size +100M -a -size -200M ## 从/etc目录下搜索空间大于100M且小于200M的文件 -a代表and -o代表or
find /etc -size +100M -o -size -200M ## 从/etc目录下搜索空间大于100M或小于200M的文件 那就是全部文件了
处理动作:
-print(默认) ## 不写就是这个,把搜索的内容打印出来(显示)
-exec command '{}' \; ## find命令对匹配的文件执行该参数所给出的命令。
## command是命令 比如cp rm
-ok command '{}' \; ## 和 -exec 用法一样,不过执行操作时候会询问 相当于-i
-delete ## 删除所查找到的内容
注意: '{}' 表示匹配到的内容 \; 表示-exec或-ok中所执行命令的命令结尾符,\是转义符,用以区别一行多个命令的命令分隔符;分号
find /etc -name "*.txt" ## 从/etc目录下搜索*,txt结尾的文件
find /etc -name "*.txt" -exec cp '{}' /tmp \; ## 将搜索到的文件 复制 到 /tmp 目录下
find /etc -name "*.txt" -exec rm -rf '{}' \; ## 删除搜索到的文件
find /etc -name "*.txt" -delete ## 删除搜索到的文件
找到/tmp目录下所有路径中不包含abc的路径(eabcd算包含abc)
find /tmp ! -path "*abc*" 或者 find /tmp ! -path "./*abc*"
难点:匹配/目录下的pass*的普通文件 ,但是排查搜索目录 /root和 /usr/share 目录
语法: find 搜索路径 -path "要排除的目录路径" -prune -o 其他条件
find / \( -path /root -o -path /usr/share \) -a -prune -o -name "pass*" -type f -exec ls -l {} \;
注意,因为搜索目录有 / 使用使用转义字符 \
搜索命令还有locate 命令(不常用)了解即可,主要还是使用find