Linux学习之文件管理命令

1、ls命令:- list directory contents

ls命令用于列出目标目录下所有子目录和文件

(1)使用格式:

 ls [OPTION]... [FILE]...

(2)option:

ls -a:显示所有文件,包括隐藏文件

[root@hu /]# ls -a /recover
.  ..  cptest  temp  test

ls -A:显示除了 · 和 · · 之外的所有文件

[root@hu /]# ls -A /recover
cptest  temp  test

ls -a /path:显示指定路径下的文件
ls -l:long-长格式列表,显示文件的详细属性信息

[root@hu /]# ls -l 
lrwxrwxrwx.   1 root root     7 Oct 11 08:36 bin -> usr/bin
dr-xr-xr-x.   5 root root  1024 Oct 11 09:43 boot

ls -h:将文件大小转换为易识别的单位——转换后为非精确数值

[root@hu /]# ls -l /recover
total 12
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest
drwxr-xr-x. 11 root root 4096 Nov 24 23:17 temp
drwxr-xr-x.  2 root root 4096 Nov 25 02:05 test
[root@hu /]# ls -hl /recover
total 12K
drwxr-xr-x.  4 root root 4.0K Nov 24 23:20 cptest
drwxr-xr-x. 11 root root 4.0K Nov 24 23:17 temp
drwxr-xr-x.  2 root root 4.0K Nov 25 02:05 test

ls -d:将目录像文件一样显示,而非显示此目录下的文件
ls -ld:查看目录的详细信息,而非目录下文件的详细信息
ls -r:逆序显示文件——reverse

[root@hu /]# ls -l /recover
total 12
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest
drwxr-xr-x. 11 root root 4096 Nov 24 23:17 temp
drwxr-xr-x.  2 root root 4096 Nov 25 02:05 test
[root@hu /]# ls -rl /recover
total 12
drwxr-xr-x.  2 root root 4096 Nov 25 02:05 test
drwxr-xr-x. 11 root root 4096 Nov 24 23:17 temp
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest

ls -R:递归显示目录下所有的文件和子目录

补充:

1、查询结果说明
	d r-x r-x r-x.   5 root root  1024 Oct 11 09:43 boot
	1  2    3   4    5  6     7     8        9       10
	1——d:表示文件类型
	2——rwx:表示文件属主权限
	3——rwx:表示文件属组权限
	4——rwx:表示文件其他用户权限(非属主、属组)
	5——5:表示文件被硬链接次数
	6——root:表示文件属主
	7——root:表示文件属组
	8——1025:表示文件大小(以字节为单位(用-h选项换算单位))
	9——oct 11  09:43——表示文件最后一次修改时间(过去的时间)
	10——boot:表示文件名
2、硬链接与软连接概念:
	(1)inode号:元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。
	(2)硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接。
		硬链接的特点:
			文件有相同的 inode 及 data block;
			只能对已存在的文件进行创建;
			不能交叉文件系统进行硬链接的创建;
			不能对目录进行创建,只可对文件创建;
			删除一个硬链接文件并不影响其他有相同 inode 号的文件(只有删除最后一链接时才会删除文件本身)
	
	(3)软链接:若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。(软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块)
		软链接特点:
		软链接有自己的文件属性及权限等;
			可对不存在的文件或目录创建软链接;
			软链接可交叉文件系统;
			软链接可对文件或目录创建;
			创建软链接时,链接计数 i_nlink 不会增加;
			删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

	(4)链接的特点:链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处
3、路径表示
	· :表示当前路径
	·· :表示当前路径的上一级目录路径
4、变量查看——使用echo $name进行查看
	echo $PWD:表示当前工作目录
	echo $OLDPWD:表示上一次的工作目录
文件类型分为以下几种:
“-”:表示常规文件——即f
“d”:directory——目录文件(完成路径映射)
“b”:block device——块设备文件(支持以block为单位进行随机访问)
“c”:character device——字符设备(支持以character为单位进行线性访问)
	Major number:主设备号,用于标识设备类型,进而确定加载的驱动程序
	major number:次设备号,用于标识同一类型中的不同设备(设备号之前使用8位二进制表示)
“l”:symbolic link——符号链接文件(如:Windows快捷方式或软连接)
“s”:socker——套接字文件
“p”:pipe——命名管道

2、pwd命令:- print name of current/working directory

pwd命令用于显示当前路径的完整路径

(1)使用格式:

pwd [OPTION]...

(2)option:
pwd -l:目录连接链接时,输出连接路径
pwd -p:显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径

3、cd命令:- Change the shell working directory.

cd命令用于切换当前工作目录到指定的工作目录。

(1)使用格式:

cd [option]  

(2)option:
cd ~:表示切换到自己的家目录
cd ~ name:表示切换到指定用户名的家目录
cd -:表示在上一次所在目录与当前目录来回切换
注意:bash中‘~’表示家目录;cd可用于相对路径也可用于绝对路径

补充:

1、相对路径和绝对路径
	(1)文件路径:就是文件在电脑中的位置
	(2)相对路径:相对路径是以你当前的目录为起点,以你到达的目录为终点的路径。比如:usr/local/bin这里假设当前目录为根目录。
		 注意:表示相对路径时我们并没有加上表示当前目录的那个.,而是直接以目录名usr开头,因为这个usr目录是在根目录“/”下,可以省略那个.
	(3)绝对路径:绝对路径就是以根“/”目录为起点,以你所到达的目录为终点,表现形式为/usr/local/bin。

4、cat命令- concatenate files and print on the standard output

cat命令用于连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。

(1)使用格式:

cat [OPTION]... [FILE]...

(2)option:
cat -n:表示显示每行的行号——即对每行编号

[root@hu recover]# cat -n ./temp/test.txt
     1	sdfwag
     2	w
     3	eg
     4	sd

cat -E:表示在每行末尾显示$——即在每行末尾显示结束符

[root@hu recover]# cat -E ./temp/test.txt
sdfwag$
w$
eg$
sd$

5、tac命令:- concatenate and print files in reverse

tac命令用于文本查看的工具,与cat相同,但是显示顺序与cat相反

(1)使用格式:

 tac [OPTION]... [FILE]...

(2)option:
tac -b:表示在行前面非行尾添加分隔标志

wsdfwag[root@hu recover]# tac ./temp/test.txt    ==>表示不换行

tac -r:表示将分隔标志视作正则表达式来解析
tac -s<字符>:表示 使用指定字符串代替换行作为分隔标志

6、file命令:— determine file type

file命令用于探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程

(1)使用格式:

file [option][FILE] 

(2)option:

file -b:表示不显示文件名称

[root@localhost ~]# file -b install.log 
UTF-8 Unicode text

7、echo命令:- display a line of text

echo命令用于显示文本(一般只起提示作用)

(1)使用格式:

	echo [SHORT-OPTION]... [STRING]...
	echo LONG-OPTION

(2)option:
echo -n:表示不自动进行换行
echo -e:表示让转义字符生效
echo -e:也可以用来控制颜色显示

[root@hu recover]# echo -e "test\\ test1\ntest\t"
test\ test1
test

[root@hu recover]# echo -e  "\033[31mhello.my bestfriend\033[0m test one"
hello.my bestfriend test one

echo ‘string’(“string”):表示引用

补充:

1、转义字符:
	 \a 发出警告声;
   	 \b 删除前一个字符;
  	 \c 最后不加上换行符号;
  	 \f 换行但光标仍旧停留在原来的位置;
  	 \n 换行且光标移至行首;
  	 \r 光标移至行首,但不换行;
  	 \t 插入tab;
  	 \v 与\f相同;
  	 \\ 插入\字符;
   	 \nnn 插入nnn(八进制)所代表的ASCII字符;
