【Linux基础05】Linux文件及目录管理命令基础

本章重点:

  1. 系统目录结构(/etc、/var、/dev等)
  2. 文件路径(绝对路径与相对路径)
  3. 文件管理:基础命令(echo、pwd、cd 、tree、ls、mkdir、touch、cp、mv、rename、rm)
  4. 文件管理:查看文件内容(cat、tac、more、less、head、tail、tailf、grep)
  5. 文件管理:文件查找及命令路径(which、whereis、locate、type、find)
  6. 文件管理:文件上传及下载(wget、curl、rz、sz)
  7. 文件管理:字符处理命令(sort、uniq、cut、tr、wc、sed、awk、column)
  8. 系统文件类型、后缀名
  9. 软硬链接的区别
  10. 命令的执行过程与hash缓存

一、文件管理概述

  1. Linux文件管理,就是对文件进行创建、复制、移动、删除、重命名、编辑、压缩等操作
  2. FHS:Filesystem Hierarchy Standard(文件系统层次化标准),定义了目录结构和内容

二、系统目录结构

2.1 /dev:设备软件目录

  1. 虚拟机、物理服务器中一般是称之为sd ,例如sda sdb sdc,带有序号的叫做分区,例如:sda1 sda2;虚拟主机中,例如阿里云产品,磁盘被标识为vda vdb
  2. /dev/cdrom- >sr0,光驱设备文件
  3. /dev/zero,写0设备,作用:清空磁盘数据;产生空设备文件,也可以产生大量数据
  4. /dev/null,黑洞设备,作用:销毁操作系统输出信息使用
  5. /dev/tty,终端设备,每一个客户端连接都会被分配一个tty设备
  6. /dev/random 生成随机数
  7. /dev/stderr -> /proc/self/fd/2 错误输出 2>
  8. /dev/stdin -> /proc/self/fd/0 标准输入 <
  9. /dev/stdout -> /proc/self/fd/1 标准输出 >
  10. /dev/pts 虚拟终端

2.2 /etc:存放系统配置文件的目录,包括用户、组、密码、网络

  1. /etc/sysconfig/network-scripts/ifcfg-eth0: 网卡配置文件
  2. /etc/hostname 系统主机名配置文件
  3. /etc/resolv.conf: DNS客户端配置文件
  4. /etc/hosts: 系统本地的DNS解析文件
  5. /etc/fstab 配置开机设备自动挂载的文件
  6. /etc/rc.local: 存放开机自启动程序命令的文件
  7. /etc/inittab: 系统启动设定运行级别等配置的文件
  8. /etc/profile及/etc/bashrc: 配置系统的环境变量/别名等的文件

2.3 /proc:操作系统运行时,进程信息(比如cpu、硬盘分区、内存信息等)存放的目录

  1. /proc/loadavg:系统负载(系统繁忙程度)
  2. /proc/meminfo:系统内存信息
  3. /proc/cpuinfo:系统cpu信息
  4. /proc/mounts:系统挂载信息

2.4 /var/var这个:目录的内容是经常变动的,用来存放系统日志的目录

  1. /var/log 记录系统及软件运行信息(系统日志)文件所在的目录
  2. /var/log/messages 系统级别日志文件
  3. /var/log/secure 用户登录信息日志文件
  4. /var/tmp 进程产生的临时文件
  5. /var/run :存放程序的pid号
  6. /var/lib:存放一些库文件
  7. /var/log/dmesg: 记录硬件信息加载情况的日志文件

2.5 /usr 用户或系统软件应用程序目录

  1. /usr/local :软件安装目录
  2. /usr/share:程序目录
  3. bin -> usr/bin
  4. lib -> usr/lib
  5. lib64 -> usr/lib64
  6. sbin -> usr/sbin

2.6 其他重要目录

  1. /bin 普通用户命令所在的目录。
  2. /sbin 超级管理员所用的命令,/bin /sbin /usr/bin /usr/sbin /usr/local/bin
  3. /boot 存放系统启动相关的文件,如kernel、grub
  4. /home 普通用户家目录,主要是存放用户私有数据信息,/home/xxx/.bash_profile;/home/xxx/.ssh
  5. /root 超级管理员root的家目录:root类似win32管理员administrator
  6. /lib,/lib64 启动系统和运行命令所需的共享库文件和内核模块存放,系统文件(库文件)
  7. /run,/var/run 存储进程号pid文件的目录
  8. /mnt 临时挂载存储设备的目录, u盘直接插入光驱无法使用,要先挂载后使用
  9. /opt 早期第三方安装软件所用目录
  10. /media 用于挂载可移动设备的临时目录
  11. /srv 服务程序,物理设备产生的一些文件
  12. /tmp 存放临时文件的目录,公共目录,定期清理长期未访问文件,可用作“回收站”
  13. /sys 硬件设备的驱动程序信息

三、文件路径

3.1 绝对路径和相对路径

  1. 绝对路径:从根“/”目录开始的一个具体路径
  2. 相对路径:从当前目录开始的具体路径

3.2 .和…

[root@qls /etc]# ll  ./		//当前目录
[root@qls /etc]# ll  ../	//上层目录

四、文件管理:基础命令

4.1 echo

说明:
所见即所得 ,可以输出内容到屏幕,打印变量,也可以创建文件,将数据写入到文件中(利用重定向 > >>)修改文件,返回数据。
格式:echo 【选项】【字符串】

选项:
【-e】 #支持特殊字符,进行转义,如: \n 换行符; \t tab键

参数:
指定要打印的内容

4.1.1 屏幕输出

  1. 屏幕输出
[root@ly01 ~]# echo hello shell
hello shell
  1. 屏幕输出(选项“-e”转义)
[root@ly01 ~]# echo -e "hello\nshell"
hello
shell
[root@ly01 ~]# echo -e "hello\tshell"
hello	shell
#############################################[root@qls ~]# echo -e "\033[31m 红色字 \033[0m"
 红色字 
[root@qls ~]# echo -e "\033[31mhello \033[0m"
hello 

4.1.2 返回数值

[root@ly01 ~]# echo $?
0

4.1.3 创建文件

[root@ly01 ~]# echo  "hello"  >123.txt	//创建文件
[root@ly01 ~]# echo world >>123.txt

>		#重定向,会覆盖原文件中的内容。
>>		#追加重定向,将数据追加文件的底部

4.1.4 打印变量

[root@qls ~]# echo  $USER
root
[root@qls ~]# echo  $HOME
/root
[root@ly01 ~]# echo $PS1
[\u@\h \W]\$

4.1.5 加单引号,双引号,不加引号,反引号的区别

  1. 单引号:强引用,所见即所得,原封不动打印单引号里的内容
  2. 双引号:弱引用,所见即所得,会解析变量
  3. 不加引号:所见即所得,会解析变量,支持通配符
[root@ly01 ~]# echo $USER   //会解析变量,支持通配符
root
[root@ly01 ~]# echo '$USER'		//原封不动打印
$USER
[root@ly01 ~]# echo "$USER"		//会解析变量
root
[root@ly01 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@ly01 ~]# echo '{1..10}'
{1..10}
[root@ly01 ~]# echo "{1..10}"
{1..10}
#{}	通配符,生成序列,无序的,中间使用","分隔
  1. 反引号:先执行反引号里面的命令,将命令结果交给外面的命令,跟$()类似
[root@ly01 ~]# echo `hostname`
ly01
[root@ly01 ~]# echo $(hostname)
ly01
[root@ly01 ~]# hostname
ly01

4.2 pwd

介绍:显示当前所在路径
结构:pwd 【选项】

