Linux文件管理
1.文件的时间
[root@steven ~]# ls -l /home # 看的是文件的修改时间
-rw-r--r-- 1 root root 0 Apr 5 03:42 a.txt
Linux文件有三种时间可以用stat查看
# 例如:
[root@steven ~]# stat a.txt
File: ‘a.txt’
Size: 1111 Blocks: 8 IO Block: 4096 regular file
访问时间:atime,查看内容,用cat检测
修改时间:mtime,修改内容
改变时间:ctime,修改内容,修改权限等属性,凡是有改动都会变
2.文件的类型
Linux文件没有扩展名!!!
// 方法一:
ls -l 文件名 //看第一个字符
- 普通文件(文本文件,二进制,压缩文件,电影,图片。。。),例如:/bin/ls
d 目录文件(蓝色),例如/home/
b 设备文件(块设备)存储设备硬盘,U盘,例如:/dev/sda
c 设备文件(字符设备)打印机,例如:终端/dev/tty1
s 套接字文件,例如:/run/rpcbind.sock
p 管道文件,例如:/run/systemd/initctl/fifo
l 链接文件(淡蓝色),例如:/bin
ps:通过颜色判断文件的类型是错误的!!!
// 方法二:
[root@xxx ~]# file /etc/grub.conf
3.文件管理命令
#1、查看当前所在的目录
[root@localhost ~]# pwd
/root
#2、切换目录
cd 绝对路径 如:cd /home/alice cd ~alice
cd 相对路径 如:cd home/alice cd ..
cd - # 返回上次目录
cd # 直接回家,等同于cd ~
cd . #保持当前目录不变
cd .. #切换到当前目录的上一级目录
#3、查看目录树:需要先安装tree命令,执行yum install tree -y
tree -a 目录 # 显示所有文件,包括隐藏文件
tree -d 目录 # 只显示子目录
tree -L 1 目录 # -L 遍历目录的最大层数,-L后应该是大于0的正整数
tree -F 目录 # -F 在条目后加上文件类型的指示符号,例如会在显示出的目录后面加上左斜杠/
[root@localhost ~]# tree /a
/a
├── b
│ ├── 1.txt
│ ├── 2.txt
│ └── 3.txt
├── bb
│ ├── a.txt
│ ├── b.txt
│ └── c.txt
└── bbbb
#4、浏览
ls # 默认浏览当目录
ls -l 目录 # 浏览目录下的子目录子文件名的详细信息
ls -al 目录 # 浏览的结果中包含隐藏文件
ls -dl 目录 # 查看目录
[root@localhost ~]# ll a.txt
-rw-r--r--. 1 root root 0 12月 15 14:02 a.txt
# 各部分解析如下
-rw-r--r--. 权限,后面的点代表是否在selinux开启的情况下(enforcing或者permissive都属于开启)创建的文件
1 硬链接个数
root 属主
root 属组
0 文件大小,单位字节
12月 15 14:02 文件修改时间
a.txt 文件名字
# 权限的第一个为代表文件类型
格式 说明
- 普通文件(文本, 二进制, 压缩包, 图片, 日志等)
d 目录文件
b 设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero
s 套接字文件, 进程间通信(socket)
p 管道文件
l 链接文件
注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别
4.创建/复制/移动/删除
- 创建
#1、创建文件:touch命令
touch file1.txt //无则创建,有则修改时间
touch /home/file10.txt
touch file{1..20}
touch Ego{n,N}.txt //等价touch Egon.txt EgoN.txt
touch -t 2011111111 2018.rmvb
#2、创建目录:mkdir命令
mkdir dir1
mkdir /home/dir2 /home/dir3
mkdir /home/{dir4,dir5}
mkdir -v /home/{dir6,dir7}
mkdir -p /home/dir8/111/222 //包括其父母的创建
- 复制
#1、cp命令
语法:cp 源 目标
cp -v install.log /home/dir1
cp -v install.log /home/dir1/aaa.txt
cp -r /etc /home/dir1
cp install.log /home/dir2
cp anaconda-ks.cfg !$
cp anaconda-ks.cfg /home/dir2
cp -r /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/grub.conf /etc/hosts .
cp -rv /etc /tmp
扩展用法:
cp -rfv /etc/hosts{,.old}
cp -rvf /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}
- 移动与删除
1、=============复制:mv
mv 源 目标
# mv file2 /home/dir3 将file2移动到/home/dir3里
# mv file4 file5 将file4重命名为file5,当前位置里的移动就是重命名
2、=============删除:rm
示例:删除/home/dir1
# cd /home
# rm -rf dir1
-r 递归
-f force强制
-v 详细过程
5. 查看文件内容
查看文件命令 (cat less more head tail grep)
# 1、cat命令
-n 显示行号
-A 包括控制字符(换行符)linux $ Windows ^M$
# 2、less命令
# 3、more命令
more /etc/passwd
# 4、head命令
head /etc/passwd
head -2 /etc/passwd
# 5、tail命令
tail /etc/passwd
tail -1 /etc/passwd
tail -f /var/log/messages //-f 动态查看文件的尾部
========================================================
扩展知识:
dos2unix 将Windows格式的文件转换成Unix格式
unix2dos 将Unix格式的文件转换成Windows格式
例如
# unix2dos file1
# dos2unix file2
========================================================
6.修改文件内
#什么是vim?:vim可以理解为windows下面的文本编辑器比如记事本word文档
它的主要用途是:它可以执行输出,删除,查找,替换,块操作的众多文本操作,而且可以根据自己的需求对文本进行编辑。
#为何要用vim? :主要可以用来修改配置,以及编写脚本
vi与vim的区别 :vi不显示高亮颜色语法,vim显示高亮语法,其他功能没有什么区别
- vim的四种模式
vim编辑器的四种模式:命令模式====>编辑模式====>可视化模式====>末行模式
#模式之间的转换:编辑文件进入命令模式=》按i a o进入编辑模式=》ctrl加v进入可视化模式=》按shift :进入末行模式。按ESC返回命令模式 。保存编辑的文件或退出进入末行模式w q wq q! x wq!
- 命令模式
光标定位:=> 上下左右键 或 h j k l 键
在光标所在的当前行移动光标: $ 行尾 0 行首
gg 将光标定位到行首
G 将光标定位到行尾 如:3G是将光标定位到地3行
yy 复制 以行为单位 如:3yy就是复制3行
p 当前光标的下一行粘贴 大P当前光标的上一行进行粘贴
D 从光标处删除到行尾
d 删除:dd删除光标所在的当前行 3dd: 删除3行
x 删除光标所在的字符
u 恢复
R 进入替换模式
ctrl -r 执行上一步操作
shift+M 将光标移动到当前页面的中间
shift+L 将光标移动到当前页面的行尾
shift+H 将光标移动到当前页面的行首
- 插入模式
进入到插入模式: i a o s I A O s (这几个进入插入模式的区别)
i :在光标所在字符前开始插入
a :在光标所在字符后开始插入
o :在光标所在行的下面另起一新行插入
s :删除光标所在的字符并开始插入
I :在光标所在行的行首开始插入 如果行首有空格则在空格之后插入
A :在光标所在行的行尾开始插入
O :在光标所在行的上面另起一行开始插入
S :删除光标所在行并开始插入
- 可视模式
按ctrl+v 进入可视化模式
1,添加加多行注释:
前提:注释的行需要整齐排列
先将光标移动到首行的开头位置
在命令模式,按ctrl+v
上下键选中第一列
shift+i,然后输入#
连续按两下ESC
2,取消多行注释:
注释的行需要整齐排列
在命令模式,按ctrl+v
上下键选中#号
按下d
- 末行模式
w 保存
q 退出
wq 保存并退出(相当与把文件存入or写入磁盘)
w! 强制保存
q! 不保存并退出
wq! 强制保存退出
x 保存并退出
- 查找替换
查找替换
:% s/root/yang/g : %表示全文 g表示全局替换 %等同于1,$
#尾部加g的作用 :不加g只替换每行的第一个,加g为全局替换
:4,9 s/^#// :4-9行的开头#号替换为空
: ,8 s/root/yang/ : 从当前行到第8行
:5,10 s/.*/#&/ 5-10前加入#字符
#w 存储当前文件
:w /tmp/aaa.txt 另存为/tmp/aaa.txt
:1,3 w /tmp/2.txt
#r读入文件
:r /etc/hosts 读入文件到当前行后
:5 r /etc/hosts 读入文件到第5行后
- 设置环境
#临时设置:
:set nu 设置行号 当次显示行——临时
:set ic 不区分大小写
:set nonu 取消设置行号
:set noic
#永久的环境:修改vim环境配置文件
/etc/vimrc 影响所有系统用户 vim /etc/vimrc
~/.vimrc 影响某一个用户
# vim ~/.vimrc 新建文件也可以
set ic
set nu
- 同时编辑多个文件
vim -o 文件1 文件2 #水平分割
vim -O 文件1 文件2 #垂直分割
#Ctrl + ww 切换
vim -p /etc/hosts /etc/grub.conf
使用 ^Pgup, ^PgDn 切换
- 文件内容对比
#相同文件之间差异对比,通常用与对比修改前后的差异
diff #文件对比
vimdiff #以vim方式打开两个文件对比,高亮显示不同的内容
patch 命令
- vim的执行流程
#1,vim 打开文件 a.txt
#2,进入编辑模式编辑文件
#3,编辑文件的时候vim会自动创建一个临时文件 ( .a.txt.swp )隐藏文件
#4,编辑完成,vim会自动删除临时文件
#5,退出,修改成功
7.文本处理三剑客
sed命令
流式编辑器,主要擅长对文件的编辑操作,我们可以事先定制好编辑文件的指令,然后让sed自动完成对文件的整体编辑
# 格式
sed 选项 '定位+命令' 文件路径
# 选项
-n 取消默认输出
-r 支持扩展正则元字符
-i 立即编辑文件
# 定位
行定位:
1定位到第一行
1,3代表从第1行到第3行
不写定位代表定位所有行
正则表达式定位:
/egon/ 包含egon的行
/^egon/ 以egon开头的行
/egon$/以egon结尾的行
数字+正则表达式定位
"1,8p" # 代表打印1到8行,
"1,/egon/p" # 代表取从第1行到首次匹配到/egon/的行
# 命令
d 删除
p 打印
s///g 替换
命令可以用;号连接多条,如1d;3d;5d代表删除1,3,5行
# 用法案例
[root@web01 ~]# sed '' a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '1,/adm/p' a.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed -n '1,/adm/p' a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@web01 ~]# sed '1,/adm/d' a.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '1d;3d' a.txt
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '2ixiaoxu:x:9:9:bin:/home:/sbin/bash' a.txt # 在第二行增加一条数据
root:x:0:0:root:/root:/bin/bash
xiaoxu:x:9:9:bin:/home:/sbin/bash
[root@web01 ~]# sed '2axiaoxu:x:9:9:bin:/home:/sbin/bash' a.txt # 在第二行下面插入数据
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
xiaoxu:x:9:9:bin:/home:/sbin/bash
# 用法示例: s///g
[root@web01 ~]# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed 's/root/ROOT/' a.txt
ROOT:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed 's/root/ROOT/g' a.txt # g表示全局替换
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '/^bin/s/nologin/bash/' a.txt # 以bin开头的行中的nologin替换为bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '3s/sbin/xiaoxu/g' a.txt # 只把第三行的sbin替换为xiaoxu
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/xiaoxu:/xiaoxu/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '3s/sbin/xiaoxu/' a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/xiaoxu:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed '1,3s/x/1234567/g' a.txt # 1到3行的x替换为1234567
root:1234567:0:0:root:/root:/bin/bash
bin:1234567:1:1:bin:/bin:/sbin/nologin
daemon:1234567:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# 配合管道使用。
[root@web01 ~]# cat a.txt | sed '/^root/s/x/123/g'
root:123:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# 加上-i选项,直接修改文件,通常会在调试完毕确保没有问题后再加-i选项
[root@web01 ~]# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# sed -i '1,/daemon/d' a.txt # 直接修改文件
[root@web01 ~]# cat a.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
awk命令
awk主要用于处理有格式的文本,例如/etc/passwd这种
# 格式
awk 选项 'pattern{action}' 文件路径
# 选项
-F 指定行分隔符
# 工作流程
awk -F: '{print $1,$3}' /etc/passwd
1、awk会读取文件的一行内容然后赋值给$0
2、然后awk会以-F指定的分隔符将该行切分成n段,最多可以达到100段,第一段给$1,第二段给$2,依次次类推
3、print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致
4、重复步骤1,2,3直到文件内容读完
# 内置变量
$0 一整行内容
NR 记录号,等同于行号
NF 以-F分隔符分隔的段数
# pattern可以是
/正则/
/正则/ # 该行内容匹配成功正则
$1 ~ /正则/ # 第一段内容匹配成功正则
$1 !~ /正则/ # 第一段内容没有匹配成功正则
# 比较运算:
NR >= 3 && NR <=5 # 3到5行
$1 == "root" # 第一段内容等于root
# action可以是
print $1,$3
# 用法示例
[root@web01 ~]# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# awk -F: '{print $0}' a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# awk -F: '/bash$/{print $1,$7}' a.txt
root /bin/bash
[root@web01 ~]# awk -F: '/^root/{print $1,$7}' a.txt
root /bin/bash
[root@web01 ~]# awk -F: '$1 ~/^root/{print $1,$7}' a.txt
root /bin/bash
[root@web01 ~]# awk -F: '$1 !~ /bash$/{print $1,$7}' a.txt
root /bin/bash
[root@web01 ~]# awk -F: 'NR>3{print $1}' a.txt
adm
[root@web01 ~]# awk -F: '$1 == "lp" {print $1}' a.txt
lp
[root@web01 ~]# awk -F: '$1 == "lp" {print $0}' a.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# awk -F: '$1 == "lp" {print $7}' a.txt
/sbin/nologin
# awk也支持管道
[root@web01 ~]# cat a.txt | awk -F: '{print $7}'
/bin/bash
/sbin/nologin
[root@web01 ~]# ifconfig eth0 | awk 'NR==2{print $2}'
10.0.0.7
[root@web01 ~]# ifconfig eth0 | awk 'NR>=2 && NR<=2{print $2}'
10.0.0.7
[root@web01 ~]# df -Th | awk 'NR == 6{print $5}'
9.9G
[root@web01 ~]# free -m | awk 'NR==2{print $7}'
1565
grep命令
grep擅长过滤内容
# 用法
grep 选项 '正则' 文件路径
# 选项
-n, --line-number # 在过滤出的每一行前面加上它在文件中的相对行号
-i, --ignore-case # 忽略大小写
--color # 颜色
-l, --files-with-matches # 如果匹配成功,则只将文件名打印出来,失败则不打印通常-rl一起用,grep -rl 'root' /etc
-R, -r, --recursive # 递归
# 示例
[root@localhost ~]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep -n 'bash$' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
44:egon:x:1000:1000:egon:/home/egon:/bin/bash
[root@web01 ~]# grep -lr 'xiaoxu' /etc
/etc/group
/etc/gshadow
/etc/passwd
/etc/shadow
/etc/subgid
/etc/subuid
# grep也支持管道
[root@localhost ~]# ps aux |grep ssh
root 968 0.0 0.2 112908 4312 ? Ss 14:05 0:00 /usr/sbin/sshd -D
root 1305 0.0 0.3 163604 6096 ? Ss 14:05 0:00 sshd: root@pts/0
root 1406 0.0 0.3 163600 6240 ? Ss 14:05 0:00 sshd: root@pts/1
root 2308 0.0 0.0 112724 984 pts/1 R+ 15:30 0:00 grep --color=auto ssh
[root@localhost ~]# ps aux |grep [s]sh
root 968 0.0 0.2 112908 4312 ? Ss 14:05 0:00 /usr/sbin/sshd -D
root 1305 0.0 0.3 163604 6096 ? Ss 14:05 0:00 sshd: root@pts/0
root 1406 0.0 0.3 163600 6240 ? Ss 14:05 0:00 sshd: root@pts/1
8.文件查找(find命令)
- 查看命令所属文件
[root@localhost ~]# which ip
/usr/sbin/ip
# ps: 一些命令的路径都被配置到了环境变量PATH里
echo $PATH
- 按文件名:
[root@localhost ~]# find /etc -name "ifcfg-eth0"
[root@localhost ~]# find /etc -iname "ifcfg-eth0" # -i忽略大小写
[root@localhost ~]# find /etc -iname "ifcfg-eth*"
- 按文件大小:
[root@localhost ~]# find /etc -size +3M # 大于3M
[root@localhost ~]# find /etc -size 3M
[root@localhost ~]# find /etc -size -3M
[root@localhost ~]# find /etc -size +3M -ls # -ls找到的处理动作
- 指定查找的目录深度:
-maxdepth levels
[root@localhost ~]# find / -maxdepth 5 -a -name "ifcfg-eth0" # -a并且,-o或者,不加-a,默认就是-a
- 按时间找(atime,mtime,ctime):
[root@localhost ~]# find /etc -mtime +3 # 修改时间超过3天
[root@localhost ~]# find /etc -mtime 3 # 修改时间等于3天
[root@localhost ~]# find /etc -mtime -3 # 修改时间3天以内
- 按文件属主、属组找:
[root@localhost ~]# find /home -user egon # 属主是egon的文件
[root@localhost ~]# find /home -group it # 属组是it组的文件
[root@localhost ~]# find /home -user egon -group it
[root@localhost ~]# find /home -user egon -a -group it # 同上意思一样
[root@localhost ~]# find /home -user egon -o -group it
[root@localhost ~]# find /home -nouser # 用户还存在,在/etc/passwd中删除了记录
[root@localhost ~]# find /home -nogroup # 用户还存在,在/etc/group中删除了记录
[root@localhost ~]# find /home -nouser -o -nogroup
- 按文件类型:
[root@localhost ~]# find /dev -type f # f普通
[root@localhost ~]# find /dev -type d # d目录
[root@localhost ~]# find /dev -type l # l链接
[root@localhost ~]# find /dev -type b # b块设备
[root@localhost ~]# find /dev -type c # c字符设备
[root@localhost ~]# find /dev -type s # s套接字
[root@localhost ~]# find /dev -type p # p管道文件
- 根据inode号查找:-inum n
[root@localhost ~]# find / -inum 1811
- 按文件权限:
[root@localhost ~]# find . -perm 644 -ls
[root@localhost ~]# find . -perm -644 -ls
[root@localhost ~]# find . -perm -600 -ls
[root@localhost ~]# find /sbin -perm -4000 -ls # 包含set uid
[root@localhost ~]# find /sbin -perm -2000 -ls # 包含set gid
[root@localhost ~]# find /sbin -perm -1000 -ls # 包含sticky
- 找到后处理的动作:
-print
-ls
-delete
-exec
-ok
[root@localhost ~]# find /etc -name "ifcfg*" -print # 必须加引号
[root@localhost ~]# find /etc -name "ifcfg*" -ls
[root@localhost ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \; # 非交互
[root@localhost ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \; # 交互
[root@localhost ~]# find /etc -name "ifcfg*" -exec rm -rf {} \;
[root@localhost ~]# find /etc -name "ifcfg*" -delete # 同上
- 扩展知识:find结合xargs
[root@localhost ~]# find . -name "egon*.txt" |xargs rm -rf
[root@localhost ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp
[root@localhost ~]# find /test -name "ifcfg-ens33" |xargs -I {} mv {} /ttt
[root@localhost ~]# find /ttt/ -name "ifcfg*" |xargs -I {} chmod 666 {}
9.上传与下载
- 下载
wget命令
wget -O 本地路径 远程包链接地址 # 将远程包下载到本地,-O指定下载到哪里,可以生路-O 本地路径
# ps:如果wget下载提示无法建立SSL连接,则加上选项--no-check-certificate
wget --no-check-certificate -O 本地路径 远程包链接地址
curl命令
#curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、[ftp]等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
[root@localhost ~]# curl -o 123.png https://www.xxx.com/img/hello.png
# ps: 如果遇到下载提示无法简历SSL链接,使用-k选项或者--insecure
curl -k -o 123.png https://www.xxx.com/img/hello.png
sz命令
# 系统默认没有该命令,需要下载:yum install lrzsz -y
# 将服务器上选定的文件下载/发送到本机,
[root@localhost ~]# sz bak.tar.gz
- (2)上传
rz命令
# 系统默认没有该命令,需要下载:yum install lrzsz -y
# 运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器。
[root@localhost opt]# rz # 如果文件已经存,则上传失败,可以用-E选项解决
[root@localhost opt]# rz -E # -E如果目标文件名已经存在,则重命名传入文件。新文件名将添加一个点和一个数字(0..999)
10.输出与重定向
输出即把相关对象通过输出设备(显示器等)显示出来,输出又分正确输出和错误输出
一般情况下标准输出设备为显示器,标准输入设备为键盘。
linux中用
-
0代表标准输入
-
1代表标准正确输出
-
2代表标准错误输出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wmn1fYfz-1623076261218)(img/image-20210411165250285.png)]
输出重定向:
正常输出是把内容输出到显示器上,而输出重定向是把内容输出到文件中,>代表覆盖,>>代表追加
Ps:标准输出的1可以省略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fqnr6jjc-1623076261221)(img/image-20210411165451738.png)]
例如:ifconfig > test.log 即把ifconfig执行显示的正确内容写入test.log.当前页面不再显示执行结果。
注意:错误输出重定向>与>>后边不要加空格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ic2En3H5-1623076261224)(img/image-20210411165509618.png)]
注意:
-
1、下述两个命令作用相同
命令 >>file.log 2>&1 命令 &>>file.log
-
2、正确日志和错误日志分开保存
命令 >>file1.log 2>>file2.log
-
3、系统有个常见用法 ls &>/dev/null 正确输出或错误输出结果都不要。(null可以理解为黑洞或垃圾站)
输入重定向
#没有改变输入的方向,默认键盘,此时等待输入
[root@egon ~]# tr 'N' 'n'
No
no
[root@egon ~]# tr 'N' 'n' < file.txt
#没有改变输入的方向,默认键盘,此时等待输入
[root@egon ~]# grep 'root'
oldboy
root
root
[root@egon ~]# grep 'root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 读写块设备
[root@egon ~]# dd if=/dev/zero of=/file1.txt bs=1M count=20
[root@egon ~]# dd </dev/zero >/file2.txt bs=1M count=20
# mysql如何恢复备份
[root@qls ~]# mysql -uroot -p123 < bbs.sql
11.字符处理命令
sort命令
用于将文件内容加以排序
- -n # 依照数值的大小排序
- -r # 以相反的顺序来排序
- -k # 以某列进行排序
- -t # 指定分割符,默认是以空格为分隔符
准备文件,写入一段无序的内容
# 准备测试文件
cat >> file.txt<< EOF
b:3232224234
c:2131241445
a:5342114342
e:4636252452
d:6436366646
f:1545363633
EOF
# 默认以字母顺序排序
[root@web01 ~]# sort file.txt
a:5342114342
b:3232224234
c:2131241445
d:6436366646
e:4636252452
f:1545363633
# 指定以冒号为分隔符以第二列进行排序
[root@web01 ~]# sort -t ":" -k2 file.txt
f:1545363633
c:2131241445
b:3232224234
e:4636252452
a:5342114342
d:6436366646
# 指定以冒号为分隔符以第二列进行相反顺序排序
[root@web01 ~]# sort -t ":" -n -r -k2 file.txt
d:6436366646
a:5342114342
e:4636252452
b:3232224234
c:2131241445
f:1545363633
uniq 命令
用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
- -c # 在每列旁边显示该行重复出现的次数。
- -d # 仅显示重复出现的行列。
- -u # 仅显示出一次的行列。
准备文件,写入一段无序的内容
cat > file.txt <<EOF
hello
123
hello
123
func
EOF
# 显示重复次数
[root@web01 ~]# sort file.txt | uniq -c
2 123
1 func
2 hello
# 只显示重复出现的行
[root@web01 ~]# sort file.txt | uniq -d
123
hello
# 只显示没有重复的行
[root@web01 ~]# sort file.txt | uniq -u
func
cut 命令
cut命令用来显示行中的指定部分,删除文件中指定字段
- -d # 指定字段的分隔符,默认的字段分隔符为"TAB";
- -f # 显示指定字段的内容;
[root@localhost ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -1 /etc/passwd | cut -d ":" -f1,3,4,6
root:0:0:/root
[root@web01 ~]# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@web01 ~]# cat a.txt | cut -d ":" -f1,3,5
root:0:root
bin:1:bin
daemon:2:daemon
adm:3:adm
lp:4:lp
sync:5:sync
shutdown:6:shutdown
halt:7:halt
mail:8:mail
operator:11:operator
tr命令
替换或删除命令
- -d # 删除字符
案例:
[root@localhost ~]# head -1 /etc/passwd |tr "root" "ROOT"
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
[root@localhost ~]# head -1 /etc/passwd | tr -d "root"
:x:0:0::/:/bin/bash
[root@web01 ~]# echo "hello xiaoxu qq:1977940379" > a.txt
[root@web01 ~]# tr "xiaoxu" "XIAOXU" < a.txt
hellO XIAOXU qq:1977940379
wc命令
统计,计算数字
- -c # 统计文件的Bytes数;
- -l # 统计文件的行数;
- -w # 统计文件中单词的个数,默认以空白字符做为分隔符
- -L # 打印最长行的长度
案例:
# 统计文件字节数 -c
[root@web01 ~]# wc -c /etc/shadow
977 /etc/shadow
[root@web01 ~]# ll /etc/shadow
---------- 1 root root 977 4月 11 10:40 /etc/shadow
[root@web01 ~]# cat /etc/group | wc -c
682
[root@web01 ~]# ll /etc/group
-rw-r--r-- 1 root root 682 4月 11 10:40 /etc/group
# 统计文件的行数 -l
[root@web01 ~]# wc -l /etc/passwd
31 /etc/passwd
# 统计文件单词个数 -w
[root@web01 ~]# wc -w /etc/gshadow
52 /etc/gshadow
# 打印最长行的长度
[root@web01 ~]# cat /etc/passwd | wc -L
99
12.打包压缩
- Linux下常见的压缩包类型
格式 | 压缩工具 |
---|---|
.zip | zip压缩工具 |
.gz | gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用) |
.bz2 | bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar使用) |
.tar.gz | 先使用tar命令归档打包,然后使用gzip压缩 |
.tar.bz2 | 先使用tar命令归档打包,然后使用bzip压缩 |
- 单文件压缩
gzip压缩与解压缩(重点)
# gzip 文件名称
# gzip -d 压缩包名称.gz
bzip2压缩与解压缩(了解)
# bzip2 文件名称
# bzip2 -d 压缩包名称.bz2
xz压缩与解压缩(了解)
# xz 文件名称
# xz -d 压缩包名称.xz
- tar打包命令
tar打包命令其主要作用就是对多个文件或文件夹进行打包操作,把他们打包成一个整体,但是本身未压缩。
基本语法:
# tar [选项] 打包后的文件名称.tar 要打包的文件或文件夹
选项说明:
-c:create, 创建打包文件,必选项
-f:filename 代表指定打包后的文件名称
-v: 非必选项,代表显示打包的进度与状态
-t: 查看压缩包内容
案例:
# tar -cf lr.tar linux.txt readme.txt
# tar -cf shop.tar shop
- tar文件打包并压缩
基本语法:
# tar -[选项]cf 压缩后的文件名称 要压缩的文件或文件夹
选项说明:
-z :代表把文件压缩为.gz格式(gzip命令压缩)
-j :代表把文件压缩为.bz2格式(bzip2命令压缩)
-J :代表把文件压缩为.xz格式(xz命令压缩)
案例:
# tar -zcf lr.tar.gz linux.txt readme.txt
# tar -zcf shop.tar.gz shop
- tar压缩文件解压缩
记住:Linux系统下文件的解压缩非常容易,只需要把压缩式的选项中
-c
替换为-x
即可。
案例:
# tar -zxf lr.tar.gz
# tar -xf shop.tar.gz
# tar -xf shop.tar.gz -C /
-
zip命令压缩与解压
-
zip压缩命令:
# zip [选项] 压缩后的文件名称.zip 要压缩的文件或文件夹
选项:
-r :递归压缩,主要针对文件夹
案例:
# zip lr.zip linux.txt readme.txt
# zip -r shop.zip shop
- zip解压缩命令
# unzip 压缩包名称.zip [选项]
选项说明:
-d:代表把解压缩的文件解压缩到指定位置
案例:
# unzip lr.zip
# unzip shop.zip -d /tmp/