2、强引用与弱引用
	(1)强引用:变量引用不执行替换—— ‘’ 单引号表示
	(2)弱引用:变量引用会被替换—— “” 双引号表示
3、变量引用正规符号:${name}
	    也可以使用:$name

8、date命令:- print or set the system date and time

date命令用于显示或设定系统的日期与时间。

(1)使用格式:

    date [OPTION]... [+FORMAT]
    date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

(2)option:
date:显示日期和时间
date -u [MMDDhhmm[[CC]YY][.ss]]
date [MMDDhhmm[[CC]YY][.ss]]:设置时间日期

[root@hu recover]# date 112713142018.10
Tue Nov 27 13:14:10 EST 2018
[root@hu recover]# date -u 112713142018.10
Tue Nov 27 13:14:10 EST 2018

date -d “string”:根据指定的string时间显示

[root@hu recover]# date -d tomorrow
Wed Nov 28 13:21:57 EST 2018

date +%F:根据自定义格式显示时间

[root@hu recover]# date +%m-%d
11-27

补充:

1、string有以下几种
	yesterday:显示昨天这个时刻的时间
	today:显示今天这个时刻的时间
	tomorrow:显明天这个时刻的时间
2、时间格式有以下几种
	%H 小时(以00-23来表示)。 
	%I 小时(以01-12来表示)。 
	%K 小时(以0-23来表示)。 
	%l 小时(以0-12来表示)。 
	%M 分钟(以00-59来表示)。 
	%P AM或PM。 
	%r 时间(含时分秒,小时以12小时AM/PM来表示)。 
	%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 
	%S 秒(以本地的惯用法来表示)。 
	%T 时间(含时分秒,小时以24小时制来表示)。 
	%X 时间(以本地的惯用法来表示)。 
	%Z 市区。 
	%a 星期的缩写。 
	%A 星期的完整名称。 
	%b 月份英文名的缩写。 
	%B 月份的完整英文名称。 
	%c 日期与时间。只输入date指令也会显示同样的结果。 
	%d 日期(以01-31来表示)。 
	%D 日期(含年月日)。 
	%j 该年中的第几天。 
	%m 月份(以01-12来表示)。 
	%U 该年中的周数。 
	%w 该周的天数,0代表周日,1代表周一,异词类推。 
	%x 日期(以本地的惯用法来表示)。 
	%y 年份(以00-99来表示)。 
	%Y 年份(以四位数来表示)。 
	%n 在显示时,插入新的一行。 
	%t 在显示时,插入tab。 
	MM 月份(必要) 
	DD 日期(必要) 
	hh 小时(必要) 
	mm 分钟(必要)
	ss 秒(选择性) 

9、clock命令:- query or set the hardware clock (RTC)

clock命令用于查询或设置硬件的时钟

(1)使用格式:

hwclock [function] [option...]

(2)option:
clock -s:以硬件为准,将系统时间改为与硬件时间相同
clock -w:以系统为准,将硬件时间调为与系统时间相同

[root@hu recover]# clock
	Tue 27 Nov 2018 12:37:45 AM EST  -0.924185 seconds
[root@hu recover]# date
	Tue Nov 27 13:36:09 EST 2018
[root@hu recover]# clock -w
[root@hu recover]# date
	Tue Nov 27 13:36:32 EST 2018
[root@hu recover]# clock
	Tue 27 Nov 2018 01:36:37 PM EST  -0.248309 seconds

注意:Linux有两套时钟
系统时钟:启动时从硬件读取日期和时间,之后不再联系,由Linux内核通过CPU工作平率计时。
硬件时钟:由Bios主板上的纽扣电池提供电源的时钟。

10、cal命令:- display a calendar

cal命令用于显示当前日历,或者指定日期的日历。

(1)使用格式:

	cal [options] [[[day] month] year]

(2)option:
cal -1:显示当前单月输出——或任意指定的月份或年的日历显示;

[root@hu recover]# cal -1
    November 2018   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

cal -3:显示临近三个月的日历;
cal -s:将星期日作为月的第一天;
cal -m:将星期一作为月的第一天;
cal -j:显示“julian”日期;
cal -y:显示当前年的日历。
11、which命令:- shows the full path of (shell) commands.

which命令用于查看命令的完整路径

(1)使用格式:

	which [options] [--] programname [...]

(2)option

which --skip-alias:查询时忽略别名

	[root@hu lib]# which ls
	alias ls='ls --color=auto'
		/bin/ls
	[root@hu lib]# which --skip-alias ls
	/bin/ls

12、whereis命令:- locate the binary, source, and manual page files for a command

whereis命令用于显示二进制文件路径,源码文件路径,手册页路径。

(1)使用格式:

	whereis [options] [-BMS directory... -f] name...

(2)option
whereis -b:只显示we进制文件路径
whereis -m:只显示手册文件路径
whereis -s:只显示源码文件路径

	[root@hu lib]# whereis -b ls
	ls: /usr/bin/ls
	[root@hu lib]# whereis -m ls
	ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
	[root@hu lib]# whereis -s ls

13、who命令:- show who is logged on

who命令用于查看登录用户信息

(1)使用格式

	who [OPTION]... [ FILE | ARG1 ARG2 ]

(2)option
who -b:显示最近一次系统启动时间
who -d:显示死进程
who -l:显示登录进程
who -u:显示登录的用户
who -r:显示运行级别

	[root@hu lib]# who -b
         	system boot  2018-11-26 05:08
	[root@hu lib]# who -d
	[root@hu lib]# who -l
	[root@hu lib]# who -u
	root     :0           2018-11-26 05:09   ?          2825 (:0)
	root     pts/0        2018-11-26 05:10  old         3389 (:0)
	root     pts/1        2018-11-26 05:13   .          4507 (192.168.1.103)
	root     pts/2        2018-11-26 05:14 00:11        4545 (192.168.1.103)
	[root@hu lib]# who -r
         	run-level 5  2018-11-26 05:09

14、w命令:- Show who is logged on and what they are doing.

w命令用于显示登录的用户以及这些用户在做什么

(1)使用格式

	w [options] user [...]

(2)option
w -s:以短格式显示,不显示登录时间,jcpu、pcpu

	[root@hu lib]# w
 	20:39:05 up 1 day,  2:31,  4 users,  load average: 0.00, 0.01, 0.05
	USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
	root     :0       :0               Mon05   ?xdm?  10:35   0.56s gdm-session-worker [pam/gdm-password]
	root     pts/0    :0               Mon05   39:25m  0.04s  0.04s /bin/bash
	root     pts/1    192.168.1.103    Mon05    1.00s  0.54s  0.04s w
	root     pts/2    192.168.1.103    Mon05    2:57   0.26s  0.00s less -s
	[root@hu lib]# w -s
	 20:41:13 up 1 day,  2:33,  4 users,  load average: 0.00, 0.01, 0.05
	USER     TTY      FROM              IDLE WHAT
	root     :0       :0               ?xdm?  gdm-session-worker [pam/gdm-password]
	root     pts/0    :0               39:28m /bin/bash
	root     pts/1    192.168.1.103     1.00s w -s
	root     pts/2    192.168.1.103     5:05  less -s

15、mkdir命令:- make directories

mkdir命令用于创建目录

(1)使用格式

	mkdir [OPTION]... DIRECTORY...
		mkdir命令是对基名的操作
		basename /path/filename
		filename就是基名
	注意:(mkdir没有使用option时)路径基名为mkdir的作用对象,若基名前路径不存在则报错。

(2)option
mkdir -p:自动按需创建父目录
mkdir -v:(verbose)显示详细过程

[root@hu test]# mkdir -pv ./test12/testa/testv
mkdir: created directory ‘./test12’
mkdir: created directory ‘./test12/testa’
mkdir: created directory ‘./test12/testa/testv’

