二、常用命令和相关知识
二、常用命令和相关知识
2.1 基础命令
2.1.1 ls 显示指定工作目录下的内容及属性信息
ls -a #列出所有文件,包括以 "." 开头的隐含文件。
ls -l #输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小等
ls -al #列出所有文件(包括隐藏)的详细信息
ls -t #按文件最近修改时间新文件靠前
ls -lS #以文件大小排序
ls -lh # 列出详细信息并以可读大小显示文件大小(默认为kb)
ls -l --block-size=m #以m为单位显示,可换k,m,g(不足直接进1计算)
ls -l --full-time #代表以完整格式年月日时分输出
2.1.2 cd 切换目录
cd # 进入用户主目录;
cd / # 进入根目录
cd ~ # 进入用户主目录;
cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. # 返回上两级目录;
2.1.3 cp 复制文件或目录
cp file /usr/men/tmp/file1 #将文件file复制到目录/usr/men/tmp下,并改名为file1
cp -r /usr/men /usr/zh #将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
cp -p #保留源文件或目录的属性
cp -f #强行复制文件或目录,不论目标文件或目录是否已存在
2.1.4 mv 移动或改名文件
mv /usr/men/* . #将目录/usr/men中的所有文件移到当前目录(用.表示)中
mv file_1.txt /home/office/ #将file_1.txt移到/home/office/目录中
mv file_2.txt file_3.txt file_4.txt /home/office/ #移动多个文件
mv -f *.txt /home/office #无条件覆盖已经存在的文件
2.1.5 rm 移除文件或目录
rm testfile.txt #删除单个文件
rm testfile.txt testfile2.txt #删除多个文件
rm -r /root/test #删除这个在root目录底下的test目录下文件及其子目录所有文件
rm -f /root/test #强制删除(不询问)
2.1.6 mkdir 创建文件夹
mkdir -m 700 /usr/meng/test #在目录”/usr/meng”下建立子目录test,并且赋予权限
mkdir -p /test/chen #在根目录底下如果没有test文件夹会创建,同时二级目录也会创建
2.1.7 touch 创建空文件
touch test.txt #创建text.txt文件
2.1.8 id 查询用户和组信息
[root@localhost ~]# id yinjay <=查看yinjay用户及组的相关信息
uid=1000(yinjay) gid=1000(yinjay) groups=1000(yinjay)
[root@localhost ~]# id -u yinjay <=只查看UID
1000
[root@localhost ~]# id -g yinjay <=只查看GID
1000
[root@localhost ~]# id -un yinjay <=只查看用户名
yinjay
[root@localhost ~]# id -gn yinjay <=只查看组用户名
yinjay
2.1.9 whoami 查看当前登陆的用户
[root@localhost ~]# whoami
root
2.1.10 w 显示已经登录的用户
[root@localhost ~]# w <=显示已经登录的用户,并且展示他都做了什么的信息。
15:37:47 up 3 days, 12:06, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.100.1 10:16 3.00s 0.32s 0.32s -bash
root :0 :0 26Oct22 ?xdm? 26:48 1.18s /usr/libexec/gnome-session-binary --sess
root pts/3 :0 Sun11 5days 0.02s 0.02s bash
上面第1行的输出依次显示了当前的系统时间、系统从启动到现在已经运行的时间、登录到系统中的用户数和系统平均负载。平均负载是指在1分钟、5分钟、15分钟之内系统的负载状况。
USER:表示登录系统的用户。
TTY:表示用户使用的TTY名称。
FROM:表示用户从哪里登录进来,一般是显示远程登录主机的IP地址或者主机名。
LOGIN@:用户登录的日期和时间。
IDLE:显示终端空闲时间。
JCPU:表示该终端上的所有进程及子进程使用系统的总时间。
PCPU:当前活动进程使用的系统时间。
WHAT:当前用户执行的进程名称和选项。
2.2 文件编辑操作快捷键
2.2.1 光标快速移动快捷方式
- 快速切换光标到底行:G
- 快速切换光标到首行:gg
- 切换光标到指定位置:10gg #切换到第十行
- 切换光标到单行行首:0 #数字
- 切换光标到单行行尾:$
2.2.2 移动光标转为编辑状态
在光标所在位置上面插入新行进入编辑状态:o #英文小写
在光标所在位置下面插入新行进入编辑状态:O #英文大写
删除光标所在位置到行尾内容进入编辑状态:C
快速切换光标所在位置到行尾进入编辑状态:A
2.2.3 快速编辑文本内容信息
复制单行内容: yy
复制多行内容: nyy
粘贴一次内容:p
粘贴多次内容:3p
删除一行内容:dd
删除多行内容:3dd
2.2.4 特殊操作编辑文本方式
显示文本内容行号信息:set nu
取消行号显示:set nonu
撤销文本内容编辑操作:u
快速搜索方法:/搜索内容 (继续向下查找 n、继续向上查找 N)
忽略大小写字母的查找:/搜索内容\c
2.3 终端操作快捷键
Ctrl+a 光标回到命令行首
Ctrl+e 光标回到命令行尾
Ctrl+f 光标向右移动一个字符(相当于方向键右键)
Ctrl+b 光标向左移动一个字符(相当于方向键左键)
Ctrl+k 复制剪切(删除)光标处到行尾的字符
Ctrl+u 复制剪切(删除)光标处到行首的字符
Ctrl+y 粘贴Ctrl+u,Ctrl+k,Ctrl+w删除的文本
Ctrl+l 清除屏幕所有内容,并在屏幕最上面开始一个新行
2.4 文件相关命令
2.4.1 cat 在终端设备上显示文件内容
cat test.log #显示文件内容
cat -n test.log #显示文件内容并在所有行开头附加行号
2.4.2 more 显示文本文件内容
more test.txt #显示文件内容,每次显示一屏
按 Space 键:显示文本的下一屏内容。
按 Enter 键:只显示文本的下一行内容。
按B键:显示上一屏内容。
按Q键:退出more命令。
more -dc test.txt #显示文件test.txt的内容,但在显示之前先清屏,并且在屏幕的最下方显示完成的百分比。
more -c -10 test.txt #显示文件test.txt的内容,每10行显示一次,而且在显示之前先清屏。
2.4.3 head 显示文件开头内容
head text.txt #显示文件开头内容,默认前10行
head -n 20 test.txt #显示文件开头内容,前20行
2.4.4 tail 显示文件末尾内容
tail text.txt #显示文件末尾内容,默认后10行
tail -n 20 test.txt #显示文件末尾内容,后20行
2.4.5 grep 文本搜索工具
grep yinjay /etc/passwd #将/etc/passwd 中包含yinjay字符所在行内容取出
grep -n yinjay /etc/passwd #将/etc/passwd中包含yinjay所在行内容取出,并显示行号
grep -v nologin /etc/passwd #将/etc/passwd中不包含nologin的行取出
grep -r chen /etc/ #在/etc目录下查找包含字符“chen”的文件,并显示所在行内容
grep -r -l chen /etc/ #在/etc目录下查找包含字符“chen”的文件,并只显示匹配的文件
grep ^my /etc/passwd #显示/etc/passwd文件中以“^my”开头的行
grep -n nologin$ /etc/passwd #显示以nologin结尾的行,并显示行号
2.4.6 find 查找和搜索文件
//按文件名
find /test -name abc #查找/test目录下名称为abc的文件
find /test -iname abc #查找/test目录下abc文件,不区分大小写
//按文件类型
find /root -type d #查找/root目录下的目录
find /root -type f #查找/root目录下的文件
find / -type b #查找根目录下的设备文件
find /root -type l #查找/root目录下的软链接
//按文件大小
find /data -size +10M #查找/data目录下超过10M的文件
find /data -size -1G #查找/data目录下小于1G的文件
find /data -size 98k #查找/data目录下等于98k的文件
//按文件权限
find /test -perm 777 #查找/test目录下权限为777的所有文件
//按属主及属组查询
find / -user yinjay -type f #查找属主为yinjay的文件
find / -nouser -type f #查找无属主的文件
find / -group yinjay -type f #查找属组为yinjay的文件
find / -nogroup -type f #查找无属组的文件
2.4.7 tar 打包和备份的归档工具
参数详解:
-z 压缩
-c 创建
-v 输出详细信息
-f 文件
-x 解压
-C 指定解压路径
tar -zcvf test.tar.gz ./test #打包当前目录下的test目录
tar -zxvf test.tar.gz #解压到当前目录
tar -zxvf test.tar.gz -C /tmp/ #解压到指定目录
tar -zcvf test.tar.gz ./* --exclude=4.txt --exclude=5.txt #排除当前目录中的4、5.txt进行打包
2.4.8 chattr 更改文件属性
chattr +a test #只能向文件中添加数据,而不能删除
chattr -a test #解锁文件
chattr +i test #设定文件不能被删除、改名写入或者新增内容
chattr -i test #解锁文件
chattr -R test #递归更改目录属性,后面加+a、-a、+i、-i
2.4.9 lsattr 显示文件隐藏属性
lsattr test #显示文件隐藏属性
lsattr -d test/ #显示文件夹隐藏属性
2.4.10 chmod 设置和更改文件、目录权限
通过chmod改变文件或目录的权限有两种方法,一种是使用数字方法(常用)来设置权限;另一种是通过字母和操作符表达式的方法来设置权限。
chmod命令数字权限
可读r对应的数字为4,可写w对应的数字为2,可执行x对应的数字为1,“-”对应的数字为0。
rw-rw-r-x 代表的数字权限为665
--xr-x-wx 代表的数字权限为153
-wx--x--x 代表的数字权限为311
chmod 665 test.sh
chmod 665 /test
chmod 777 -R /test #赋予test目录和该目录底下所有目录、文件都为777权限
chmod命令字符权限
u:代表属主用户(owner/user)
g:代表属组(group)
o:代表其他用户(other)
+:添加权限
-:取消权限
=:取消其他所有权限,然后赋予给定的权限。
chmod u-x test.sh #取消用户权限位的x权限。
chmod g+w test.sh #用户组权限位增加w权限。
chmod u-x,g+w,o-rwx test.sh #用户位取消x权限,用户组增加w权限,其他用户取消rwx权限。
chmod ugo=rw test.sh #所有权限组赋予rw权限。
chmod a=rw test.sh #所有权限组赋予rw权限。
chmod +x test.sh #所有权限组增加x权限,这个命令比较常用。
2.4.11 chown 改变文件或目录的用户和用户组
chown 用户文件或目录 #仅授权用户。
chown :用户组 文件或目录 #仅授权用户组,等同于“chgrp组文件或目录”。
chown 用户:用户组 文件或目录 #同时授权用户和用户组。
同样,使用-R参数的话,可以进行递归。
当文件及目录的用户或用户组被删除时,对应的用户和用户组位就会显示为如下的数字形式:
解决办法就是重新创建uid为1003的用户,以及gid为1003的用户组(以下忽略创建组过程)
2.4.12 sort 用于排序
默认是按照字符顺序对比,从左到右一位一位对比。
选项 | |
---|---|
-n | 对数字排序 |
-r | 逆序排序 |
-k | 指定某列 -k1 指定多列 -k1 -k2 -k 1.1 根据第1列的第1个字符进行排序 |
-t | 指定分隔符 |
示例
1.对数字进行排序
2.对数字逆序(降序)排序
3.对某一列进行排序
4.对/etc目录下面 文件、目录 大小排序 (取前5)
5.对多列进行处理,对第2列或第4列进行排序,并格式化输出
6.先对第2列排序,第2列如果有一样的则对第4列排序 (对2列排序)
7.以 “ . ” 为分隔符按照第3列,然后第4列进行从小到大排序
2.4.13 uniq 去重并显示次数
2.5 通配符和特殊符号的使用
2.5.1 通配符符号集合
2.5.2 与路径和位置有关的特殊符号
2.5.3 不同引号的特殊符号
2.5.4 其他特殊符号
2.5.5 Bash中的逻辑操作符
2.5.6 重定向符号
2.6 正则表达式与三剑客
Linux三剑客的正则表达式可分为两类
基本正则表达式(BRE,basic regular expression):BRE对应的元字符有“^$.[]*”。
扩展正则表达式(ERE,extended regular expression):ERE在BRE的基础上增加了“(){}?+|”等字符。
基本正则表达式常用的特殊字符及功能,如下图:
扩展正则表达式常用的特殊字符及功能,如下图:
2.6.1 grep示例
测试文件如下
”称为尖角号,用法如“m”,表示匹配以m字母开头的行(当然my这个单词也可以)
\(”符号,称为美元符,用法如“m\)”,表示匹配以m字母结尾的行(当然单词也可以)
在正则表达式中,“.”(点号)表示匹配任意一个字符(有且只有一个),但是不包含空行。
显示以“.”(点号)结尾的行,转义符号(\)
“*”号表示匹配前一个字符0次或0次以上,从结果可以看出,grep的确将连续的数字0都找到了,并且显示了它们所在的行。这里的“0*”之所以会将文件所有行都匹配显示出来,是因为“*”表示前一个字符连续出现了0次。0次即什么也没有,实际上每一行也都被匹配了,整个文件内容都显示出来了。
“.”(点号)表示任意一个字符,“*”(星号)表示匹配前一个字符0次或0次以上,所以“.*”放在一起就表示匹配所有字符,包括空行。
中括号表达式,[abc]表示匹配一个“[]”中的任何一个字符,a或b或c。常用的形式具体如下:
- [a-z]表示匹配所有单个小写字母
- [A-Z]表示匹配所有单个大写字母
- [a-zA-Z]表示匹配所有单个大小写字母
- [0-9]表示匹配所有单个数字
- [a-zA-Z0-9]表示匹配所有字母和数字
匹配出文件中所有的大写字母
[abc]或[a-c]这种命令中,“^”在中括号的第一位时表示排除,即排除字母a或字母b或字母c,这里在“[]”里面出现的尖角号就表示取反(非),下面匹配除了小写字母以外的符号
匹配文件中的数字0一次或多次
换一个测试文件
“?”(问号)表示匹配前一个字符0次或1次,然后再看看换成“ * ”号看看,匹配前一个字符0次或者0次以上
“ | ”竖线在扩展正则表达式中表示或者,取出包含3306或1521的行
{n,m}匹配次数功能实践
2.6.2 sed示例
sed常用参数如下
sed常用内置命令如下
测试文件如下
输出oldboy.txt第2-3行的内容
过滤出含有oldboy字符串的行
删除含有oldboy字符串的行,这是考察sed命令的删除功能(d字符),默认不会修改文件,如果需要修改文件,则要用-i参数配合。
sed -i “3d” oldboy.txt #删除第3行
sed -i “5,8d” oldboy.txt #删除第5~8行
将文件中的oldboy字符串全部替换为oldgirl(默认不会修改文件,如果需要修改文件,则要用-i参数配合)
将文件中的字符串oldboy全部替换为oldgirl,同时将QQ号码49000448改为12345678
在oldboy.txt文件的第2行后追加文本
也可以同时增加多行,不同的行之间使用“\n”间隔开,例如:sed'2a I teacher linux.\nand you?'oldboy.txt。
在oldboy.txt文件的第2行插入文本
在oldboy.txt文件的第2行插入两行文本
2.6.3 awk示例
awk不仅仅是Linux系统中的一个命令,而且其还是一种编程语言,可以用来处理数据和生成报告(excel)。处理的数据可以是一个或多个文件,它是Linux系统最强大的文本处理工具。
首先准备好测试文件,取passwd文件的前5行,示例代码如下:
取123123.txt文件的第2行到第3行的内容
如果是只取某一行,就使用awk “NR==2” 123123.txt这样的写法。
过滤出含有root字符串的行,这个功能与sed的过滤功能类似,需要将要过滤的内容用两个斜线包含起来。
取文件的第一列、第三列和最后一列的内容,并打印行号。“:”表示以冒号为分隔符,print是打印,$1是取分隔符后的第一列,NF是取最后一列,NR表示行号。
利用多管道获取IP(CentOS7),NR==2表示输出第二行,默认以空格作为分隔符,$2表示取第二列。CentOS7下取IP变得简单了。
过滤下列test1.txt文件中第三列内容分数大于70,并且小于95的人名和性别。