[root@ly01 ~]# pwd
/root

4.3 cd

介绍:切换目录
结构:cd 【目录】

root@qls /etc]# cd		#直接回到当前用户的家目录
[root@qls ~]# 
[root@qls ~]# cd -		#返回到上一次所在的目录
/etc
[root@qls /etc]# cd .	#保持在当前目录
[root@qls /etc]# cd  ..	#进入到当前目录的上一级目录
[root@qls /]# cd ~		#进入到家目录
[root@qls ~]# cd /root
[root@qls ~]# cd /		#进入到/目录
[root@ly01 /etc/sysconfig]# cd ../../	//上级的上级
[root@ly01 /]# 

4.4 tree

说明:以树形的结构进行显示目录结构列表
格式:tree 【选项】【目录】

选项:
【-F】 #给不同文件类型加上不同的标识符(* , /, = , @ , | ),跟ls -F 类似 -
【-a】 #显示隐藏文件
【-d】 #只显示目录
【-L】 #遍历目录的最大层数,后跟大于0的正整数

4.4.1 【-F】用不同标识符区别文件类型

[root@ly01 ~/01]# tree -F /tmp
/tmp
├── ks-script-4vZR2d*
├── oldboy/
│   └── student.txt
├── test.txt
├── vmware-root/
└── yum.log

4.4.2 【-a】显示隐藏文件

[root@ly01 ~/01]# tree -a /tmp

├── test.txt
├── .Test-unix
├── vmware-root
├── .X11-unix
├── .XIM-unix
└── yum.log

4.4.3 【-d】只显示目录

[root@ly01 ~/01]# tree -d /var/log
/var/log
├── anaconda
├── audit
├── rhsm
└── tuned

4 directories

4.4.4 【-L】遍历目录的最大层数

[root@ly01 ~/01]# tree -L 2 /
└── var
    ├── adm
    ├── cache
    ├── crash
    ├── db
    ├── empty
    ├── games
    ├── gopher
    ├── kerberos
    ├── lib
    ├── local

4.5 ls

说明:显示目录下的内容,如不指定目录,则默认查看当前所在目录
格式:ls 【选项】【文件】

选项:
#内容信息显示
【-l】#以长格式显示目录列表的详细信息
【-a】#显示所有文件,包括隐藏文件
【-d】 #显示目录本身的信息
【-h】 #以人性化的方式显示文件大小
【-1】 #(数字1)以列表的形式显示文件名
【-i】 #显示文件的inode号,索引节点
#排序
【-t】#以时间信息进行排序,时间越早,排序越后
【-S】#以文件大小进行排序
【-r】 #倒叙排序
#指示类型
【-p】 #给目录加上一个/,标识目录
【-F】#给不同类型的文件加上一个标识符(/ 目录 ; = 表示套接字 socket文件; | 管道文件; * 可执行文件 ; @ 符号文件(已经不显示))

4.5.1 ls基础使用

[root@ly01 ~]# ls
01  02  03  04  05  123.txt  1.txt  data1  oldboy  tmp
[root@ly01 ~]# ls /root
01  02  03  04  05  123.txt  1.txt  data1  oldboy  tmp

4.5.2 【-l】以长格式显示目录列表的详细信息

[root@ly01 ~]# ls -l 	// 简写为“ll”
total 8
drwxr-xr-x. 2 root root   6 Oct 28 15:14 01
drwxr-xr-x. 2 root root   6 Oct 28 15:14 02
drwxr-xr-x. 2 root root   6 Oct 28 15:14 03
drwxr-xr-x. 2 root root   6 Oct 28 15:14 04
drwxr-xr-x. 2 root root   6 Oct 28 15:14 05
-rw-r--r--. 1 root root  12 Oct 28 16:14 123.txt
-rw-r--r--. 1 root root  12 Oct 28 16:12 1.txt
drwxr-xr-x. 2 root root  64 Oct 28 15:27 data1
drwxr-xr-x. 2 root root   6 Oct 28 15:14 oldboy
drwxr-xr-t. 9 root root 181 Oct 28 15:06 tmp
[root@ly01 ~]# ll test.txt
//查看指定文件的详细信息
-rwx-w----. 1 root root 0 Nov 11 16:19 test.txt

4.5.3 【-a】显示所有文件,包括隐藏文件

[root@ly01 ~]# ll -a
total 32
dr-xr-x---. 10 root root  228 Oct 28 16:13 .
dr-xr-xr-x. 17 root root  224 Oct 28 15:21 ..
drwxr-xr-x.  2 root root    6 Oct 28 15:14 01
drwxr-xr-x.  2 root root    6 Oct 28 15:14 02
drwxr-xr-x.  2 root root    6 Oct 28 15:14 03
-rw-------.  1 root root 2104 Oct 28 16:48 .bash_history
-rw-r--r--.  1 root root   18 Dec 29  2013 .bash_logout
-rw-r--r--.  1 root root  176 Dec 29  2013 .bash_profile
-rw-r--r--.  1 root root  176 Dec 29  2013 .bashrc
-rw-r--r--.  1 root root  100 Dec 29  2013 .cshrc

4.5.4 【-d】显示目录本身的信息

[root@ly01 ~]# ls -ld /root
dr-xr-x---. 10 root root 228 Oct 28 16:13 /root

4.5.5 【-h】人性化显示文件大小

[root@ly01 ~]# ll -h /etc
total 1.1M
drwxr-xr-x.  3 root root  101 Oct 24 08:05 abrt
-rw-r--r--.  1 root root   16 Oct 24 08:07 adjtime
-rw-r--r--.  1 root root 1.5K Jun  7  2013 aliases
-rw-r--r--.  1 root root  12K Oct 24 08:09 aliases.db
drwxr-xr-x.  2 root root  236 Oct 24 08:05 alternatives

4.5.6 【-1】以列表的形式显示文件

[root@ly01 ~]# ls -1 /root
01
02
03
04
05
123.txt
1.txt
data1
oldboy
tmp

4.5.7 【-t】以时间信息进行排序

[root@ly01 ~]# ll -t /root
total 8
-rw-r--r--. 1 root root  12 Oct 28 16:14 123.txt
-rw-r--r--. 1 root root  12 Oct 28 16:12 1.txt
drwxr-xr-x. 2 root root  64 Oct 28 15:27 data1
drwxr-xr-x. 2 root root   6 Oct 28 15:14 03
drwxr-xr-x. 2 root root   6 Oct 28 15:14 04
drwxr-xr-x. 2 root root   6 Oct 28 15:14 05
drwxr-xr-x. 2 root root   6 Oct 28 15:14 01
drwxr-xr-x. 2 root root   6 Oct 28 15:14 02

4.5.8 【-S】以文件大小进行排序

[root@ly01 ~]# ll -S /root
total 8
drwxr-xr-t. 9 root root 181 Oct 28 15:06 tmp
drwxr-xr-x. 2 root root  64 Oct 28 15:27 data1
-rw-r--r--. 1 root root  12 Oct 28 16:14 123.txt
-rw-r--r--. 1 root root  12 Oct 28 16:12 1.txt
drwxr-xr-x. 2 root root   6 Oct 28 15:14 01

4.5.9 【-r】倒序排列

[root@ly01 ~]# ll -rS
total 8
drwxr-xr-x. 2 root root   6 Oct 28 15:14 oldboy
drwxr-xr-x. 2 root root   6 Oct 28 15:14 02
drwxr-xr-x. 2 root root   6 Oct 28 15:14 01
-rw-r--r--. 1 root root  12 Oct 28 16:12 1.txt
-rw-r--r--. 1 root root  12 Oct 28 16:14 123.txt
drwxr-xr-x. 2 root root  64 Oct 28 15:27 data1
drwxr-xr-t. 9 root root 181 Oct 28 15:06 tmp