mkdir -m mode:直接给定权限;否则创建的文件为默认模式

	[root@hu test]# mkdir -m 777 test2
	[root@hu test]# ls -ll
	total 8
	-rw-r--r--. 1 root root   81 Nov 25 02:05 mvtest
	drwxrwxrwx. 2 root root 4096 Nov 27 21:52 test2

16、rmdir命令:- remove empty directories

rmdir命令用于删除空目录

注意:若目录为非空目录使用rmdir会报错

(1)使用格式

	rmdir [OPTION]... DIRECTORY...

(2)option
rmdir -p:删除某目录后,若父目录为空则一并删除
rmdir -v:显示执行过程

	[root@hu test]# rmdir -pv ./test12/testa/testv
	rmdir: removing directory, ‘./test12/testa/testv’
	rmdir: removing directory, ‘./test12/testa’
	rmdir: removing directory, ‘./test12’
	rmdir: removing directory, ‘.’
	rmdir: failed to remove directory ‘.’: Invalid argument

17、tree命令:- list contents of directories in a tree-like format.

以树状结构显示目录层级结构

(1)使用格式

tree directory

(2)option
tree:显示当前所有层的层级结构
tree -L n directory:显示指定目录的n层的层级结构

[root@hu recover]# tree -L 2
.
├── a_c
├── a_d
├── b_c
├── b_d
├── cptest
│   ├── etc
│   ├── home
│   └── testcp
├── temp
│   ├── etc
│   ├── q_y
│   ├── q_z
│   ├── system-release -> centos-release
│   ├── te

18、more命令:- file perusal filter for crt viewing

more命令用于查看文件——翻屏至文件尾部后自动退出

(1)使用格式

	more [options] file [...]

(2)option

	[root@hu /]# more /etc/profile.d/welcome.sh
	echo "欢迎进入Linux世界,尽情期待!"

19、less命令:- opposite of more

less命令用于查看文件——man命令就是调用的less命令

(1)使用格式

	less FILE

(2)option

[root@hu /]#less /etc/profile.d/welcome.sh
echo "欢迎进入Linux世界,尽情期待!"

20、head命令:- output the first part of files

head命令用于查看文本——默认查看文件前10行

(1)使用格式

head [OPTION]... [FILE]...

(2)option
head -n x:指定查看文件前x行

[root@hu test]# head -n 3 mvtest
sdfwag
w
eg

21、tail命令:- output the last part of files

tail命令用于显示文件后10行

(1)使用格式

	tail [OPTION]... [FILE]...

(2)option
tail -n x:指定显示后x行内容

	[root@hu test]# tail -n 5 mvtest
	s
	dg
	a
	dga

tail -f:显示文件尾部并不退出,可以追加输入进来的新行值,直接显示。

	[root@hu test]# tail -n 2 -f  mvtest
	dga

	testwe es
	sgd
	sgs
	dg
	sgwe

22、stat命令:- display file or file system status

stat命令用于显示文件或文件系统状态

(1)使用格式

	stat [OPTION]... FILE...

(2)option
注意:文件分两类数据:第一类就是元数据——metdate文件的属性;第二类就是真数据——date真正的数据。
stat看到的都是元数据,而cat、tail等文件看到的是真正的数据流

[root@hu test]# stat mvtest
  File: ‘mvtest’
  Size: 81        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 266993      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2018-11-27 19:49:16.726183451 -0500
Modify: 2018-11-25 02:05:42.105665019 -0500
Change: 2018-11-25 02:05:42.107665045 -0500
 Birth: -
 
1、 File:文件名
2、 Size:文件大小
3、Blocks:文件占用的数据块
4、IO Block:文件所占数据块的块大小
5、Device: 硬件,既说明该文件在硬盘的那个柱面
6、Inode: 节点号
7、Links:链接次数
8、Access:文件的总权限
9、Uid:文件的属主权限
10、Gid:文件的属组权限
11、Context:安全上下文
12、Access:最近一次被访问的时间
13、Modify:文件内容最近一次更改的时间
14、Change: 文件属性最近一次更改的时间
15、Birth:创建的时间

23、touch命令:- change file timestamps

touch命令用于改变时间截

(1)使用格式

touch [OPTION]... FILE...

(2)option
touch -a:仅改变Access时间
touch -c:当filename不存在时,也不会创建新文件或路径——默认时要创建和安装
touch -m:仅改变modify时间
touch -t [[CC]YY]MMDDhhmm[.ss]:用于自定义更改时间

[root@hu test]# touch -t 201811231225.03 mvtest
[root@hu test]# stat mvtest
  File: ‘mvtest’
  Size: 81        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 266993      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2018-11-23 12:25:03.000000000 -0500
Modify: 2018-11-23 12:25:03.000000000 -0500
Change: 2018-11-27 20:31:10.365772990 -0500
 Birth: -

24、cp命令:- copy files and directories

cp命令用于将源文件复制到目的地的目标文件中

(1)使用格式

cp [OPTION]... [-T] SOURCE DEST
单个文件复制;目标文件可以是一个文件也可是目录
	a、若目标文件不存在,则事先创建此目标文件,并将源文件数据流复制到目标文件中
	b、若目标文件存在,若目标文件是非目录文件——则复制源文件数据流覆盖目标文件
					    若目标文件时目录文件——则先在目标文件下创建一个与源文件名相同的文件,并将源文件数据复制到目标文件中。
cp [OPTION]... SOURCE... DIRECTORY
多个文件复制,目标文件必须是一个目录
cp [OPTION]... -t DIRECTORY SOURCE...
多个文件复制,只不过目标文件和源文件相反
	a、若目标文件不存在:则报错
	b、若目标文件存在,若目标文件是非目录文件——则报错
					     若目标文件是目录——分别复制每个文件至目标文件中,并保持原名
	c、复制时需要加上-r参数才能复制目录,不然会报错				

补充:

	A、源文件:要复制的文件
	B、目标文件:将文件复制到目标地点中的文件
	C、复制主要针对数据而言(非元数据),称为流式数据(一个字节一个字节)

(2)option
cp -i:交互式,提醒用户确认
cp -f:强制覆盖目标文件
cp -r:递归复制目录
cp -d:复制符号链接文件本身,而非复制其指向的源文件

[root@hu test]# cp -d /etc/redhat-release /recover
[root@hu recover]# ll
total 28
drwxr-xr-x.  2 root root 4096 Nov 27  2018 a_c
drwxr-xr-x.  2 root root 4096 Nov 27  2018 a_d
drwxr-xr-x.  2 root root 4096 Nov 27  2018 b_c
drwxr-xr-x.  2 root root 4096 Nov 27  2018 b_d
drwxr-xr-x.  4 root root 4096 Nov 24 23:20 cptest
lrwxrwxrwx.  1 root root   14 Nov 27 21:46 redhat-release -> centos-release
此时redhat-release -> centos-release只是链接文件而不是文件本身。

cp -a:复制时保留文件所有属性,用于实现归档
cp -p:-p (保持) – 对于每个原文件(或目录),在复制时也复制下述特性:

  • 最后一次修订时间与最后一次访问时间。
  • 所属用户ID和所属组ID(仅在有权限如此做时)。
  • 文件权限位以及SUID和SGID权限位。
    –preserve
    mode:权限
    owership:从属关系
    timestamps:时间截
    context:安全上下文
    xattr:扩展属性
    links:符号链接
    all:上诉所有属性

25、mv命令: - move (rename) files

mv命令用于对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。

(1)使用格式

mv [OPTION]... [-T] SOURCE DEST
单文件移动若没有创建指定则创建一个自定的目标名,再将数据流移动到目标文件中
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
多文件移动时不需要像cp一样加-r选项

(2)option
mv -i:交互式删除,提醒用户确认
mv -f:强制移动文件

更改文件名
[root@hu recover]# ls
cptest  test  ttp
[root@hu recover]# mv ttp temp
[root@hu recover]# ls
cptest  temp  test

