Linux系统文件管理

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 1215 14:02 a.txt

# 各部分解析如下
-rw-r--r--. 权限,后面的点代表是否在selinux开启的情况下(enforcing或者permissive都属于开启)创建的文件
1               硬链接个数
root            属主
root            属组
0               文件大小,单位字节
1215 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代表删除135# 用法案例
[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,依次次类推
3print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-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 411 10:40 /etc/shadow

[root@web01 ~]# cat /etc/group | wc -c
682
[root@web01 ~]# ll /etc/group
-rw-r--r-- 1 root root 682 411 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下常见的压缩包类型
格式压缩工具
.zipzip压缩工具
.gzgzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
.bz2bzip2压缩工具,只能压缩文件,会删除源文件(通常配合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/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值