4.5.10 【-i】显示文件的inode号,索引节点

[root@ly01 ~]# ll -i
total 8
 67743004 drwxr-xr-x. 2 root root   6 Oct 28 15:14 01
101331318 drwxr-xr-x. 2 root root   6 Oct 28 15:14 02
    16522 drwxr-xr-x. 2 root root   6 Oct 28 15:14 03
 33584279 drwxr-xr-x. 2 root root   6 Oct 28 15:14 04
 67743005 drwxr-xr-x. 2 root root   6 Oct 28 15:14 05
 67743011 -rw-r--r--. 1 root root  12 Oct 28 16:14 123.txt

4.5.11 【-p】给目录加上一个/,标识目录

[root@ly01 ~]# ll -p
total 8
drwxr-xr-x. 2 root root   6 Oct 28 15:14 01/
drwxr-xr-x. 2 root root   6 Oct 28 15:14 02/
drwxr-xr-x. 2 root root   6 Oct 28 15:14 03/
drwxr-xr-x. 2 root root   6 Oct 28 15:14 04/
drwxr-xr-x. 2 root root   6 Oct 28 15:14 05/
-rw-r--r--. 1 root root  12 Oct 28 16:14 123.txt

4.5.12 【-F】给不同类型的文件加标识符

[root@ly01 ~]# ll -F /dev/
total 0
crw-rw----. 1 root video    10, 175 Oct 28 21:33 agpgart
crw-------. 1 root root     10, 235 Oct 28 21:33 autofs
drwxr-xr-x. 2 root root         140 Oct 28 21:33 block/
drwxr-xr-x. 2 root root           0 Oct 28 21:33 hugepages/
lrwxrwxrwx. 1 root root          25 Oct 28 21:33 initctl -> /run/systemd/initctl/fifo|

4.6 mkdir

说明:创建目录
格式:mkdir 【选项】【目录】

选项:
【-p】 创建多级目录,递归创建
【-v】 显示创建信息
【-m】创建目录,并修改目录权限

4.6.1 mkdir基础使用

[root@ly01 ~]# mkdir goudan
[root@ly01 ~]# mkdir goudan		//不可在同一路径创建同名文件
mkdir: cannot create directory ‘goudan’: File exists

4.6.2 【-p】递归创建目录

[root@ly01 ~]# mkdir -p /root/data/goudan

[root@ly01 ~]# mkdir /root/data/goudan	//创建多级目录时,必须加-p
mkdir: cannot create directory ‘/root/data/goudan’: No such file or directory

4.6.3 【-v】显示创建信息

[root@ly01 ~]# mkdir -v friend
mkdir: created directory ‘friend’

4.6.3 【-m】创建目录,并修改目录权限

[root@ly01 ~]# mkdir -m 777 hello

4.6.4 利用通配符批量创建目录

[root@ly01 ~]# mkdir -p test{01..05}	//创建有序目录
[root@ly01 ~]# mkdir -p test/{a..z}/{01..10}/{a..z} 
[root@ly01 ~]# mkdir -p a{bb,cc,dd}

4.6.5 注意事项

  1. linux系统区分大小写,而windows不区分
[root@ly01 ~]# mkdir a
[root@ly01 ~]# mkdir A
  1. linux中不支持同路径下同名的文件

4.7 touch

说明:创建文件,会修改文件的属性时间,文件已经存在时,不会报错,只会修改属性的时间
格式:touch 【选项】【文件】

4.7.1 创建文件+修改时间

[root@ly01 ~]# touch text
-rw-r--r--. 1 root root   0 Oct 28 22:05 text
[root@ly01 ~]# touch text	//修改时间戳
-rw-r--r--. 1 root root   0 Oct 28 22:06 text

4.7.2 批量创建文件

[root@ly01 ~]# touch goudan{01..05}.txt	 //有序创建

[root@ly01 ~]# touch goudan.{txt,py,sh}	//无序

4.8 cp

说明:复制文件
格式:cp 【选项】【源文件】【目标路径】

选项:
【-p】 保持属性
【-d】 保持软连接
【-r】 递归复制,主针对目录
【-a】=-pdr
【-i】进行交互式的询问
【-t】把源文件与目标路径进行调换位置

4.8.2 cp基础使用

[root@ly01 ~]# cp goudan.txt /tmp
[root@ly01 ~]# cp goudan.sh /tmp/goudan.conf 	//复制并改名

4.8.3 【-r】递归复制

[root@ly01 ~]# cp a/ /tmp/
cp: omitting directory ‘a’
[root@ly01 ~]# cp -r a/ /tmp/	//复制目录时必加-r

4.8.4 【-p】保持属性不变

[root@ly01 ~]# cp -rp A/ /tmp/

4.8.5 【-a】=-pdr

[root@ly01 ~]# cp -a /etc/ /tmp

4.8.6 免交互方式

[root@ly01 ~]# \cp goudan.txt.py /tmp  //临时取消别名,\:转义符,取消特殊符号的含义

[root@ly01 ~]# /bin/cp 1.txt /tmp	//使用绝对路径执行

4.8.7 【-t】把源文件与目标路径进行调换位置

[root@ly01 ~]# cp -t /tmp 123.txt

4.9 mv

说明:移动文件,重命名
格式:mv 【选项】【源文件】【路径】

选项:
【-f】强制覆盖
【-i】进行交互式的询问
【-t】把源文件与目标路径进行调换位置

4.9.1 mv基础使用

[root@ly01 ~]# mv goudan.txt /tmp

[root@ly01 ~]# mv test02/ /tmp   //移动目录不需要加选项

4.9.2 【-f】强制覆盖

[root@ly01 ~]# mv -f a/ /tmp	//三种免交互覆盖方式
[root@ly01 ~]# \mv a/ /tmp
[root@ly01 ~]#/bin/mv a/ /tmp

4.9.3 【-t】把源文件与目标路径进行调换位置

[root@ly01 ~]# mv -t /tmp test05.txt

4.9.4 重命名

[root@ly01 ~]# mv text text.sh
[root@ly01 ~]# mv 'text.sh' text
[root@ly01 ~]# mv text /tmp/text.sh

4.10 rename

说明:重命名文件
结构:rename 【旧字符】【新字符】【对象】

[root@ly01 ~]# rename goudan 233 goudan.py

4.11 rm

说明:删除文件
结构:rm 【选项】【对象】

选项:
【-f】强制删除
【-r】递归删除,针对目录
【-i】交互式询问

4.11.1 rm基础使用

[root@ly01 ~]# rm 233.py

4.11.2 【-f】强制删除

[root@ly01 ~]# \rm 233.py
[root@ly01 ~]# rm -f 233.py

4.11.3 【-r】递归删除

[root@ly01 ~]# rm -f goudan
rm: cannot remove ‘goudan’: Is a directory
[root@ly01 ~]# rm -rf goudan	//删除目录必须加r

4.11.4 注意事项

[root@ly01 ~]# rm -rf ./*	 //删除当前目录下所有内容
[root@ly01 ~]# rm -rf . /*	//.和/*间有空格会删根

五、文件管理:显示文件内容

5.1 cat

说明:显示文件的所有内容,创建文件,合并文件。
格式:cat 【选项】【文件】