26、rm命令:- remove files or directories

rm命令用于删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

(1)使用格式

rm [OPTION]... FILE...

(2)option
rm -r:递归删除文件
rm -f:强制删除文件

[root@hu recover]# rm -rfv ./cptest/home
removed directory: ‘./cptest/home/hu/Music’
removed ‘./cptest/home/hu/.bash_profile’
removed ‘./cptest/home/hu/.bash_logout’

注意:自建回收站——所有文件建议不要直接删除,而是移动到自建回收站中,确认好了以后再删除

27、set命令:- Set or unset values of shell options and positional parameters.

set命令用于设置或撤销shell选项的值和位置参数。

(1)使用格式

	set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

(2)option
set +C:撤销防覆盖重定向特性
set -C:开启防覆盖重定向特性

A、设置重定向防覆盖已存在文件夹

	[root@hu io]# set -C						==>开启防覆盖重定向
	[root@hu io]# cat test1.txt > test.txt
	-bash: test.txt: cannot overwrite existing file
	[root@hu io]# set +C						==>取消防覆盖重定向
	[root@hu io]# cat test1.txt > test.txt

B、若在开启防覆盖设置后,任然确定要重定向覆盖,可以使用 | 来强制重定向覆盖

	[root@hu io]# cat test1.txt > test.txt
	-bash: test.txt: cannot overwrite existing file
	[root@hu io]# cat test1.txt >| test.txt

28、tr命令:- translate or delete characters

tr命令用于将输入数据当中的字符,凡是在SET1定义范围内出现的,全部对位转换为SET2出现的字符。

(1)使用格式

	tr [OPTION]... SET1 [SET2]

(2)option
tr -d:删除SET1中指定的字符,并不做转换
tr -c:取代所有不属于第一字符集的字符

[root@hu io]# tr -d [a-e] < ./test.txt     //指定删除文中a到e的字母
sfsjgkfjgklfsgs
fg

fg
s
[root@hu io]# cat test.txt
dsdfasdjgdkfjgdklfsgsd
fg
d
fg
sd

29、tee命令:- read from standard input and write to standard output and files

tee命令用于从标准输入读取数据的同时写入标准输出文件中

(1)使用格式

tee [OPTION]... [FILE]...

(2)option

[root@hu io]# tee test.txt   //单独使用时就是将键盘输入字字符保存到文件test1.txt中
test1
test1
test2
test2
^C
[root@hu io]# cat test.txt
test1
test2

[root@hu io]# cat test1.txt | tee test.txt |tr [a-z] [A-Z]     //将test1.txt中的数据读出来通过管道送给test.txt文件中,再通过管道将数据送给tr修改指定字符大小写。
TEST1
TEST112
TEST23
TEST5443

30、chmod命令:- change file mode bits

chmod命令用于更改文件的权限

(1)使用格式

chmod [OPTION]... MODE[,MODE]... FILE...
	a、修改文件以指定权限定义,三类用户用逗号隔开——每一个文件都定义了三类权限
	b、三类用户:
		u——>属主
		g——>属组
		o——>其他
		a——>所有—all
	c、模式表示方法
		赋权表示法——直接操作一类用户的所有权限位
		如:u=rwx;g=rw;o=r;ug=rx;ugo=rw等后面的rwx自定义
			例:
				[root@hu recover]# ll
				-rw-r--r--. 1 root root    7 Nov 29 01:12 test.txt		==>修改前
				[root@hu recover]# chmod ogu=x test.txt
				---x--x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改后
		授权表示法——直接操作一类用户的一个权限位
		如:u+(rwx):表示额外多一位权限
			g和o同样;a+(rwx)可以直接写成+(rwx)
			例:
				[root@hu recover]# chmod ogu=x test.txt
				---x--x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改前
				[root@hu recover]# chmod u+rw test.txt
				[root@hu recover]# chmod g+r test.txt
				[root@hu recover]# ll
				-rwxr-x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改后
		注意:chmod +w test.txt此时仅对属组更改生效
		
chmod [OPTION]... OCTAL-MODE FILE...
	使用八进制一并修改权限
	例:
		[root@hu recover]# ll
		-rwxr-x--x. 1 root root    7 Nov 29 01:12 test.txt		==>修改前
		[root@hu recover]# chmod 624 test.txt
		[root@hu recover]# ll
		-rw--w-r--. 1 root root    7 Nov 29 01:12 test.txt
		
chmod [OPTION]... --reference=RFILE FILE...
	使用参考文件权限修改当前文件权限使之与参考文件权限相同
	例:
		[root@hu recover]# ll
		----------. 1 root root    0 Nov 29 07:12 cp.txt		==>被修改文件修改前
		-rw--w-r--. 1 root root    7 Nov 29 01:12 test.txt		==>权限参考文件
		[root@hu recover]# chmod --reference=./test.txt cp.txt
												 参考文件   被修改文件
		[root@hu recover]# ll
		-rw--w-r--. 1 root root    0 Nov 29 07:12 cp.txt		==>被修改文件修改后
		-rw--w-r--. 1 root root    7 Nov 29 01:12 test.txt		==>权限参考文件

(2)option
chmod -R:递归修改权限——此option仅在授权表示法中实用

[root@hu recover]# ll
drwxr-xr-x. 2 root root 4096 Nov 28 05:07 io		==>递归修改前
[root@hu recover]# chmod -R 754 io
[root@hu recover]# ll
drwxr-xr--. 2 root root 4096 Nov 28 05:07 io		==>递归修改后
[root@hu recover]# ll io
-rwxr-xr--. 1 root root  0 Nov 28 05:13 test1.txt		==>递归修改后子文件权限
-rwxr-xr--. 1 root root 12 Nov 28 05:13 test.txt

注意:用户只能修改属主为自己的文件的那些权限
31、chown命令:- change file owner and group

chown命令用于修改文件的属主和属组

(1)使用格式

	chown [OPTION]... [OWNER][:[GROUP]] FILE...	:此条格式可以仅用来修改属主或属组
	chown [OPTION]... --reference=RFILE FILE...		:使用参考文件来更改文件属主和属组

(2)option
chown -R :递归修改

-rw--w-r--. 1 root root    0 Nov 29 07:12 cp.txt		==>修改前
[root@hu recover]# chown hu:jack cp.txt				==>修改文件的属主和属组
[root@hu recover]# ll
-rw--w-r--. 1 hu   jack    0 Nov 29 07:12 cp.txt

[root@hu recover]# chown hu cp.txt
[root@hu recover]# ll
-rw--w-r--. 1 hu   root    0 Nov 29 07:12 cp.txt		==>仅修改属主

[root@hu recover]# chown :hu cp.txt
[root@hu recover]# ll
-rw--w-r--. 1 root   hu    0 Nov 29 07:12 cp.txt		==>仅修改属组

32、chgrp命令:- change group ownership

chgrp命令可采用群组名称或群组识别码的方式改变文件或目录的所属群组。使用权限是超级用户。——要被改变的组名必须要在/etc/group文件内存在才行

(1)使用格式

两种格式用法同chown命令
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

注意:当用户对目录有写权限时,但对目录下文件没有写权限时,不能修改文件中内容,但是可以删除文件。

33、umask命令:

umask命令用来设置限制新建文件权限的发向掩码——遮罩码

A、生成文件时默认权限:666 - umask
B、生成目录时默认权限:777 - umask
注:文件因为默认就没有执行权限,所以运用666 - umask时;若要减得的结果中有执行权限则需要+1
	例:
	[root@hu recover]# umask								==>查询本机的掩码
	0022
	文件权限=666-022(umask)=644——>无执行权限
	644+1=645——>有执行权限
C、修改umask
	例:
	[root@hu recover]# umask 0024
	[root@hu recover]# umask
	0024

