陈鑫
vim 文本编辑器 (在linux系统) vi(纯命令,没有图形界面) nano也是种编辑器
GNU nano 2.9.8 New Buffer Modified
`6'a6'a6'
^G Get Help^O Write Ou^W Where Is^K Cut Text
^X Exit ^R Read Fil^\ Replace ^U Uncut Tex
补:在windows系统中 文本编辑器:test , word等等
vim 文件名 (对文件进行编辑)
vim(更方便) 和 vi 比较
[root@localhost /]# vi /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:975:975::/run/gnome-ini
[root@localhost /]# vim /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
(字符有光亮标记)
判断vim 打开的模式
根据vim 打开终端的最后一行:
如果打开后最后一行没有任何提示:
1,0-1 All
则是:命令模式
如果打开最后一行是:
<ile" [New File] 0,0-1 All
也是:命令模式 (New File 代表是一个新文件)
如果打开最后一行是:
-- INSERT -- 0,1 All
则它是:插入模式(也就是编辑模式,可以对文件做一个正常的编辑)
如果打开最后一行是:
:
则它是:末行模式
(如果编写了内容 按q是退出不了的 只能按q!强制退出 或 wq保存退出)
三种模式的关系及其切换:
插入模式和末行模式的转换都是以命令模式为中间值(按esa键退出插入 、末行模式,到命令模式上)
命令模式按 a 键到插入模式 ,按 : 键到末行模式
三种模式相关指令的介绍:
命令模式:
d+回车(enter) 删除光标所在行以及光标下一行
dd 删除光标所在行
Ndd eg:3dd 删除光标行开始一共三行 行内容
x 或者 d+ 空格 删除光标所在字符
D 伤处光标所在字符及下一个字符
dG 删除光标所在行到文档尾
dgg 删除光标所在行到文档首
s 字符替换, 替换光标所在字符 随后按esa键从插入模式回到命令模式(事实上就是先删除该字符,并且切换到插入模式,再输入要替换的字符)
yy 复制光标所在行 4yy (从光标开始)
p 粘贴在光标所在的下一行
cc 剪切光标所在行
G 跳转到文档尾的行首
gg 跳转到文档首的行首
^ 跳转到该行的行首
$ 跳转到 该行的行尾
u 向左撤销
ctrl(键) -r 向右撤销
提示:光标:该模式下亮的地方(一个字符 绿光)
通过上下左右移动
命令模式进入插入模式 :
(以下命令是在命令模式下执行的)
a 插入到光标后
A 插入到行尾
i 插入到光标前
o 插入到下一行
O 插入到上一行
s 删除光标字符进行插入模式
S 删除光标行进行插入模式
末行模式 :
:wq保存退出
:q 退出
:q! 强制退出
:wq! 强制保存退出
:15 跳转到指定行
:set nu建立显示行数
:set nonu取消显示行数
/root 匹配root关键字
:noh 取消光亮
3,5dd 从光标行开始算删除3~5(3+5=8)
:1,5 co 10 (co复制的意思) 把1~5行的内容输入到第十行之下
:% s/root/000/ 关键字符替换,替换的是每一行中第一次匹配的root关键字
:% s/root/000/g 关键字符替换,替换的是每一行中所有匹配的root关键字
:% s/.*#.*/ /g 关键字符替换, 替换的是每一行中所有匹配的#前后的所有字符,替换成空格
:% s 全文匹配
.*任意字符任意字 (=查找文档中包含#号字符的行,将整行删除)
正则符: . 任意单个字符 (适用范围:数据内容)
*匹配前一个字符任意次
通配符: *任意长度的任意字符 (适用范围:文件名)
?匹配任意单个字符
:r FILENAME 把指定文件内容读取当当前文件光标的下一行
习题
注:vim这个编辑器除了可以编辑文件之外,还可以创建文件
:.! 加上命令 就可以匹配到当前终端的命令执行结果
①如何再问编辑的文件中显示时间:
末行模式输入: .!date
Mon Nov 28 13:52:44 CST 2022 ~ ~ ~ ~ ~ ~ ~ :.!date 1,1 All
②如何把一个文件内容引入到当前正在编辑的文件:
末行模式输入: .!cat +目录下文件名
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 :.!cat /etc/pass 1,1 Top
注:读取后,刚刚执行的 date 命令就不见了
若在执行②之后,再输入 .!date date信息 就会代替光标所在行
Mon Nov 28 14:07:34 CST 2022 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin Mon Nov 28 14:08:04 CST 2022 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 :.!date 4,1 Top
③如何把一个文件内容读取到当前正在编辑的文件:
(不会覆盖光标所在行)(只会读取到光标所在行的下一行)
末行模式输入:r + 目录下的文件名
Mon Nov 28 14:13:43 CST 2022 # # DO NOT EDIT THIS FILE # # It is automatically generated by grub2-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub :r /boot/grub2/grub.cfg 4,1 Top
④查找文档中包含#号字符的行,将整行删除
Mon Nov 28 14:13:43 CST 2022 # # DO NOT EDIT THIS FILE # # It is automatically generated by grub2-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub Mon Nov 28 14:13:43 CST 2022 4,1 Top
⑤如何开启VI 的行号提示功能
49 function load_video { 50 if [ x$feature_all_video_module = xy ]; then 51 insmod all_video 52 else 53 insmod efi_gop 54 insmod efi_uga 55 insmod ieee1275_fb :set nu 51,1 23%
如何关闭VI 的行号提示功能:
:set nonu
⑥将光标移动到12行,并在第12行后面产生一个新的空白行第12行
法一:
:12 在命令模式下按o键: 在命令模式进入插入模式 , 插入到下一行并产生空白行
法二:
将光标移动到第12行最后一个字符,按a键进入插入模式,再按回车键
12 if [ -f ${config_directory}/grubenv ]; th en 13
⑦复制第一行日期内容到文章末尾
法一:
:1 命令模式下 yy复制该行 G跳转到文档尾的行首 p粘贴到下一行
法二:
:需要复制的行数 co 复制到哪一行的下一行
213 source $prefix/custom.cfg; 214 fi 215 216 Mon Nov 28 14:13:43 CST 2022 ~ ~ ~ ~ 216,1 Bot
:1 co 216
⑧将文档保存,将文档再次另存为/boot/newfile2,退出vi编辑器
:w /boot/newfile2 :q!
文本内容处理命令
echo打印命令 (忽略文件的输出类型) (标准输入输出的命令)
[root@localhost ~]# echo helloword
helloword
[root@localhost ~]# echo $SHELL (SHELL)命令解释器
/bin/bash
[root@localhost ~]# echo $HOSTNAME
localhost.localdomain
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# A=0 (给a变量赋值)
[root@localhost ~]# echo $A
0
[root@localhost ~]# echo $HOSTNAME $ 引用变量
localhost.localdomain
[root@localhost ~]# echo "$HOSTNAME" “ ”弱引用符(可以解释特殊含义的字符)
localhost.localdomain
[root@localhost ~]# echo '$HOSTNAME' ' '强引用符 (解释不了特殊含义)
$HOSTNAME
[root@localhost ~]# echo 当前主机时间date
当前主机时间date
[root@localhost ~]# echo 当前主机时间`date` ` `命令替换符 (将引号中的内容作为命令)
当前主机时间Sat Nov 26 20:35:27 CST 2022
[root@localhost ~]# echo 当前主机时间$(date) $( )命令替换符 (将括号中的内容作为命令)
当前主机时间Sat Nov 26 20:37:09 CST 2022
linux 中文件的描述符 0标准输入(开始写入时, 没有命令) 1标准输出(正确命令输出到文件中) 2错误命令输出(到桌面,终端)见图解
> 输出重定符 (覆盖)(将程序的内容输出重定到指定文件统一将内容写入文件,会覆盖源文件内容) 前提
1标准输出(正确命令输出到文件中)
eg:
[root@localhost ~]# echo 1234 >file111
[root@localhost ~]# echo 1234 1>file111
[root@localhost ~]# cat file111
1234
[root@localhost ~]# echo abcd >file111
[root@localhost ~]# cat file111
abcd (对源文件进行覆盖)
[root@localhost ~]# head -5 /etc/passwd >f1
[root@localhost ~]# cat f1
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@localhost ~]# ll / >file
[root@localhost ~]# cat file
total 32
drwxr-xr-x. 2 root root 6 Nov 26 18:09 1
drwxr-xr-x. 3 root root 17 Nov 26 07:19 19
drwxr-xr-x. 3 root root 17 Nov 26 07:19 71
drwxr-xr-x. 3 root root 15 Nov 25 23:26 a
-rw-r--r--. 1 root root 0 Nov 23 23:08 aaa
lrwxrwxrwx. 1 root root 3 Nov 23 23:10 aaa.lnk -> aaa
lrwxrwxrwx. 1 root root 3 Nov 22 04:56 aaalnk -> aaa
lrwxrwxrwx. 1 root root 7 Jun 21 2021 bin -> usr/bin
2错误命令输出(到桌面,终端)
eg:
[root@localhost ~]# haha
bash: haha: command not found...
[root@localhost ~]# haha 2>file
[root@localhost ~]# cat file
bash: haha: command not found...
>> 输出重定向符(追加) (不覆盖源文件)
[root@localhost ~]# cat file111
abcd
[root@localhost ~]# echo 1111111 >>file111
[root@localhost ~]# cat file111
abcd
1111111
< 输入重定向符
[root@localhost ~]# cat f1
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@localhost ~]# cat <f1 (可省略描述符)
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@localhost ~]# cat 0<f1
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@localhost ~]# cat 0< f1
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@localhost ~]# cat
123
123
11111
11111
^C
[root@localhost ~]# cat << . (<< 加上终止结束字符(随便写) )
> abc
> 123
> .
abc
123
[root@localhost ~]# cat << . > file222
> 11111 22222
> . (这样就不输入终端桌面上, 而是输入到文件file222)
[root@localhost ~]# cat file222
11111 22222
#head /etc/passwd > file
#tail -2 /etc/passwd >>file
#cmd 2> file1 把cmd的错误结果输入到file1文件
#cmd &>file1 &表示1和2 把cmd正确或者错误输出写入到file1文件 == cmd 1>file1 2>&1 (&1 = 与正确输出结果一样)
l 管道符(无名管道)前一个命令的输出结果按照字符流的形式通过管道符连接后一个命令进行处理
(只有横向输出) 横向输出将前一个命令的标准输出作为后面文件的标准输入
eg:
对一个文件第十行显示:
错误形式:
[root@localhost ~]# cd /
[root@localhost /]# head /etc/passwd |tail -1 /etc/passwd
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
正确示范:
[root@localhost /]# head /etc/passwd | tail -1
operator:x:11:0:operator:/root:/sbin/nologin
(显示文件的前十行) | (显示文件的最后一行) == 显示文件的前十行的最后一行
|tee T型管道 横向输出将前一个命令的标准输出作为后面文件的标准输入 纵向输出将前一个命令的标准输出直接在终端打印显示 |tee== > |tee-a ==>>
eg:
root@localhost /]# head /etc/passwd |tee file.txt (|tee后若加上文件名,若没有可直接创造)
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@localhost /]# cat file.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
既将前一个命令的标准输出作为后面文件的标准输入 又将前一个命令的标准输出直接在终端打印显示
| |tee 两者最主要差别:|tee 还可以将前一个命令的标准输出直接在终端打印显示
|tee== > |tee-a ==>>
[root@localhost /]# head -2 /etc/passwd |tee file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# head -2 /etc/passwd |tee -a file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cat file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
总结
文件内容编辑(创建文件)的三种命令:
vim
echo
cat
[root@localhost /]# vim /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
[root@localhost ~]# echo 1234 >file111 [root@localhost ~]# echo 1234 1>file111 [root@localhost ~]# cat file111 1234 [root@localhost ~]# echo abcd >file111 [root@localhost ~]# cat file111 abcd (对源文件进行覆盖)
[root@localhost ~]# cat 123 123 11111 11111 ^C [root@localhost ~]# cat << . (<< 加上终止结束字符(随便写) ) > abc > 123 > . abc 123 [root@localhost ~]# cat << . > file222 > 11111 22222 > . (这样就不输入终端桌面上, 而是输入到文件file222) [root@localhost ~]# cat file222 11111 22222
文本内容处理命令
特点: ①对文件的每一行进行处理
②不会对源文件产生影响,只会把处理的结果显示到终端
cut (对文本内容)剪切
-c 字符(字母 、 符号)[ -c + n / n-n = (截取第几个字符 )/(从第几个字符截取到第几个字符)]
-d 分割字符 [-d + ... ( 截取对应内容,该内容是用....分割的,用 .... 表示) ]
-f 分割字段 [-f + n / n,n ==n-n = (第几个字段) / (从第几个字段截取到第几个字段) ] 多个字段可以用逗号隔开
注: (-d 和 -f 成对出现, -d在前 -f在后) 一个空格也算一个字段
eg:5
①提取文件file.txt前四个字符
[root@localhost /]# cat file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cut -c 1-4 file.txt
root (每一行文件1-4个字符)
bin: (一行一行的执行)
root
bin:
②提取文件file.txt每一行第三个字段(第一个数字)
[root@localhost /]# cat file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cut -d : -f 3 file.txt
0 (必须先是分割字符-d 再是分割字段-f)
1 (选项-d 参数 : 选项和参数可以不相隔 但为了方便记忆可以相隔)
0
1
③若文件file.txt每行第一个字符就是: ,那如何提取文件file.txt每一行第三个字段(第一个数字)
[root@localhost /]# vim file.txt
[root@localhost /]# cat file.txt
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cut -d : -f 4 file.txt
0
1
0
1
-f4的解释:
:前面是第一个字段----空格 此时第一个数字为第四个字段
④若文件file.txt每行第一个字符就是: ,那如何提取文件file.txt每一行第三个字段和第四个字段(第一个数字和第二个数字)
[root@localhost /]# cat file.txt
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cut -d : -f 4 file.txt
0
1
0
1
[root@localhost /]# cut -d : -f 4,5 file.txt
0:0
1:1
0:0
1:1
[root@localhost /]# cut -d : -f 4-5 file.txt
0:0
1:1
0:0
1:1
(第四个、第五个字段==4,5 或 4-5)
eg:
因为cat 是对文本内容剪切 , 但是date不是文本内容,如何剪切?
[root@localhost ~]# date
Sat Nov 26 21:59:02 CST 2022
[root@localhost ~]# date | cut -d " " -f 4
22:00:56 (截取对应内容,该内容是用空格分割的,用 " " 表示 )
[root@localhost ~]# echo "当前系统的时间"`date | cut -d " " -f 4`
当前系统的时间22:06:11
sort 文本内容排序 (都是一行一行的写)
默认按照文件的字符进行比较(从小到大)
-r 降序 按照文件的字符进行比较 (从大到小)
-n 按照数值比较 (从小到大)
-nr 降序 按照数值比较 (从大到小)
-u uniqe 去重
#sort -nu/-un aaa 将文件中的行按照数值从小到大显示,并且重复行只显示一次
(选项可以互换位置)
[root@localhost /]# vim aaa [root@localhost /]# cat aaa 12 34 35 345 34 34 34 123 678 10 [root@localhost /]# sort aaa 10 12 123 [默认按照文件的字符进行比较(从小到大)] 34 34 34 34 345 35 678 [root@localhost /]# sort -r aaa 678 35 345 [-r 降序 按照文件的字符进行比较(从大到小) ] 34 34 34 34 123 12 10 [root@localhost /]# sort -n aaa 10 12 34 34 [-n 按照数值比较 (从小到大) ] 34 34 35 123 345 678 [root@localhost /]# sort -nr aaa 678 345 123 35 [-nr 降序 按照数值比较(从大到小) ] 34 34 34 34 12 10 [root@localhost /]# sort -nu aaa 10 12 34 [-nu/-un aaa 将文件中的行按照数值从小到大显示,并且重复行只显示一次] 35 (选项可以互换位置) 123 345 678
uniq 去重 , 重复行必须相邻(如果不相邻不会去重)
-c 显示重复次数
-d 显示文件重复出现的内容
-D 所有重复行
注:以上命令必须在重复行必须相邻(如果不相邻命令不会执行) 的条件下执行
命令演示[root@localhost /]# sort aaa | uniq -c 1 10 1 12 1 123 4 34 1 345 1 35 1 678 [root@localhost /]# sort aaa | uniq -d 34 [root@localhost /]# sort aaa | uniq -D 34 34 34 34
eg:
如何显示文件出现次数最多的那一行
[root@localhost /]# cat aaa 12 34 35 345 34 34 34 123 678 10 [root@localhost /]# uniq aaa 12 34 重复行必须相邻(如果不相邻不会去重) 35 345 34 123 678 10 [root@localhost /]# sort aaa | uniq 10 12 123 34 345 35 678 [root@localhost /]# sort aaa | uniq -c 1 10 1 12 1 123 4 34 1 345 1 35 1 678 [root@localhost /]# sort aaa | uniq -c | sort 1 10 1 12 1 123 1 345 1 35 1 678 4 34 [root@localhost /]# sort aaa | uniq -c | sort | tail -1 4 34
eg:
如何显示history历史执行频率最高前三的命令
第一步剪切掉前面的号码
573 sort -r aaa 574 sort -nr aaa 575 sort -n aaa 576 sort -nu aaa 577 cat aaa 578 uniq aaa 579 sort aaa | uniq 580 uniq aaa 581 sort aaa | uniq -c 582 sort aaa | uniq -c | sort 583 sort aaa | uniq -c | sort | tail -1 584 history [root@localhost /]# history |cut -d " " -f 5- uniq aaa sort aaa | uniq uniq aaa sort aaa | uniq -c sort aaa | uniq -c | sort sort aaa | uniq -c | sort | tail -1 history history |cut -d " " -f 5- [root@localhost /]#
[root@localhost /]# history |cut -d " " -f 5- | sort vim file (剪切历史命令第5个字段(包括第五个字段)以后的内容信息 然后按照文件的字符 vim /passwd 进行从小到大进行排序 ) vim passwd vim /tmp vim /tmp/newfile vim /tmp/newfile vi /tmp/newfile wegt -O /root/file/qq https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm wget wget https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm wget -O /file/qq https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm wget -O /file/qq https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm wget -o /linuxqq_2.0.0-b2-1089_x86_64.rpm wget -o /root/file/qq https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm y y y y y [root@localhost /]# history |cut -d " " -f 5- | sort |uniq -c 4 touch /root/file (显示重复次数) 1 tree / 1 tree /1 2 tree /1 1 tree /mnt 1 useradd redhat 2 vi 1 vi /etc/passwd 4 vim [root@localhost /]# history |cut -d " " -f 5- | sort |uniq -c |sort 5 date (再按照数字的大小进行排序) 5 ll /pub 5 y 6 shutdown -h now 7 ll 8 ll / [root@localhost /]# history |cut -d " " -f 5- | sort |uniq -c |sort |tail -3 6 shutdown -h now (最后在显示出现次数最多的三行) 7 ll 8 ll /
wc 文本统计 word
wc FILENAME 默认统计指定文件的行、单词数、字节数 【存储单位数】 (数字、符号的数目)
-l 统计行数
-w 统计单词数
-c 统计字节数 (通常情况下一个字节=一个字符)
-m 统计字符数
命令演示:
[root@localhost /]# vim bbb [root@localhost /]# cat bbb aaa bbb [root@localhost /]# wc bbb 3 2 9 bbb (行、单词数、字节数) 补:空格、换行符---$也算 注:在linux系统中 中文是代表3个字节 繁体字代表4个字节 显示换行符操作: aaa$ bbb$ $ ~ ~ ~ ~ ~ :set list 3,0-1 All [root@localhost /]# wc -l bbb 3 bbb
eg:
描述文本文件一共有多少行
[root@localhost /]# wc -l bbb 3 bbb [root@localhost /]# echo "bbb文件一共有`wc -l bbb| cut -d ' ' -f 1` 行" bbb文件一共有3 行
tr 字符替换命令
tr set1(原来的字符) set2(要替换成的字符)
[root@localhost ~]# echo helloworld | tr l 0 把l字符替换成0字符
he00owor0d
[root@localhost ~]# echo helloworld | tr l 00
he00owor0d (会根据字符长度自动匹配到对应长度的字符)[root@localhost ~]# echo helloworld | tr l 01
he00owor0d
[root@localhost ~]# echo helloworld | tr hl 0 把h l字符替换成0字符
0e00owor0d
[root@localhost ~]# echo helloworld | tr -c l 0 把除了l字符以外的所有字符都替换成0字符
00ll0000l00[root@localhost ~]# echo helloworld | tr -t hl 0 相同位置的匹配替换(h与0替换 l没有对 0elloworld 应的字符)
[root@localhost ~]# echo helloworld | tr -d hl 删除字符:删除hl字符[root@localhost ~]# echo helloworld | tr -s(将多个连续重复字符可以替换成单个字符)
eg:
将多个连续重复的空格字符可以替换成单个空格字符
[root@localhost /]# echo 1 2 3 |tr -s " " " " 1 2 3 [root@localhost /]# echo 1 2 3 |tr -s " " : 1:2:3
#df -h 查看文件系统使用情况
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 867M 0 867M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.5M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.6G 13G 28% /
/dev/nvme0n1p1 1014M 257M 758M 26% /boot
tmpfs 180M 24K 179M 1% /run/user/1000
/dev/sr0 11G 11G 0 100% /run/media/redhat/RHEL-8-5-0-BaseOS-x86_64
tmpfs 180M 0 180M 0% /run/user/0
[root@localhost ~]# df -h | tr -s " " " "
Filesystem Size Used Avail Use% Mounted on
devtmpfs 867M 0 867M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.5M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.6G 13G 28% /
/dev/nvme0n1p1 1014M 257M 758M 26% /boot
tmpfs 180M 24K 179M 1% /run/user/1000
/dev/sr0 11G 11G 0 100% /run/media/redhat/RHEL-8-5-0-BaseOS-x86_64
tmpfs 180M 0 180M 0% /run/user/0
grep 文本过滤显示命令*** shell 文本三剑客 grep sed awd
格式:
#grep '关键字' 文件名 ( 只过滤这个关键字)
#grep -v '关键字' 文件名 ( 过滤出除了这个关键字的信息)
# grep -o 'root' /etc/passwd (只把root关键字打印到终端)
# grep -i 'ROOT' /etc/passwd 过滤关键字忽略大小写
[root@localhost ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -o 'root' /etc/passwd
root
root
root
root
[root@localhost ~]# grep -v 'root' /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
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
eg:
过滤出文件中除了行首的# 以外的信息
[root@localhost /]# grep -v '^#' 文件名
注:顶尖符 -- ^ (在vim中 ^ 也表示行首的意思)
空白行-- ^$ 注:输入时都要加上‘ ’
过滤出文件中除了行首的# 以外的信息 空白行也除外
[root@localhost /]# grep -v '^#' 文件名 | grep -v '^$'
作业题:
1.将/etc/passwd 文件中3,4 字段分别截取出来分别写入文件UID和文件GIU但是这两个文件中的信息是以数值由大到小的形式显示;
2.通过查看时间命令将分别将年月日时分写入A文件
3.告诉用户当前系统有多少用户 (/etc/passwd文件有多少行一行是一个用户信息)。
4.不显示/etc/login.defs 文件中以#开头的行以及空白行。
1.将/etc/passwd 文件中3,4 字段分别截取出来分别写入文件UID和文件GIU但是这两个文件中的信息是以数值由大到小的形式显示;
[root@localhost ~]# cat /etc/passwd |cut -d : -f 3 |sort -rn >UID
[root@localhost ~]# cat /etc/passwd |cut -d : -f 3 |sort -rn |tee UID
[root@localhost ~]#more /etc/passwd |cut -d : -f 3 |sort -rn >UID
[root@localhost ~]# less /etc/passwd |cut -d : -f 3 |sort -rn |tee UID
[root@localhost ~]#cut -d : -f 3 /etc/passwd | sort -rn > UID
[root@localhost ~]#cut -d : -f 3 /etc/passwd | sort -rn |tee UID
相关知识点:|tee== > |tee-a ==>>
在内容信息比较多的时候:
more FILENAME 分屏显示文件内容,最后将内容输出到终端
less FILENAME 分屏显示文件内容,打开文件阅读 退出q 换页:空格--切换下一页 b--切 换上一页 /关键词 匹配关键词n (下一个) N(上一个) /或?关键词
注:查看文件内容可以用cat 、tac 也可以用 more 、 less (分页显示)
但echo(打印命令) 不可以用,只是对输入结果(名字)这个字面信息处理显示在终端,并没有读取查看文件内容
2.通过查看时间命令将分别将年月日时分写入A文件
[root@localhost ~]# date
Thu Dec 1 17:59:18 CST 2022
星期 月 日 时间 年
补:linux中手动改时间
root@localhost redhat]# date -s "2022-12-1 10:05:00"
Thu Dec 1 10:05:00 CST 2022
[root@localhost redhat]# date
Thu Dec 1 10:05:07 CST 2022
[root@localhost ~]# date
Thu Dec 1 14:04:55 CST 2022
[root@localhost ~]# date |cut -d " " -f 2,4,5,7 (注意有的地方有两个空格,若以空格分割字
Dec 1 14:10:00 2022 符,则第二个空格算做一个字符)
[root@localhost ~]# date | cut -d " " -f 7 >A
[root@localhost ~]# cat A
2022
[root@localhost ~]# date | cut -d " " -f 2,4,5 | cut -d : -f 1,2
Dec 1 14:28 (除去秒 选:为分割字符)
[root@localhost ~]# date | cut -d " " -f 2,4,5 | cut -d : -f 1,2 >>A
[root@localhost ~]# cat A (用追加重定向符)
2022
Dec 1 14:29
3.告诉(显示)用户当前系统有多少用户 (/etc/passwd文件有多少行一行是一个用户信息)。
[root@localhost ~]# wc -l /etc/passwd
46 /etc/passwd
[root@localhost ~]# wc -l /etc/passwd |cut -
d " " -f 1
46
或
[root@localhost ~]# wc -l /etc/passwd |cut -c 1-2
46
[root@localhost ~]# echo 当前系统共有`wc -l /etc/passwd | cut -d " " -f 1`
当前系统共有46
4.不显示(过滤掉)/etc/login.defs 文件中以#开头的行以及空白行。
[root@localhost ~]# grep -v '^#' /etc/login.defs
MAIL_DIR /var/spool/mail
UMASK 022
HOME_MODE 0700
PASS_MAX_DAYS 99999
[root@localhost ~]# grep -v '^#' /etc/login.defs |grep -v '^$'
MAIL_DIR /var/spool/mail
UMASK 022
HOME_MODE 0700
PASS_MAX_DAYS 99999
补:
①显示命令是否能成功:
[root@localhost /]# echo $?
0 ---成功
(0 成功 , 1 错误)
注:与计算机领域中逻辑真假正好相反
逻辑真:1 逻辑假: 2
②查看操作历史:
[root@localhost /]# history
548 head /etc/passwd |tail -1 /etc/passwd
549 head /etc/passwd | tail -1
550 echo $?
551 history
③显示换行符操作:
在vim编辑器中末行模式之下输入: :set list
aaa$
bbb$
$
~
~
~
~
~
:set list 3,0-1 All
④字节和字符的区别为:
一、指代不同
1、字节:指一小组相邻的二进制数码,是计算机重要的数据单位。
2、字符:表示数据和信息的字母、数字或其他符号。
二、侧重点不同
1、字节:侧重于表示计算机所计数的最小单位。
2、字符:侧重于表格编辑时,显示器显示的最小计数单位。
三、引证用法不同
1、字节:数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
2、字符:字符包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符在计算机内存放,应规定相应的代表字符的二进制代码
(通常情况下一个字节=一个字符)
新手小白,请多多指教~~