选项:
【-b】“–number-nonblank”给显示的文件内容加上行数,忽略空行
【-n】“–number”给显示的文件内容加上行数,不忽略空行
【-A】“–show-all”给显示的文件内容每行结尾加上一个标识符$,用来判断是否存在空格或者tab键

5.1.1 cat基础用法

[root@ly01 ~]# cat 123.txt
my
name 
2333"

5.1.2 【-b】给显示的文件内容加上行数,忽略空行

[root@ly01 ~]# cat -b text.txt
     1	2
     2	3
			//回车
     3	 	//空格

     4		//TAB键

5.1.3 【-n】#给显示的文件内容加上行数,不忽略空行

[root@ly01 ~]# cat -n text.txt 
     1	2
     2	3
     3	
     4	 
     5	
     6		

5.1.4 【-A】#给显示的文件内容每行结尾加上一个标识符$,用来判断是否存在空格或者tab键

[root@ly01 ~]# cat -A text.txt
2$
3$
$
 $
$
^I$

5.1.5 合并文件(同时也可以创建新文件)

[root@ly01 ~]# cat 123.txt text.txt > newfile.txt

5.1.6 创建新文件(利用重定向)

[root@qls ~]# cat  > 123.txt << EOF   #开始符,将输入交给cat处理后,结果输出到文件
> my
> name
> 233
> 
> 123
> EOF		#结束符

####注意:遇到特殊符号的时候

[root@ly01 ~]# cat >>file.txt<< EOF
> good
> \$USER
> day
> EOF
[root@ly01 ~]# cat >>file.txt<< "EOF"
> good
> $USER
> day
> EOF

5.2 tac

说明:显示文件,按行进行倒叙显示
格式:tac 【选项】【文件】

[root@ly01 ~]# tac 123.txt 
> EOF
> 123
> 
> 233
> name
> my

5.3 more

说明:分页显示文件内容,文件内容结束,会自动退出
格式:more 【选项】文件

选项
【-num(数字)】指定显示多少行为一页
【+num(数字)】 从第几行开始显示

5.3.1 more内部命令

【空格或者f】向下翻页
【b】向上翻页
【回车】向下显示一行
【h】 帮助信息
【=】 显示当前光标所在行数
【/xxx】 搜索内容,不会高亮显示,【n】#向下搜索
【q】 退出

5.4 less

说明:分页显示文件内容,文件内容结束,不会自动退出
格式:less【选项】文件

选项
【-N 】“–LINE-NUMBERS”,显示的时候加上行号
【-i】 “–ignore-case”,忽略大小写

5.4.1 less内部命令

【空格或者f】向下翻页
【b】向上翻页
【回车】向下显示一行
【h】 帮助信息
【=】 显示当前所在页是第几行到多少行,总共多少行,总共显示多少了字节,总共多少字节
【/xxx】 搜索内容,会高亮显示,【n】#向下搜索,【N】#向上搜索
【q】 退出

5.5 head

说明:显示文件的头部信息,默认显示十行的内容
格式:head【选项】【文件】

选项
【-n num(数字)】 简写为“-数字”,“–lines”,取消默认输出 ,指定多少行
【-c num(数字)】 “–bytes”,显示指定的多少个字符

5.5.1 head基础使用

[root@ly01 ~]# head services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports

5.5.2 【-n】取消默认输出 ,指定多少行

[root@ly01 ~]# head -n1 services
# /etc/services:
[root@ly01 ~]# head -1 services 
# /etc/services:

5.5.3 【-c】显示指定的多少个字符

[root@ly01 ~]# head -c5 services 
# /et[root@ly01 ~]# 

5.6 tail

说明:显示文件尾部信息 ,默认显示十行内容
格式:tail【选项】【文件】

选项
【-n】“–lines”,取消默认输出 ,指定结尾多少行
【-c】 “–bytes”,显示最后几个字符
【-f】 “–follow”,实时显示文件内容,实时查看文件内容的更新;文件不存在时,会报错退出
【-F】实时显示文件内容,实时查看文件内容的更新;文件不存在时,会不停尝试读取该文件,直到文件存在

5.6.1 tail基础使用

[root@ly01 ~]# tail passwd 
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
maicai:x:1000:1000::/home/maicai:/bin/bash

5.6.2【-n】取消默认输出 ,指定结尾多少行

[root@ly01 ~]# tail -2 passwd 
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
maicai:x:1000:1000::/home/maicai:/bin/bash

5.6.3【-c】显示最后几个字符

[root@ly01 ~]# tail -c5 services 
oker		//后有换行符

5.6.4【-f】实时显示文件内容,实时查看文件内容的更新;文件不存在时,会报错退出

[root@ly01 ~]# tail -3f /var/log/messages
Oct 29 21:40:37 ly01 kernel: e1000: eth0 NIC Link is Down
Oct 29 21:40:41 ly01 kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Oct 29 21:40:41 ly01 NetworkManager[948]: <info>  [1572356441.4517] device (eth0): carrier: link connected

5.6.5【-F】实时显示文件内容,实时查看文件内容的更新;文件不存在时,会不停尝试读取该文件,直到文件存在

[root@ly01 ~]# tail -F /var/log/messages  //-F后不跟数字

5.7 tailf

说明:实时显示文件内容,实时查看文件内容的更新,如果文件内容不更新时,不会去读取磁盘信息,减少磁盘的读写压力
格式:tailf【选项】【文件】

选项
【-n】取消默认输出 ,指定结尾多少行

5.7.1 【-n】#取消默认输出 ,指定结尾多少行

[root@ly01 ~]# tailf -3 /var/log/messages
Oct 29 21:40:41 ly01 NetworkManager[948]: <info>  [1572356441.4517] device (eth0): carrier: link connected
Oct 29 22:01:01 ly01 systemd: Started Session 2 of user root.
Oct 29 22:01:01 ly01 systemd: Starting Session 2 of user root.

企业面试题:tail -f 和 -F 及tailf 有什么区别?

5.8 grep

说明:过滤,给过滤出来的内容加上颜色
格式:grep 【选项】模式 【文件】

选项
【-c】“–count”,统计过滤出来内容的行数
【-n】“–line-number”,显示过滤出来的内容所在文件的行数
【-o】“–only-matching”,只显示过滤出来的内容
【-i】“–ignore-case”,忽略大小写
【-v】“–invert-match”,排除
【-w】“–word-regexp”,精确匹配
【-A num(数字)】“–after-context”,显示过滤出来的内容向下几行
【-B num(数字)】 “–before-context”,显示过滤出来的内容向上几行
【-C num(数字)】“–context”,显示过滤出来的内容向上向下各几行
【-E】#支持扩展正则

5.8.1 grep基础用法

[root@ly01 ~]# grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

5.8.2 【-c】统计过滤出来内容的行数

[root@ly01 ~]# grep -c 'root' passwd
2

5.8.3 【-n】显示过滤出来的内容所在文件的行数

[root@ly01 ~]# grep -n 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

5.8.4 【-o】只显示过滤出来的内容

[root@ly01 ~]# grep -o 'root' passwd
root
root
root
root

5.8.5 【-i】忽略大小写

[root@ly01 ~]# grep -i 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT
rooter

5.8.6 【-v】排除

[root@ly01 ~]# grep -v  '/sbin/nologin'  passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
maicai:x:1000:1000::/home/maicai:/bin/bash
ROOT
rooter

5.8.7 【-w】精确匹配

[root@ly01 ~]# grep -w 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

5.8.8 【-A】显示过滤出来的内容向下几行

[root@ly01 ~]# grep -A2 'root' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
--
rooter