注意:用命令设置的仅对当前shell有效
仅管理员能修改文件的属主和属组

34、install命令:- copy files and set attributes

install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。

(1)使用格式

install [OPTION]... [-T] SOURCE DEST			==>单文件或目录复制
例:
	[root@hu recover]# install -m 644 cp.txt cptest
	[root@hu recover]# ll ./cptest
	total 0
	-rw-r--r--. 1 root root 0 Nov 29 08:45 cp.txt
	
install [OPTION]... SOURCE... DIRECTORY		==>将多问价复制到指定目录
install [OPTION]... -t DIRECTORY SOURCE...	==>将文件复制到指定目录
例:
	[root@hu recover]# install -m 644 cp.txt test.txt cptest
	[root@hu recover]# ll ./cptest
	total 4
	-rw-r--r--. 1 root root  0 Nov 29 08:46 cp.txt
	-rw-r--r--. 1 root root 39 Nov 29 08:46 test.txt
	
install [OPTION]... -d DIRECTORY...			==>创建空目录
例:
	[root@hu recover]# install -d tt
	[root@hu recover]# ls
	cptest  cp.txt  io  test.txt  tt

(2)option
install -m:设定文件权限,默认为775
install -o:设定目标文件属主
install -g:设定目标文件属组
install -d:创建空目录

35、mktemp命令:- create a temporary file or directory

mktemp命令用于创建临时文件或目录

(1)使用格式

mktemp [OPTION]... [TEMPLATE]

(2)option
mktemp -d:创建目录而不创建文件
mktemp -u:并不创建文件,只是用于测试

[root@hu ~]# mktemp /tmp/mytest.XXXX		——>. XXXX表示随机字符至少三个
/tmp/mytest.TyTf
注意:mktemp会将创建的临时文件名直接返回,因此可直接通过命令引用保存起来
	且在tmp中创建的临时文件过段时间一般会自动删除
例:[root@hu recover]#  test=$(mktemp /tmp/mytest.XXXX)

36、grep命令: grep, egrep, fgrep - print lines matching a pattern

grep命令用于打印输出用户给定的模式内容——即搜索整个文件的每一行,使用用户给定的模式—过滤条件,若某行匹配此模式则显示出来。

注意:模式——即由正则表达式的元字符及文本所编写出的过滤条件(默认显示只要此行中有匹配的字符则全行显示——贪婪模式显示)

补充:

1、Linux上文本处理工具
	1)、grep:文本过滤工具(pattern—模式)工具——grep、egrep、fgrep
	2)、sed—stream editor:流编辑器,文本编辑工具
	3)、awk:Linux上实现为gawk,文本报告生成器——格式化文本
	
2、正则表达式——Regual Expression —RE/Regexp
	1)、正则表达式使用单个字符串来描述、匹配一系列某个句法规则的字符串,在很多文本编辑器里面,正则表达式通常用来检索、替换那些匹配某模式的文本。
	2)、正则表达式分类:
		A、基本正则表达式:Basic Regual Expression——BRE
		B、扩展正则表达式:Extend Regual Expression——ERE
	3)、基本正则表达式元字符
	第一类:字符匹配
		A、· :匹配任意单个字符
		例:
			[root@hu recover]# grep "r..t" /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			operator:x:11:0:operator:/root:/sbin/nologin
			ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
		B、[ ]:匹配指定范围内任意单个字符
		例:
			[root@hu recover]# grep "s[[:alpha:]]in" /etc/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
		C、[^]:匹配指定范围外的任意单个字符
	第二类:匹配次数——用在要指定其出现的次数的字符后,用于限定字符出现的次数,默认有多长匹配多长
		A、*:匹配其前面字符任意次
		例:
			[root@hu recover]# grep "a*" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
		B、·*:匹配任意长度字符
		例:
			[root@hu recover]# grep "a.*" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
			aaxxx
		C、\?:匹配其前面的字符0次或1次,其前面字符可有可无
		例:
			[root@hu recover]# grep "a\?" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
			aaxxx
			xxxxvdfgf
		D、\+:匹配其前面的字符1次或多次,其前面字符出现至少一次
		例: 
			[root@hu recover]# grep "a\+" cp.txt
			aaaddsdfsdfsdf
			aaaaaaasdjdsdfgd
			aaxxx
		E、\{m\}:匹配其前面的字符m次
		例:
			[root@hu recover]# grep "a\{6\}" cp.txt
			aaaaaaasdjdsdfgd
		F、\{m,n\}:匹配其前面的字符至少m次,最多n次
		G、\{0,n\}:匹配最多n次
		H、\{m,\}:匹配最少m次
	第三类:位置锚定——即搜索指定位置
		A、^:行首锚定——用于模式最左侧
		例:
			[root@hu recover]# grep "^root" /etc/passwd
			root:x:0:0:root:/root:/bin/bash
		B、$:行尾锚定——用于模式最右侧
		例:
			[root@hu recover]# grep "bash$" /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			hu:x:1000:1000:hu:/home/hu:/bin/bash
		C、^pattern$:用PATTERN来匹配整行
		例:
			[root@hu recover]# grep '^r.*n$' /etc/passwd
			rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
			rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
		D、^$:表示空白行——不能有空格
		E、^[[:space:]]$:表示显示空白行——可以有空格
		F、\<或\b:词首锚定,用于单词模式的左侧
		G、\>或\b:词尾锚定,用于单词模式的右侧
		H、\<word>\:用于精确锚定单词
		例:
			[root@hu recover]# grep '\<root\>' /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			operator:x:11:0:operator:/root:/sbin/nologin
	注意:单词——指的是非特殊字符组成的连续字符(字符串)都称为单词
	4)、分组以及引用
		A、\( \):将一个或多个字符捆在一起,当做一个整体进行处理
		例:
			[root@hu recover]# grep '\<\(bin\/bash\)\>' /etc/passwd
			root:x:0:0:root:/root:/bin/bash
			hu:x:1000:1000:hu:/home/hu:/bin/bash
		B、Note:分组括号中的模式或匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为
		\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
		\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
		\3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符
		……
		例:
			ifconfig  | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'
		C、后向引用:引用前面的分组括号中的模式所匹配到的字符
	注意:括号能嵌套,不能交叉

(1)使用格式

	grep [OPTIONS] PATTERN [FILE...]
	grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
	例:
		[root@hu ~]# grep "UUID" /etc/fstab
		UUID=c6c99019-d41a-4376-8448-364787b4ae54 /boot     ext4    defaults   1 2

(2)option
grep -l:ignorecase——忽略字符大小写
grep -o:仅显示匹配到的字符串本身
grep -v:invert-match——显示不能被模式匹配到的行
grep -E:支持使用扩展的正则表达式元字符
grep -F:搜索固定字符串——不支持正则表达式
grep -G:支持基本正则表达式或元字符
grep -q:静默模式,不输出任何信息
grep -A #:显示匹配的行和此行的后 # 行—after
grep -B #:显示匹配的行和此行的前 # 行——before
grep -C #:显示匹配的行和此行前 # 行和后 # 行—context

	[root@hu recover]# grep -A 2 "ur1" test.sh
	useradd ur1 && useradd ur2 && useradd ur3
	a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")

	[root@hu recover]# grep -B 2 "c" test.sh
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
	c=$(id -u ur3 | grep -o "^[0-9]\{1,4\}")
	echo ${sum=$[$a+$b+$c]}

	[root@hu recover]# grep -C 2 "\-o" test.sh
	useradd ur1 && useradd ur2 && useradd ur3
	a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
	c=$(id -u ur3 | grep -o "^[0-9]\{1,4\}")
	echo ${sum=$[$a+$b+$c]}

grep --color:对匹配到的文本着色后高亮显示

37、egrep命令:

egrep命令用于支持扩展的正则表达式实现类似于grep文本过滤功能——grep -E

(1)使用格式——与grep使用格式相同
(2)支持的正则表达式元字符与grep相同

38、fgrep命令:

不支持正则表达式元字符——当无需要用到元字符去编写模式时,使用fgrep必能更好

39、wc命令:- print newline, word, and byte counts for each file

wc命令用于单词、字符、字节的统计

(1)使用格式

 wc [OPTION]... [FILE]...
 wc [OPTION]... --files0-from=F

(2)option
wc -l:仅显示行数

[root@hu recover]# wc -l test.sh
8 test.sh

wc -w:仅显示单词

[root@hu recover]# wc -w test.sh
31 test.sh

wc -c::仅显示字节数

[root@hu recover]# wc -c test.sh
192 test.sh

40、cut命令:- remove sections from each line of files

cut命令用于从每一行去移除片段

(1)使用格式

cut OPTION... [FILE]...

(2)option
cut -d char:以char为分隔符,进行移除
cut -f #/#-#/#,#:移除挑选出的字段或列

#:表示指定的单个字段

[root@hu recover]# cat /etc/passwd|cut -d: -f 1		==>表示以:为分隔符,只显示第一个字段
root
bin

#-#:表示连续的字段

[root@hu recover]# cat /etc/passwd|cut -d: -f 1-3	==>表示以:为分隔符,只显示第一个字段到第三个字段
root:x:0
bin:x:1

#,#:表示离散的字段

[root@hu recover]# cat /etc/passwd|cut -d: -f 1,3	==>表示以:为分隔符,只显示第一个字段和第三个字段
root:0
bin:1

41、sort命令:- sort lines of text files

sort命令用于对文本文件排序,并不会对内部文件进行修改

(1)使用格式

sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

(2)option
sort -t char:指定分隔符
sort -k #:用于排序比较的字段
sort -n:基于数值大小进行排列而非字符进行排列

[root@hu recover]# sort -t: -k3 -n /etc/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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sort -r:逆序排序
sort -f:忽略字符大小写
sort -u:移除或重复的行只保留一份——重复的行:连续且相同

42、uniq命令:- report or omit repeated lines

uniq命令用于报告或移除重复的行

(1)使用格式

uniq [OPTION]... [INPUT [OUTPUT]]

(2)option
uniq -c:对每行重复的计数
uniq -d:仅显示未曾重复过的行
uniq -u:仅显示重复过的行

43、diff命令:- compare files line by line

diff命令用于逐行比较文件中的内容

(1)使用格式

diff [OPTION]... FILES

(2)option
diff oldfile newfile >file.patch:生成补丁文件*.patch

[root@hu recover]# diff test.sh test1.sh > test.patch
[root@hu recover]# ls
cptest  cp.txt  io  test1.sh  test.patch  test.sh  tt

diff -u:使用unfiled(联合查看文件不同处)机制——显示行修改时上下文(默认为3行)

[root@hu recover]# diff -u test.sh test1.sh
--- test.sh	2018-11-30 09:22:18.685266841 -0500
+++ test1.sh	2018-11-30 09:18:45.884014479 -0500
@@ -8,5 +8,3 @@
 echo ${sum=$[$a+$b+$c]}
 
 echo $SHELL
-
-echo $SHELL

44、patch命令:- apply a diff file to an original

patch命令用于给老文件打补丁

(1)使用格式

patch [options] [originalfile [patchfile]]

(2)option
patch -i:向文件打补丁

[root@hu recover]# patch test.sh < test.patch
patching file test.sh

patch -R:撤回已经打的补丁

[root@hu recover]# patch -R test.sh < test.patch
patching file test.sh

vim文本编辑及文件查询

1、vim编辑器

1、文本编辑器
	文本——纯文本,ASCII text ,Unicode
2、文本编辑种类
	行编译器:sed
	全屏编译器:nano,vi,vim
		vi——visual interface
		vim——vi improved
3、vim的模式——模式化的编辑器
	基本模式:
		a、编辑模式——命令模式
		b、输入模式
		c、末行模式——内置命令行接口
注意:若文件事先不存在则以此名字创建新文件,并将内容保存在此文件中
	   若文件存在则将编辑内容保存在其中

2、vim命令- Vi IMproved, a programmers text editor

vim命令用于编辑和查看文本文件内容

(1)使用格式

vim [options] [file ..]			==>默认光标处于文本第一行行首位置
vim +#								==>表示打开文版后光标位于#行的行首
例:
	[root@hu recover]# vim +3 test.sh
	useradd ur1 && useradd ur2 && useradd ur3
	a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
	|
	b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
vim +/pattern						==>表示正则表达式所匹配到的内容
	[root@hu recover]# vim +/"ds" cp.txt
vim + 								==>打开文件后直接让光标处于行尾
vim [options] -
vim [options] -t tag
vim [options] -q [errorfile]

3、模式之间的转换

1、编辑模式——即默认模式
2、编辑模式——>输入模式——进入到文本后的操作
	i—insert:在光标所在处输入文本
	a—append:在光标所在处后方输入
	I:在贯标所在行首输入文本
	A—在光标所在行行尾输入文本
	o—在光标所在处下方打开一个新行
	O—在光标所在处的上方打开一个新行
3、输入模式——>编辑模式
	按ESC即可
4、编辑模式——>末行模式
	‘:’按冒号即可进入到末行模式——按冒号后会有一个内置命令行
5、末行模式——>编辑模式
	ESC

4、vim进入后关闭文件

1、ZZ——大写Z连按两次即可保存退出
2、在末行模式下
	a、q——>表示退出——使用q时必须是未执行过任何操作,否则会报错
	b、q!——>表示不保存强制退出
	c、wq——>保存退出
	d、x——>保存并退出
	e、w /path——>将修改后的文件保存到指定路径下

5、vim中光标跳转——所有操作都是在编辑模式

1、字符间跳转
	h—光标向左跳转
	l—光标向右跳转
	j—光标向下跳转
	k—光标向上跳转
	# command:跳转指定#个数的字符
2、单词间跳转
	w—调到下一个单词词首
	b—当前或前一个单词的词首
	e—当前或后一个单词词尾
	# command—指定跳转#多个单词
3、行首行尾跳转
	^—跳转至行首的非空白字符
	$—跳转至行尾(绝对行尾)
	0—跳转至行首(绝对行首)
4、行间跳转
	#G—跳转至#行
	1G、gg—跳转至第一行
	G—若光是大写G则跳转至末尾行