5.8.9 【-B】 #显示过滤出来的内容向上几行

[root@ly01 ~]# grep -B2 'root' passwd
root:x:0:0:root:/root:/bin/bash
--
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
--
maicai:x:1000:1000::/home/maicai:/bin/bash
ROOT
rooter

5.8.10 【-C】显示过滤出来的内容向上向下各几行

[root@ly01 ~]# grep -C2 'root' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
--
maicai:x:1000:1000::/home/maicai:/bin/bash
ROOT
rooter

六、文件管理:查找文件及命令路径

6.1 which

说明:查看命令的绝对路径
结构:which 【选项】命令

[root@ly01 ~]# which sh
/usr/bin/sh

[root@ly01 ~]# $(which ping) baidu.com

6.2 whereis

说明:
whereis 查看文件的路径,显示二进制文件、说明文件、源代码文件
whereis 【选项】命令

选项:
【-b】只查看二进制文件,命令文件
【-m】显示帮助文件
【-s】源代码文件——暂无示例

6.2.1 whereis基础使用

[root@ly01 ~]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz

6.2.2【-b】#只查看二进制文件,命令文件的路径

[root@ly01 ~]# whereis -b cd
cd: /usr/bin/cd

6.2.3【-m】#显示命令帮助文件的路径

[root@ly01 ~]# whereis -m cd
cd: /usr/share/man/man1/cd.1.gz

6.3 locate

说明:根据本地数据库查找文件(不推荐)
格式:locate 【选项】【关键词】

选项:
【-i】忽略大小写
【-r】支持正则

6.3.1 locate基础使用

[root@ly01 ~]# yum install -y mlocate	//安装locate命令
[root@ly01 ~]# updatedb		//每次添加文件,都需要手动更新数据库
[root@ly01 ~]# locate hosts
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/active/modules/100/denyhosts

6.3.2 【-i】忽略大小写

[root@ly01 ~]# locate -i hosts
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/active/modules/100/denyhosts
/etc/selinux/targeted/active/modules/100/denyhosts/cil
/etc/selinux/targeted/active/modules/100/denyhosts/hll
/etc/selinux/targeted/active/modules/100/denyhosts/lang_ext
/root/HOSTS

6.3.3 【-r】支持正则

[root@ly01 ~]# locate -r hosts$
/etc/hosts
/etc/selinux/targeted/active/modules/100/denyhosts
/usr/share/doc/pam-1.1.8/txts/README.pam_rhosts
/var/cache/yum/x86_64/7/timedhosts

6.3.4 注意事项

使用locate命令有时候会出现搜索不全,主要是因为配置文件/etc/updatedb.conf里设置了过滤规则
原因具体查看:https://www.cnblogs.com/zhangzongjian/p/10708212.html

6.4 type

说明:显示命令的路径,默认只显示外部命令的绝对路径,内置需要加上-a
格式:type 【选项】命令

选项:
【-a】在环境变量“PATH”指定的路径中,显示给定指令的信息及路径,包括命令别名
【-p】只显示外部命令的绝对路径

6.4.1 type基础使用

[root@ly01 ~]# type cd		//内部命令
cd is a shell builtin
[root@ly01 ~]# type ping	//外部命令
ping is /usr/bin/ping

6.4.2 【-a】在环境变量“PATH”指定的路径中,显示给定指令的信息及路径,包括命令别名