5、句间跳转
	a、)—跳转到下一句
	b、(—跳转到前一句
	c、#)—跳转到下#句
	d、#(—跳转到上#句
6、段间跳转
	a、#}—跳转至下#段
	b、#{—跳转至上#段

6、翻屏操作

1、Ctrl+f:向文件尾部翻一屏
2、Ctrl+b:向文件首部翻一屏
3、Ctrl+d:向文件尾部翻半屏
4、Ctrl+u:向文件首部翻半屏
5、Enter:向文件尾部翻一行

7、vim的编辑命令

1、单字符编辑
	a、x:删除光标所在处的字符
	b、#x:删除光标所在处其实的#个字符
	c、xp:交换光标所在处的字符与其后面的字符位置
2、替换命令:replace
	a、r—先按r然后按需要替换的字母即可替换
3、删除命令:
	a、d—可以结合光标跳转字符,实现范围删除
		d$—删除光标到行尾之间的所有字符
		d^—删除光标到行首之间的所有字符
		dw—删除当前单词到下一个单词词首之间的内容
		#—如#dw-3dw表示删除3个单词
		dd—删除光标所在处的一整行
		#dd—删除光标所在行为起始的共#行
	注意:删除的内容回保存在缓冲区中,用ESC即可找回最后操作的一个内容
4、粘贴命令——p、put、paste
	p—小写p缓冲区中的内容
		若为整行,则粘贴到当前光标所在行下方
		若不为整行,则粘贴到当前光标所在处后方
	P—大写P缓冲区中内容
		若为整行,则粘贴到当前光标所在行上方
		若不为整行,则粘贴到当前光标所在处前方
5、复制命令——y
	a、y—复制,工作行为相似于d命令
	b、y$—复制光标至行尾内容
	c、y^—复制贯标至行首内容
	e、y0—复制光标至绝对行首内容
	f、ye—复制光标至当前词词尾或下一个单词词尾内容
	g、yw—复制光标至下一个单词词首间内容
	h、yb—复制光标至当前或前一词词首间的内容
	i、#command:
	j、yy—复制一整行
	k、#yy—复制#行
	注意:复制后也在缓存中,用p粘贴

8、change-c改变命令:

1、能将光标处有编辑模式转换到输入模式,并能实现删除操作
	a、c$—删除光标至行尾内容,并转换为输入模式
	b、c^—删除贯标至行首内容,并转换为输入模式
	c、c0—删除光标至绝对行首内容,并转换为输入模式
	d、ce—删除光标至当前词词尾或下一个单词词尾内容,并转换为输入模式
	e、cw—删除光标至下一个单词词首间内容,并转换为输入模式
	f、cb—删除光标至当前或前一词词首间的内容,并转换为输入模式
	g、#command:
	h、cc—删除一整行,并转换为输入模式
	i、#cc—删除#行,并转换为输入模式

9、可视化模式

1、v—按字符选定内容
2、V—按行选定内容
常常结合编辑命令:d、c、y

10、关于撤销的几个操作

1、撤销操作
	a、u—undo—撤销此前操作(默认为最近50内的操作都可以撤销)
	b、#u—指定#次的操作
2、撤销此前的撤销操作
	Ctrl+r
3、vim自带的练习教程:vimtutor

11、vim末行模式——内建命令接口

1、地址定界
	A、格式——start_pos [,end_pos]
		a、#——在末行模式中表示特定的第#行
			例: :5 —就表示第五行
		b、#1,#2——表示从第#1行到#2行,左为起始,右为结束行
		c、#,+#——指定行范围,左侧起始行绝对编号,右侧为相对于左侧行号的偏移量
			例: :3,+7——表示3到10的范围
		d、· ——表示当前行
		e、$——表示最后一行
		f、%<==>1,$——指定范围为全文
		g、/char/——第一次被模式所匹配到的行
			例: /test/,$——表示第一次匹配到的字符行到最后一行
		h、/char1/,/char2/—表示光标位置起始向后匹配的第一个char1到char2之间内容
		注意:“第一次”指光标所在位置为起始的第一个匹配对象
	B、可以同编辑命令一同使用,实现编辑操作
		格式:地址定界 编辑命令
		a、d——删除地址定界的内容
		b、y——复制地址定界的内容
		c、c——修改地址定界中的内容
		d、w /path——将地址定界的内容保存到指定的文件中
		e、r /path/file——将指定文本中内容,插入到此文本中(可用于文件合并)
2、查找
	A、/word——从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
	B、?word——从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
		n—下一个,与命令方向相同
		N—上一个,与命令方向相反
3、查找并替换
	格式:s/要查找的内容/替换的内容/修饰符——此处'/'为分隔符,可以使用#或@替换掉
	A、要查找的内容:可以使用正则表达式
	B、替换的内容:不能使用正则表达式,但可以引用
		a、若查找的内容部分在模式中使用分组符号,在替换内容中可以使用向后引用
		:%s@\<t\(.*\)\>@T\1@g
			Test1
			Test11
			Test111
		b、直接引用查找模式匹配到的全部文本,使用&符号
		:%s@\<T\(.*\)\>@&er@g——相当于直接在匹配到的字段后加上er
		Test1ter
		Test11ter
		Test111ter
	C、用于控制匹配
		i:忽略大小写
		g:全局替换,若一行中匹配到多次,则都替换(默认只替换每行第一次出现的)

12、vim的多文件功能

1、多文件
	格式:vim file1 file2……
	A、大文件之间切换
		:next——>下一个文件
		:prev——>上一个文件
		:first——>第一个文件
		:last——>最后一个文件
	B、退出所有文件
		:wqall——>保存退出所有文件
		:wall——>仅保存所有文件
		:qall——>仅退出所有文件
2、多窗口
	A、-o:水平分割窗口
	      -O:垂直分割窗口
	B、在窗口之间切换:Ctrl+w
					      用上下左右键来切换
	注意:单个文件也可以分割为多个窗口进行查看
		Ctrl+w后再按s:水平分割窗口
		Ctrl+w后再按v:垂直分割窗口	

13、定制vim的工作特性——都是在末行模式下

1、行号
	显示行号:set number ——> set nu
	取消显示行号:set nonumber ——> set nonu
2、括号匹配高亮
	匹配:set showmatch——>set sm
	不匹配:set noshowmatch——>set nosm
3、自动缩进——vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
	自动缩进:set autoindent——>set ai
	不自动缩进:set noautodent——>set noai
4、高亮搜索	
	显示:set hlsearch
	不显示:set nohlsearch
5、语法高亮
	启用:syntax on
	禁用:syntax off
6、获取末行模式帮助
	help——获取所有vim帮助
	help keyword——获取某个语法帮助
注意:在末行模式下的设定,仅对当前vim进程有效
	    永久生效则需要在以下文件中定义
	    全局:/etc/vimrc
	    用户个人:~/.vimrc

14、bash脚本编程之算数运算

1、算术运算格式
	let var(变量)=算数运算表达式
	var=$[算术表达式]
		[root@hu recover]# echo $[a+b]
		35
	或var=$((算术表达式))
		[root@hu recover]# echo $((a+b))
		35
	或expr 算术表达式
2、将运算结果保存在变量中
	sum=$(echo $[a+b])
	注意:乘法符号在某些场合需要使用转义字符——\	

find及文件特殊权限

实现的工具有locate和find
1、locate工具——命令 - find files by name

1、locate工具依赖于事先构建好的索引库(或叫数据库和文化whatis一样)
		此索引库可由系统自动实现——周期性任务进行更新
		也可手动创建更新数据库——updatedb
2、工作特特性
	查找快速、依赖数据库查找、模糊查找、非实时查找
3、使用格式
	 locate [OPTION]... PATTERN...
4、option
	locate -b:只匹配路径中的基名
	例:
		[root@hu /]# locate -b "lib"
		/var/lib/alternatives/libwbclient.so.0.12-64
		/var/log/libvirt
	locate -c:统计出总有多少个符合条件的文件
	例:
		[root@hu /]# locate -c "lib"
		32013
	locate -r:BRE据此编写模式
	例:
		[root@hu ~]# locate -r "\<version\>"
		/etc/yum/version-groups.conf
		/home/hu/.cache/tracker/db-version.txt
	注意:索引构建过程中需要遍历整个根文件系统,及其消耗资源

2、find命令:- search for files in a directory hierarchy

find命令用于在文件系统上查找符合条件的文件而不是文件类容

1、工作特性
	实时查找工具,通过遍历指定起始路径下文件系统层级结构
	完成文件查找
	查找速度略慢
	精确查找
2、使用格式
	find [option]…[path][查找条件][处理动作]
	例:
		[root@hu ~]# find		——>若没加任何条件指查找当前路径下的所有文件路径
		.
		./Music
		./.bash_profile
		./.bash_logout
	path——查找条件:指定具体搜索目标的起始路径,默认为当前目录
	查找条件:指定查找条件——可以是文件名、大小、类型、从属关系、权限等——默认为找出指定路径下的所有文件
	处理动作:对符合查找条件的文件作出的操作——删除等——默认为输出至标准输出
3、查找条件
	表达式组成:表达式由选项(影响整体操作而不是特定文件的处理,并始终返回true),测试(返回true或false值)和操作(具有副作用并返回a)组成。
	A、据文件名查找文件
		-name “patern”:区分文件名大小写
		例:
			[root@hu recover]# find ./ -name "Test.sh"
			[root@hu recover]# find ./ -name "test.sh"
			./test.sh
		-iname “pattern”:不区分文件名大小写
		例:
			[root@hu recover]# find ./ -iname "Test.sh"
			./test.sh
		-regex pattern:基于正则表达式查找文件,匹配范围是整个路径,而非其名字,且不忽略大小写
		-iregex pattern:基于正则表达式查找文件,匹配范围是整个路径,而非其名字,忽略大小写
		find . -regex ".*\(\.txt\|\.pdf\)$"
		find . -iregex ".*\(\.txt\|\.pdf\)$"
		例:
			[root@hu recover]# find / -regex ".*\(\.txt\)$"	==>查找根目录下以.txt结尾的文件路径
			/root/.cache/tracker/db-locale.txt
			/root/.cache/tracker/first-index.txt
	B、根据文件从属关系查找
		-user username——>即查找属主指定用户的所有文件
		例:
			[root@hu recover]# find /home -user hu
			/home/hu
			/home/hu/Music
		-group Groupname——>即查找属组为指定组的所有文件
		-uid——>UID查找指定UID的属主的所有文件
		-gid——>GID查找指定GID的属组的所有文件
		-nouser——>查找没有属主的文件
		-nogroup——>查找没有属组的文件
	C、局文件类型查找
		-type f——>查找普通文件
		例:
			[root@hu recover]# find /home -type f -ls
			791770    4 -rw-r--r--   1 ur1      ur1           193 Nov 20  2015 /home/ur1/.bash_profile
		-type d——>查找目录文件
		-type l——>符号链接文件
		-type b——>块设备文件
		-type c——>字符设备文件
		-type p——>管道文件
		-type s——>套接字文件
4、组合测试
	A、与==> -a——>默认与组合逻辑,必须同时满足两个条件
	例:
		[root@hu recover]# find /tmp -nouser -type f
		[root@hu recover]# find /tmp -nouser -a -type f
	B、或==> -o——>或组合逻辑满足其中条件之一即可
	例:
		[root@hu recover]# find /tmp -nouser -o -type f
		/tmp/mytest.TyTf
		/tmp/.X0-lock
	C、非==> -not 或!——>非组合逻辑与此条件相反的条件
	例:
		[root@hu recover]# find . -not -nouser
		.
		./cptest
		./cptest/testcp
5、根据文件大小查找
	A、使用格式:find /path -size [+|-]#unit——#表示数值,unit为单位
	常用单位有:K、M、G
		a、当无 [+|-]号时;#unit表示范围为(#-1,#]<==>#-1<#≤#
		b、当有 [+|-]号时;
			- #unit表示范围为[0,#-1]<==>0≤#≤#-1
			+ #unit表示范围为(#,∞)<==>#<#≤∞
		例:
			[root@hu recover]# find . -size -10
			.
			./cptest
			./cptest/testcp
			./cptest/cp.txt
			./cptest/test.txt
			./test.patch
			./test1.sh
			./tt
			./test.sh
			./io
			./io/test1.txt
			./io/test.txt
			./cp.txt
			[root@hu recover]# find . -size 10
			[root@hu recover]# find . -size +10
			./.cp.txt.swp
			./.text.txt.swp
6、据时间戳查找
	A、以“天”为单位查找
		-atime [+|-]#
		-mtime [+|-]#
		-ctime [+|-]#
		#:[#,#-1)——#≤#<#-1
		+#:(#,0]——#<#≤0
		-#:(∞,#)——∞<#<#
		例:
			[root@hu recover]# find . -atime -7
			.
			./cptest
			./cptest/testcp
	B、以“分钟”为单位
		-amin [+|-]#
		-mmin [+|-]#
		-cmin [+|-]#
		[+|-]#同上
7、据权限查找
	-perm [/ | -]mode
	A、mode —精确查找
	例:
		[root@hu recover]# find . -perm 755 -ls
		261629    4 drwxr-xr-x   5 root     root         4096 Dec  1 04:53 .
		264277    4 drwxr-xr-x   2 root     root         4096 Nov 29 08:46 ./cptest
		261660    4 -rwxr-xr-x   1 root     root          205 Nov 30 09:18 ./test1.sh
		261653    4 drwxr-xr-x   2 root     root         4096 Dec  1 01:14 ./tt
	B、/mode —任何一类用户(u、g、o)的权限中的任何一位(r、w、x)符合权限既满足条件(权限之间为或关系)
	例:
		[root@hu recover]# find . -perm /755 -ls
		261629    4 drwxr-xr-x   5 root     root         4096 Dec  1 04:53 .
		264277    4 drwxr-xr-x   2 root     root         4096 Nov 29 08:46 ./cptest
		264280    0 -rw-r--r--   1 root     root            0 Nov 24 10:01 ./cptest/testcp
		261649    0 -rw-r--r--   1 root     root            0 Nov 29 08:46 ./cptest/cp.txt
		261652    4 -rw-r--r--   1 root     root           39 Nov 29 08:46 ./cptest/test.txt
		261633    4 -rw-r--r--   1 root     root           24 Nov 30 09:19 ./test.patch
		261630   12 -rw-r--r--   1 root     root        12288 Dec  1 05:12 ./.cp.txt.swp
		261660    4 -rwxr-xr-x   1 root     root          205 Nov 30 09:18 ./test1.sh
		261653    4 drwxr-xr-x   2 root     root         4096 Dec  1 01:14 ./tt
		261393    4 -rwxrwxr-x   1 root     root          192 Nov 30 09:42 ./test.sh
		261126    4 drwxr-xr--   2 root     root         4096 Nov 28 05:07 ./io
	C、-mode—每一类用户(u、g、o)的权限中的每一位(r、w、x)对应于条件的每一位相同既满足条件(权限之间为与关系)
	例:
		[root@hu recover]# find . -perm -755 -ls
		261629    4 drwxr-xr-x   5 root     root         4096 Dec  1 04:53 .
		264277    4 drwxr-xr-x   2 root     root         4096 Nov 29 08:46 ./cptest
		261660    4 -rwxr-xr-x   1 root     root          205 Nov 30 09:18 ./test1.sh
		261653    4 drwxr-xr-x   2 root     root         4096 Dec  1 01:14 ./tt
		261393    4 -rwxrwxr-x   1 root     root          192 Nov 30 09:42 ./test.sh
8、动作处理
	-print——输出至标准输出,默认的动作
	-ls——类似于对查找到的文件执行“ls -l”命令
	-delete——删除查找到的文件
	-fls /path——将查找到的所有文件的详细信息保存到指定路径的文件里
	-ok command {}\——对查找到的每个文件执行由command表示的命令,每次操作都由用户确认( {}\为固定格式)
	-exec command {}\——对查找到的每个文件执行由command表示的命令,每次操作不由用户确认( {}\为固定格式)
	例:
		[root@hu recover]# find / -nouser -a -nogroup -ok chown root:root {}\
		-rw-r--r--. 1 root root    0 Dec  1 13:20 ttt
注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次星传递给后面的命令
	但是此命令不能接受过长的参数,若参数过长命令执行会失败,换另一种方式可规避此问题

xargs
awk
strings

sum
diffstat
script
apropos
locate
chattr
cksum
cmp
split
dirname
findfs
ln
lndir
lsattr
od
paste
tmpwatch
md5sum
comm
pg
join
fmt
ispell
col
colrm
fold
iconv
dc
expr

猜你喜欢

转载自blog.csdn.net/qq_29954175/article/details/84556415