[root@ly01 ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
[root@ly01 ~]# type -a mv
mv is aliased to `mv -i'
mv is /usr/bin/mv

6.4.3【-p】只显示外部命令的绝对路径

[root@ly01 ~]# type -p ping
/usr/bin/ping

6.5 find

说明:查找文件
格式:find 查找的目录 选项

选项:
【-type】 类型(后跟f / d / l)
【-maxdepth】目录的层级(该选项需要放在其他选项前)
【-name】根据名称查找
【-iname】忽略名称的大小写
【-ls】 显示查找出来的文件详细信息

[root@ly01 ~]# find / -maxdepth 2 -type f -iname "oldboy*.txt" -ls
33585697    0 -rw-r--r--   1 root     root            0 Oct 30 12:43 /etc/oldboy.txt
67163459    0 -rw-r--r--   1 root     root            0 Oct 30 17:30 /root/oldboya.txt
67161225    0 -rw-r--r--   1 root     root            0 Oct 30 17:29 /root/OLDBOY.TXT
33584167    0 -rw-r--r--   1 root     root            0 Oct 30 12:42 /tmp/oldboy.txt
 19890    0 -rw-r--r--   1 root     root            0 Oct 30 12:40 /opt/oldboy.txt

七、文件管理:文件上传与下载

7.1 wget

说明:联网下载指定的URL地址。支持断点续传
格式:wget 【选项】【URL】

选项:
【-O 】指定路径下载,可以重命名
【-q】静默下载,不显示下载信息
【–limit-rate】=(k,M),限速下载

7.1.1 wget基础使用

[root@ly01 ~]# yum install -y wget		//安装wget
[root@ly01 ~]# wget http://nginx.org/download/nginx-1.17.5.tar.gz	//wget+URL

7.1.2 【-O 】指定路径下载,可以重命名

[root@ly01 ~]# wget -O nginx.tar.gz http://nginx.org/download/nginx-1.17.5.tar.gz		////注-O后必须加重命名的文件,不能和其他选项互换位置

7.1.3 【-q】静默下载,不显示下载信息

[root@ly01 ~]# wget -q -O nginx.tar.gz http://nginx.org/download/nginx-1.17.5.tar.gz		

7.1.4 保存网页信息

[root@ly01 ~]# wget www.baidu.com		//将网页上代码保存为index.html文件

7.2 curl

说明:利用URL规则在命令行下工作的文件传输工具。访问网站,测试网站是否能通,可以下载文件,但必须先写入文件,再下载
格式:curl【选项】【URL】

选项:
【-o】将访问的内容写入到指定的文件中
【-s】静默输出

7.2.1 curl基础使用

[root@ly01 ~]# curl www.baidu.com

7.2.2 【-o】将访问的内容写入到指定的文件中

[root@ly01 ~]# curl -o baidu.html www.baidu.com

7.2.2 【-s】静默输出

[root@ly01 ~]# curl -s -o baidu.html www.baidu.com

7.2.3 下载阿里源的步骤

#更新基础源 :base
[root@ly01 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#下载扩展源:epel
[root@ly01 yum.repos.d]# curl -o   /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

7.3 rz

说明:上传 ,不支持超过4G的文件
格式:rz 【选项】

选项:
【-E】如果上传的路径存在该文件,则进行重命名,以数字为结尾0…N

7.3.1 rz基础使用

[root@ly01~]# yum install  -y  lrzsz	//安装rz、sz命令
[root@ly01 ~]# rz

7.3.2 【-E】#如果上传的路径存在该文件,则进行重命名,以数字为结尾0…N

[root@ly01 ~]# rz  -E  
[root@ly01 ~]# ll
-rw-r--r--. 1 root root 1823976 Oct 21 10:36 uTorrent.exe
-rw-r--r--. 1 root root 1823976 Oct 21 10:36 uTorrent.exe.0

7.4 sz

说明:下载
格式:sz 文件

[root@ly01 ~]# sz OLDBOY.TXT 

八、文件管理:字符处理命令

8.1 sort

说明:将文本文件排序
格式:sort 【选项】【文件】

选项:
【-t】 指定分隔符,默认是以空白字符作为分隔符
【-k】+num(数字) 指定按照第几列进行排序,默认以第一列进行排序
【-n】以数字的大小的进行排序
【-r】倒序

8.1.1 sort基础使用

[root@ly01 ~]# sort file.txt 
a:8
d:1
e:4
s:232
w:0

8.1.2 【-t】指定分隔符,默认是以空白字符作为分隔符

[root@ly01 ~]# sort -t ':' file.txt		//默认以第一列排序
a:8
d:1
e:4
s:232
w:0

8.1.3【-k】+num(数字)指定按照第几列进行排序,默认以第一列进行排序

[root@ly01 ~]# sort -t ':' -k2 file.txt	 //按照第二列的首字符依次排序
w:0
d:1
s:232
e:4
a:8

8.1.4 【-n】以数字的大小的进行排序

[root@ly01 ~]# sort -t ':' -nk2 file.txt
w:0
d:1
e:4
a:8
s:232

8.1.5 【-r】倒序

[root@ly01 ~]# sort -t ':' -rnk2 file.txt	//以“:”作为分隔符,取文件第2列的内容,按照数字大小进行倒序排列
s:232
a:8
e:4
d:1

8.2 uniq

说明:去重,统计重复行数,跟 sort配合使用
格式:uniq 【选项】【文件】

选项:
【-c】统计重复的行的次数

8.2.1 uniq基础用法

[root@ly01 ~]# sort file.txt 
fine
fine
five
gone
wait
WAIT
want
[root@ly01 ~]# sort file.txt|uniq
fine
five
gone
wait
WAIT
want

8.2.2 【-c】统计重复的行的次数

[root@ly01 ~]# sort file.txt|uniq -c
      2 fine
      1 five
      1 gone
      1 wait
      1 WAIT
      1 want
[root@ly01 ~]# sort file.txt|uniq -c|sort -n	//将去重完的内容再排序
      1 five
      1 gone
      1 wait
      1 WAIT
      1 want
      2 fine

8.3 cut

说明:截取字段

选项:
【-d】指定分隔符,默认是以tab键作为分隔符
【-f】取出指定的列,取出多列,用“逗号”分割

8.3.1 【-d】指定分隔符,搭配【-f】使用,取第几列

[root@ly01 ~]# cut -d ':' -f3 passwd|sort -n
0
1
2
3
4
5
6
7
[root@ly01 ~]# cut -d ':' -f7 passwd|sort|uniq -c|sort -n
      1 /bin/sync
      1 /sbin/halt
      1 /sbin/shutdown
      2 /bin/bash
     16 /sbin/nologin

8.3.2 【-f】取出指定的列,取出多列,用“逗号”分割

[root@ly01 ~]# echo "my user name is , ly01" >file.txt 
[root@ly01 ~]# cut -d ' ' -f2,6 file.txt  
user ly01			//取多行

8.4 tr

说明:替换命令,仅支持单对单的替换,也可用作压缩或删除
格式:tr 【选项】【参数】

【-d】 删除字符

8.4.1 【-d】 删除字符

[root@ly01 ~]# cat file3.txt 
good,erer,dfd
[root@ly01 ~]# tr -d ',' 
goodererdfd

8.4.2 替换字符

[root@ly01 ~]# cut -d ' ' -f 4,5 file.txt |tr ',' ' '
is  ly01
[root@ly01 ~]# tr 'my' 'is' < file.txt 
is user naie is, ls01
[root@ly01 ~]# tr 'u' 'y' < file.txt #仅支持单对单的替换
my yser name is, ly01

8.5 wc

说明:统计行数,字节数,列数
格式:wc 【选项】【文件】

选项:
【-l】“–lines”,统计行数
【-c】“–bytes”,统计字节数
【-w】“words”,统计字段数(列数),以空白字符作为分隔符
【-L】“–max-line-length”,统计文件最长一行的字符数量

8.5.1【-l】统计行数

[root@ly01 ~]# wc -l /etc/services
11176 /etc/services

###扩展

[root@ly01 ~]# grep -o 'root' passwd|grep -c '.'	//过滤出root并统计行数
4
[root@ly01 ~]# grep -o 'root' passwd|wc -l
4

8.5.2【-c】统计字节数

[root@ly01 ~]# wc -c /etc/services
670293 /etc/services

8.5.3【-w】统计字数

[root@ly01 ~]# wc -w /etc/services
61033 /etc/services

8.5.4【-L】统计文件最长一行的字符数量

[root@ly01 ~]# echo 'hello'|wc -L
5

8.6 sed

说明:替换,增删改查,针对行处理
格式:sed 【选项】【脚本】【文件】
sed -i ‘s#旧的字符串#新的字符串#g’ filename

选项:
【-n】“–silent”,取消默认输出,跟p命令配合使用,表示打印第几行
【-e】允许多项编辑
【-i】替换
【-r】支持扩展正则

内部命令
【p】“print”;打印
【$】结尾
【=】在每行上面显示当前内容所在行号
【;】 多条命令的分隔符
【d】删除
【a】在指定行后追加
【i】在指定行前插入
【s】替换
【g】全局
【^】表示以谁开头

8.6.1 查 【-n】+【p】;【=】

[root@ly01 ~]# sed -n '1p' passwd		//取第一行
root:x:0:0:root:/root:/bin/bash
[root@ly01 ~]# sed -n '$p' passwd		//取最后一行
maicai:x:1000:1000::/home/maicai:/bin/bash
[root@ly01 ~]# sed -n '2,5p' passwd		//取出连续的多行,第二行到第五行
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@ly01 ~]# sed -n '2p;5p' passwd 	//取出不连续的多行,第二行和第五行
bin:x:1:1:bin:/bin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ly01 ~]# sed = passwd			//在每行上方显示行号
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@ly01 ~]# sed -n '/root/p' passwd   //打印包含root的字符串
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ly01 ~]# sed -n '/^daemon/,/^sync/p' passwd	//取出daemon行到sync行
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
[root@ly01 ~]# sed -n '/^daemon/p;/^sync/p' passwd	//取出daemon行和sync行
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

8.6.2 删 【d】

[root@ly01 ~]# sed '1d' passwd	//删除第一行
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@ly01 ~]# sed '1,10d' passwd	//删除连续的多行,第一行到第十行
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@ly01 ~]# sed '1d;10d' passwd	//删除不连续的多行,删除第一行和第十行
[root@ly01 ~]# sed '/root/d' passwd	//删除包含root的行
[root@ly01 ~]# sed '/^daemon/,/^sync/d' passwd	//删除连续多行,从daemon到sync的行
[root@ly01 ~]# sed '/^daemon/d;/^sync/d' passwd	//删除不连续的多行,daemon行和sync行

8.6.3 增 【a】下行追加;【i】上行插入;【-e】多项编辑

#【a】下行追加

[root@ly01 ~]# sed '1afine' passwd	//在第一行的后面追加内容
root:x:0:0:root:/root:/bin/bash
fine
[root@ly01 ~]# sed '$afine' passwd 		//在文件结尾追加内容
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
maicai:x:1000:1000::/home/maicai:/bin/bash
fine
[root@ly01 ~]# sed '$afine\ngood\nwell' passwd #追加多行内容
maicai:x:1000:1000::/home/maicai:/bin/bash
fine
good
well

#【i】上行插入

[root@ly01 ~]# sed '1ifine' passwd 	//在第一行的前面插入内容
fine
root:x:0:0:root:/root:/bin/bas
[root@ly01 ~]# sed '$ifine' passwd  	//在最后一行前面插入内容
fine
maicai:x:1000:1000::/home/maicai:/bin/bash
[root@ly01 ~]# sed '$ifine\ngood' passwd 		//插入多行内容
fine
good
maicai:x:1000:1000::/home/maicai:/bin/bash

【-e】允许多项编辑

[root@ly01 ~]# sed -e '1ifine' -e '2igood' passwd 	//插入不同的行 
fine
root:x:0:0:root:/root:/bin/bash
good
bin:x:1:1:bin:/bin:/sbin/nologin
[root@ly01 ~]# sed '1ifine' passwd |sed '3igood'
fine
root:x:0:0:root:/root:/bin/bash
good
bin:x:1:1:bin:/bin:/sbin/nologin

8.6.4 改 【-i】真正修改+【s】+【g】

[root@ly01 ~]# sed 's#root#goudan#g' passwd		//全局替换
goudan:x:0:0:goudan:/goudan:/bin/bash
operator:x:11:0:operator:/goudan:/sbin/nologin

[root@ly01 ~]# sed -i.bak 's#root#goudan#g' passwd		//备份,并且全局替换保存
[root@ly01 ~]# sed 's#root#goudan#' passwd   //替换每一行的第一个root
[root@ly01 ~]# sed '10s#root#goudan#g' passwd //只替换第十行的root

[root@ly01 ~]# sed '1,10s#root#goudan#g' passwd //只替换第一行到第十行的root
goudan:x:0:0:goudan:/goudan:/bin/bash
operator:x:11:0:operator:/goudan:/sbin/nologin
[root@ly01 ~]# sed '/^root/s#root#goudan#g' passwd //替换以root开头的行
goudan:x:0:0:goudan:/goudan:/bin/bash

8.6.5 【-r】支持扩展正则

#反向引用

[root@ly01 ~]# ip a s eth0|sed -rn '3s#(.*t )(.*)(/.*)#\2#gp'
10.0.0.100

8.7 awk

说明:取列,计算,统计,数组,判断,循环
格式: gawk [ POSIX or GNU style options ] -f program-file [ – ] file

选项:
【-F】:指定分隔符 ,默认以空白字符为分隔符

正则
【*】正则 ;前面的字符出现0次或者0次以上
【+】扩展正则;前面的字符出现1次或者1次以上
【?】扩展正则;前面的字符出现0次或者1次

内部命令及变量
【NR】表示行号;后面跟 == >= > <= <
【&&】并且
【||】或者
【!】取反
【NF】每一行的总共有多少列
【$NF】表示最后一列
【$0】文件所有内容
【$1…$N】表示字段,列

8.7.1 取行

[root@ly01 ~]# awk 'NR==1' passwd 	//取单行
root:x:0:0:root:/root:/bin/bash
[root@ly01 ~]# awk 'NR==1,NR==3' passwd 	//取连续的多行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#第二种方法
[root@ly01 ~]# awk 'NR>=1&&NR<=3' passwd	
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@ly01 ~]# awk 'NR==1;NR==3' passwd	 //取不连续的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#第二种方法
[root@ly01 ~]# awk 'NR==1||NR==3' passwd
[root@ly01 ~]# awk '/root/' passwd	//过滤包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ly01 ~]# awk '/^daemon/,/^lp/' passwd	过滤daemon的行到lp的行
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@ly01 ~]# awk '/^daemon/;/^lp/' passwd	//过滤daemon的行或lp的行
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#第二种方法
[root@ly01 ~]# awk '/^daemon/||/^lp/' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ly01 ~]# awk '/^daemon/&&/^lp/' passwd	过滤同时包含daemon和lp的行

[root@ly01 ~]# awk ‘!/root/’ passwd //取不包含root的行,相当于grep -v,sed ‘d’

8.7.2 取列

[root@ly01 ~]# awk -F ':' '{print$1}' passwd //以:为分隔符,取出第一列,print打印;:=':'='[:]'
root
bin
daemon
adm
lp
sync
[root@ly01 ~]# awk -F '[:]' '{print$NF}' passwd 	//打印最后一列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
[root@ly01 ~]# awk -F '[:]' '{print$1,$2}' passwd 	//以:为分隔符,取出第一列和第二列
root x
bin x
daemon x
adm x
lp x
sync x
shutdown x
[root@ly01 ~]# awk -F ':' 'NR==1{print$2}' passwd //以:为分隔符,取第一行第二列
x
[root@ly01 ~]# awk '{print$0}' passwd //显示整个文件内容
[root@ly01 ~]# awk '{print NR,$O}' passwd	//显示文件内容及行号
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

8.8 用cut、sed和awk取出ip地址

#cut取地址

[root@ly01 ~]# ip a s eth0|grep -w 'inet'|cut -d ' ' -f6|cut -d '/' -f1
10.0.0.100
[root@ly01 ~]# ip a s eth0|grep -w 'inet'|tr '/' ' '|cut -d ' ' -f6
10.0.0.100
[root@ly01 ~]# ifconfig eth0|grep -w 'inet'|cut -d ' ' -f10
10.0.0.100

#sed取地址

[root@ly01 ~]# ip a s eth0|sed -rn '3s#(.*t )(.*)(/.*)#\2#gp'
10.0.0.100
[root@ly01 ~]# ifconfig|sed -rn '2s#(.*t )(.*)( n.*)#\2#gp'
10.0.0.100

#awk取地址

[root@ly01 ~]# ip a s eth0|awk -F '[ /]+' 'NR==3{print$3}'	//指定空格会将前面算一列
10.0.0.100
[root@ly01 ~]# ifconfig eth0|awk 'NR==2{print$2}'	//默认分隔符,会忽略前面的空格
10.0.0.100
[root@ly01 ~]# ifconfig eth0|awk '/netmask/{print$2}'
10.0.0.100

8.9 column

说明:用于排版

选项:
【-t】 以tab的格式进行排序

[root@ly01 ~]# awk -F '[:]' '{print$1,$2}' passwd |column -t
root             x
bin              x
daemon           x
adm              x
lp               x
sync             x

九、系统文件类型

9.1 文件的属性

67249416 -rw-r–r--. 1 root root 25 Oct 31 10:27 file1.txt

  1. 67249416 :inode号,索引节点。

  2. -:文件的类型,该处为普通文件

  3. rw-r–r--. :文件的权限

  4. 1:硬链接的数量

  5. root 第四列:文件属主

  6. root 第五列:文件属组

  7. 25:文件大小,文件的字节数,目录在这里表示的是目录结构的大小,结构越大,文件越多

[root@ly01 ~]# du -sh /etc	#查看目录的大小
31M	/etc
  1. Oct 31 10:43 第七-九列:文件最后的修改时间

mtime 修改时间 (文件内容最后被修改的时间)***
atime 访问时间 (文件中的数据库最后被访问的时间)
ctime 改变时间(文件属性,即元数据,改变时间)

  1. file1.txt 第十列:文件名,文件名不属于文件的属性

9.2 文件的7种类型

  1. - 普通文件
  2. d 目录
  3. l 软链接文件
    lrwxrwxrwx. 1 root root 7 Oct 23 12:15 bin -> usr/bin
  4. b 块设备文件,磁盘
    brw-rw----. 1 root disk 8, 0 Oct 29 08:41 sda
  5. c 字符设备
    crw-rw-rw-. 1 root root 1, 8 Oct 29 08:41 random s
  6. socket 文件套接字文件
    srw-rw-rw-. 1 root root 0 Oct 29 08:41 log
  7. p 管道文件
    prw-------. 1 root root 0 Oct 29 08:41 /run/systemd/initctl/fifo

9.3 文件的后缀名

9.3.1 介绍

windows有非常严格的扩展名定义

Linux上面的扩展名不代表任何意义,只是为了方便工作人员识别的规范

9.3.2 普通文件的细化分类

  1. 文本类型
    .txt 普通文件
    .log 日志文件
    .sh shell脚本
    .py Python脚本
    .html 网页文件
    .conf 配置文件
    .cnf
    .xml
  2. 二进制的可执行文件
    LSB
  3. 压缩包
    .tar .gz bz tar.gz tar.bz2 tgz .zip .cpio .iso xz
  4. 数据类型
    data
  5. 图片
    .jpg
    .png

9.4 文件的链接文件

9.4.1 介绍

  1. 文件有文件名、文件属性及文件内容,其中文件内容属于用户数据,文件属性属于inode(索引节点),inode属于元数据。
    用户数据(data block):放到磁盘中的真实数据,我们称之为block(文件数据块)
    元数据:元数据里存储文件的属性,inode只是元数据的一部分,文件名不属于元数据。
    文件名:存放在上级目录
  2. 用户查找文件时,是先通过上层目录中的元数据,找到目录中存放的文件名和inode号,之后凭借inode号,找到文件所在的元数据区的inode,通过指针,找到数据真实存放的block
  3. linux种的链接文件分为两种,一种硬链接文件,一种是软链接文件(符号链接)

9.4.2 ln创建链接文件

说明:创建链接文件,默认创建硬链接
格式:ln 【源文件】【目标文件】

选项:
【-s】表示创建软链接文件

#创建文件软链接

[root@ly01 ~]# ln -s file.txt newfile.txt	//文件创建软链接
[root@ly01 ~]# ll -i 
total 0
67157621 -rw-r--r--. 1 root root 0 Nov  4 17:51 file.txt
67158141 lrwxrwxrwx. 1 root root 8 Nov  4 17:52 newfile.txt -> file.txt

#创建目录硬链接

[root@ly01 ~]# ln -s /root/file.txt /tmp/test.txt

#创建硬链接
[root@ly01 ~]# ln file.txt hardfile.txt
[root@ly01 ~]# ll -i
total 2032
67161219 -rw-r–r--. 2 root root 4 Nov 4 18:23 file.txt
67161219 -rw-r–r--. 2 root root 4 Nov 4 18:23 hardfile.txt

#批量创建硬链接

[root@ly01 ~]# touch {01..10}.txt
[root@ly01 ~]# ls -1|awk '{print"ln "$1" new_"$1}'|bash
[root@ly01 ~]# ll
total 0
-rw-r--r--. 2 root root 0 Nov  4 18:29 01.txt
-rw-r--r--. 2 root root 0 Nov  4 18:29 02.txt
-rw-r--r--. 2 root root 0 Nov  4 18:29 03.txt
-rw-r--r--. 2 root root 0 Nov  4 18:29 new_01.txt
-rw-r--r--. 2 root root 0 Nov  4 18:29 new_02.txt
-rw-r--r--. 2 root root 0 Nov  4 18:29 new_03.txt

#删除链接

rm -rf

9.4.3 软链接

含义:相当于windows中的快捷方式。跟源文件属于不同类型的文件,inode号不同。

  1. 相当于windows中的快捷方式,里面存储的源文件的路径,及可以执行源文件
  2. 对软链接文件操作,就相当于对源文件操作
  3. 跟源文件属于不同类型的文件,inode号不同。
  4. 软链接的后面会指向源文件的路径
  5. 删除源文件,软链接存在,但是会失效,出现红底白字闪烁状
  6. 可以对目录文件创建软链接
  7. 创建软链接时,如果使用的是相对路径,那么目标文件也使用相对路径,同理

9.4.4 企业软链接的应用

  1. 磁盘分区不够,创建软链接,将访问位置放到指定的分区中。
  2. 版本升级及回退

#升级

[root@ly01 ~]# rm -rf  /root/nginx && ln -s /root/nginx-1.17.5.tar.gz  /root/nginx[root@ly01 ~]# ll
total 2024
lrwxrwxrwx. 1 root root      25 Nov  4 18:13 nginx -> /root/nginx-1.17.5.tar.gz
-rw-r--r--. 1 root root 1032630 Aug 14 01:01 nginx-1.16.1.tar.gz
-rw-r--r--. 1 root root 1036056 Oct 22 23:25 nginx-1.17.5.tar.gz

#回退

[root@ly01 ~]# rm -rf /root/nginx && ln -s /root/nginx-1.16.1.tar.gz /root/nginx
[root@ly01 ~]# ll
total 2024
lrwxrwxrwx. 1 root root      25 Nov  4 18:14 nginx -> /root/nginx-1.16.1.tar.gz
-rw-r--r--. 1 root root 1032630 Aug 14 01:01 nginx-1.16.1.tar.gz
-rw-r--r--. 1 root root 1036056 Oct 22 23:25 nginx-1.17.5.tar.gz

【&&】前面的命令执行成功,再执行后面的命令。执行失败不会执行后面的命令
【||】前面的命令执行失败,再执行后面的命令。执行成功不会执行后面的命令
【|】把前面的输出结果交给后面的命令操作

  1. 路径不方便书写

9.4.5 硬链接

含义: linux中,多个文件的inode号指向同一个block,这些文件,我们称之为互为硬链接。相当于一个文件有多个入口。

  1. 多个文件的inode号指向同一个block,相当于多个入口,不会多占用磁盘空间
  2. 删除硬链接文件,对源文件没有影响
  3. 删除源文件,文件还是存在
  4. 只有硬链接数为0的时候,这个文件才会被真正的删除。
  5. 硬链接只能对文件创建,不能跨区

9.4.6 企业硬链接的应用

  1. 防止文件误删除

9.4.7 软链接与硬链接的区别

  1. 含义:
    软链接相当于windows上面的快捷方式,跟源文件属于不同类型的文件,inode号不同
    硬链接就是多个文件的inode是相同的,指向同一个block。相当于给这个文件加了很多入口。

  2. 创建方式:
    ln命令默认就是创建硬链接
    ln名加-s选项才会创建软链接

  3. 创建对象:
    软链接可以跨文件系统,对文件和目录都能创建
    硬链接只能对文件进行创建,且不能跨文件系统。

  4. 删除
    删除软链接,对源文件和硬链接文件没有任何影响
    删除硬链接文件,对源文件和软链接文件没有任何影响
    删除源文件,对硬链接文件没有影响,但是软链接文件会失效,红底白字闪烁状
    只有删除源文件及所有的硬链接文件,这个文件才会被真正的删除。

9.5 命令的执行过程

9.5.1 以“ping”为例,说明命令的执行过程

  1. 判断ping命令是通过什么路径执行,如果绝对路径,就直接执行
  2. 如果不是,会查询ping命令是否存在别名,存在则执行别名
  3. 不存在别名,会查看ping命令是内置命令还是外部命令,如果是内置命令,直接执行
  4. 外部命令会查找ping命令是否存在hash缓存,存在缓存根据缓存执行
  5. 不存在缓存,会通过变量PATH查找ping命令的绝对路径,找到则执行
  6. 如果没有找到命令,则报错,command not found

9.5.2 hash

说明:查看hash缓存表,命令的缓存记录

选项:
【-d】删除指定的命令缓存
【-r】清空所有的缓存记录

#无选项

[root@ly01 ~]# hash		//查看hash缓存表

#【-d】删除指定的命令缓存

[root@ly01 ~]# hash -d wc	//删除wc命令缓存

#【-r】清空所有的缓存记录

[root@ly01 ~]# hash -r

你可能感兴趣的:(Linux基础)