作业题:
2.cut -c 3 /etc/passwd | sort -r >UID;
cut -c 4 /etc/passwd |sort -r >GIU
3.date | cut -d " " -f 6 > A; date |cut -d " " -f 2-4 >> A
4. wc -l /etc/passwd
5.grep -v ‘^#’ /etc/login.defs |grep -v ‘^$’
1、#创建目录(尝试以下通过一条命令实现)
在/mnt下创建bo和b目录
[root@localhost ~]# cd /mnt
[root@localhost mnt]# mkdir bo b **(相对路径)**
mkdir -pv /mnt/{sysroot,boot} (绝对路径)
在/mnt/boot下创建grub目录
mkdir -pv /mnt/{sysroot/{proc,sys,bin,sbin,lib/modules,usr{run,log,lock},var/{run,log,lock},etc/init.d,dev,home,root,tmp},boot/grub}
/ : tree /mnt
注:创建一个目录时不加大括号。
在/mnt/sysroot下创建proc,sys,bin,sbin,lib,usr,var,etc,dev,home,root,tmp
在/mnt/sysroot/usr下创建run,log,lock
在/mnt/sysroot/lib下创建modules
在/mnt/sysroot/var下创建run,log,lock
在/mnt/sysroot/etc下创建init.d
2.如何一次性在/test目录创建以abc表示的100个文件,例如abc1,abc2,abc3,…abc100
mkdir /test
touch /test/abc{1…100} (绝对路径)
3.复制/mnt/boot目录文件到/test并改名为/boot.bak。
cp -r /mnt/boot /test/boot.bak
或:
cp -r /mnt/boot /test
mv /test/boot /test/book.bak
4.复制/test所有有9字符命名的文件到/pub下。
~ : mkdir pub
cp -r /test/*9* /pub
5.移动/test所有有1字符命名的文件到/pub目录下。
mv /test/*1* /pub
[root@localhost ~]# mkdir -p 1/2/3/4
[root@localhost ~]# ll
total 12
drwxr-xr-x. 3 root root 15 Nov 26 09:39 1
drwxr-xr-x. 3 root root 16 Nov 24 17:57 2
-rw-------. 1 root root 1272 Nov 20 15:47 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Nov 23 19:43 b
-rw-r--r--. 1 root root 0 Nov 23 19:43 c
-rw-r--r--. 2 root root 451 Jan 8 2021 crontab
lrwxrwxrwx. 1 root root 12 Nov 24 21:43 crontab2 -> /etc/crontab
drwxr-xr-x. 2 root root 6 Nov 21 20:51 d1
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Desktop
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Documents
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Downloads
-rw-r--r--. 1 root root 1609 Nov 20 15:52 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 24 17:41 lib
drwxr-xr-x. 6 root root 42 Nov 24 18:00 m
drwxr-xr-x. 3 root root 15 Nov 24 17:56 mk
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Music
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Pictures
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Public
drwxr-xr-x. 10 root root 96 Nov 24 17:39 sysroot
-rw-r--r--. 1 root root 0 Nov 25 20:25 t
drwxr-xr-x. 3 root root 16 Nov 25 20:22 t1
drwxr-xr-x. 2 root root 6 Nov 25 20:22 t2
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Templates
drwxr-xr-x. 3 root root 19 Nov 24 15:51 test1
drwxr-xr-x. 5 root root 59 Nov 26 09:37 tt
drwxr-xr-x. 3 root root 16 Nov 24 17:56 uer
drwxr-xr-x. 2 root root 6 Nov 24 17:40 usr
drwxr-xr-x. 5 root root 40 Nov 24 17:43 var
drwxr-xr-x. 2 root root 6 Nov 20 15:57 Videos
[root@localhost ~]# tree 1
1
└── 2
└── 3
└── 4
3 directories, 0 files
[root@localhost ~]#
新内容:
vim 文本编辑器 (vi)
[root@localhost ~]# vim /tmp/newfile
命令模式:
d +【enter】: 删除光标所在行以及光标下一行
dd : 删除光标所在行
x :删除光标所在字符
Ndd 3dd :删除光标行开始一共三行信息
Ndd 3,5 : 删除3-5行内容
dG :删除光标所在行到文档尾 15G
dGG : 删除光标所在行到文档首
s : 字符替换,替换光标所在字符
yy :复制光标所在行 4yy
p :粘贴在光标所在的下一行
cc :剪切光标所在行
G :跳转到文档尾的行首
gg :跳转到文档首的行首
^ :跳转到行首
$ :跳转到行尾
u :向左撤销
ctrl-r :向右撤销
从命令模式进入插入模式的方式:
a :插入光标后
A :插入行尾
i :插入到光标前
I :插入到行首
o :插入到下一行
O :插入到上一行
s : 删除光标字符进入插入模式
S : 删除光标行进入插入模式
从命令模式进入末行模式 使用 :
:wq 保存退出
:q
:q!
:wq!
:15
:set nu 显示行号
/root 匹配root关键字
:noh
:1,5 co 10 将1-5行复制到第10行
:% s/root/000/ 将root替换成000,**替换的时每一行中第一次匹配的root关键字
:% s/root/000/g 替换所有关键字
:%s/.*#.*//g
:r 读取指定文件
:.!
正则符:
.
* 匹配前一个字符任意次
通配符:
* 任意长度的任意字符
? 匹配任意单个字符
文本内容处理命令:
cut 剪切
sort 排序
echo 打印命令(标准输入输出的命令)
[root@localhost ~]# echo hellow
hellow
[root@localhost ~]# echo $SHELL ($ 引入变量)
/bin/bash
[root@localhost ~]#
[root@localhost ~]# echo $HOSTNAME
localhost.localdomain
[root@localhost ~]#
shell语言定义变量:由于其是动态语言,则定义变量时无需声明。
示例:
[root@localhost ~]# A=zhang123
[root@localhost ~]# echo $A
zhang123
[root@localhost ~]#
单引号与双引号:
[root@localhost ~]# echo $HOSTNAME
localhost.localdomain
[root@localhost ~]# echo "$HOSTNAME" ("" 弱引用符,可以解释特殊含义的字符)
localhost.localdomain
[root@localhost ~]# echo '$HOSTNAME' (‘’ 强引用符,不解释特殊含义的字符)
$HOSTNAME
[root@localhost ~]#
命令替换:
[root@localhost ~]# echo `date` (`` 反引号,命令替换符)
Sat Nov 26 14:50:52 CST 2022
[root@localhost ~]#
[root@localhost ~]# echo $(date) ($() 命令替换符)
Sat Nov 26 14:51:53 CST 2022
[root@localhost ~]#
linux中文件的描述符(接口):0(标准输入)1 标准输出(正确输出)2 错误输出
> 文件的输出重定向符(将内容输出到指定文件,会覆盖源文件内容)
>> 输出追加重定向符
[root@localhost ~]# echo 1234 1(可省略)> file
[root@localhost ~]# cat file
1234
[root@localhost ~]#
[root@localhost ~]# echo 1111 >>file1
[root@localhost ~]# cat file1
1234
1111
[root@localhost ~]#
[root@localhost ~]# head -5 file > file1
[root@localhost ~]# tail -2 /file3 >>file1
[root@localhost ~]# haha 2> file
[root@localhost ~]# cat file
bash: haha: command not found...
[root@localhost ~]#
< 输入重定向符
[root@localhost ~]# cat <0(可省略) file
bash: 0: No such file or directory
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# cat
123
123
^C
[root@localhost ~]# cat << .
> abc
> 123
> .
abc
123
[root@localhost ~]#
[root@localhost ~]# cat <<. >file2
> abcd
> 111
> .
[root@localhost ~]#
[root@localhost ~]# cat file2
abcd
111
[root@localhost ~]#
[root@localhost ~]# cat << EOF >file3
> 234
> EOF
[root@localhost ~]#
[root@localhost ~]# cmd 2>file
(把错误结果输出到file)
[root@localhost ~]# cmd &>file **或**
cmd 1>file1 2>&1
(把正确或错误结果输出到file,&表示1和2)
| 管道符(无名管道)将前一个命令的输出结果按照字符流的形式通过管道符连接下一个命令程序。
[root@localhost /]# head /etc/passwd | tail -1
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost /]#
| tee T型管道(有两个输出,横向与纵向)(将结果显示到文件与终端)
横向输出:将前一个命令的标准输出
作为后面文件的标准输入 与 > 类似
纵向输出:将前一个命令的标准输出直接在终端打印显示
| tee -a 追加重定向
[root@localhost ~]# head -2 /etc/passwd |tee -a file.1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# cat file.1
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:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]#
[root@localhost ~]# head /etc/passwd |tee file.1
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 ~]#
[root@localhost ~]# cat file.1
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 ~]#
cut 剪切
-c 字符
[root@localhost ~]# cut -c 1-4 file.1
root
bin:
daem
adm:
lp:x
sync
shut
halt
mail
oper
root
bin:
[root@localhost ~]#
-d 分割字符
-f 分割字段
[root@localhost ~]# cut -d : -f 3 file.1
0
1
2
3
4
5
6
7
8
11
0
1
[root@localhost ~]#
[root@localhost ~]# cut -d : -f 4-6 file.1
0:root:/root
1:bin:/bin
2:daemon:/sbin
4:adm:/var/adm
7:lp:/var/spool/lpd
0:sync:/sbin
0:shutdown:/sbin
0:halt:/sbin
12:mail:/var/spool/mail
0:operator:/root
0:root:/root
1:bin:/bin
[root@localhost ~]# cut -d : -f 4,6 file.1
0:/root
1:/bin
2:/sbin
4:/var/adm
7:/var/spool/lpd
0:/sbin
0:/sbin
0:/sbin
12:/var/spool/mail
0:/root
0:/root
1:/bin
[root@localhost ~]#
[root@localhost ~]# date
Sat Nov 26 16:16:09 CST 2022
[root@localhost ~]# date | cut -d " " -f 4 (空格要用双引号或单引号标出)
16:17:46
[root@localhost ~]#
[root@localhost ~]# echo `date | cut -d " " -f 4` (同上)
16:20:27
[root@localhost ~]# echo `date | cut -d " " -f 4`
16:20:28
[root@localhost ~]# echo `date | cut -d " " -f 4`
16:20:30
[root@localhost ~]#
文本内容排序:
sort 默认按文件行字符升序排序并显示
-r 降序排序并显示
-n 按照数值比较(从小到大)
-u 去重(去除重复行)
[root@localhost ~]# sort -nu file
将文件终给行按照数值从小到大显示,并且重复行只显示一次
uniq :去重(重复行必须相邻,则先用sort排序)
-c 显示重复次数
-d 显示出现过重复的行是哪一个
-D 显示所有重复行
[root@localhost ~]# history |cut -d ' ' -f 5-
root@localhost ~]# history |cut -d ' ' -f 5- |sort
[root@localhost ~]# history |cut -d ' ' -f 5- |sort | uniq -c |sort
wc 文本统计(word count) 统计指定文件的行、
-l 统计行数
[root@localhost ~]# wc -l bbb
2 bbb
[root@localhost ~]# wc -l bbb |cut -d ' ' -f 1
2
[root@localhost ~]#
-w 统计单词数
-m 统计字符数
-c 统计字节数
tr 字符替换命令
[root@localhost ~]# echo helloword | tr l 0
he00oword
[root@localhost ~]#
[root@localhost ~]# echo helloword | tr l 01
he00oword (只替换为0)
[root@localhost ~]#
[root@localhost ~]# echo helloword | tr hl 0
0e00oword (将h和l都替换为0字符)
[root@localhost ~]#
-c (反选定)
[root@localhost ~]# echo helloword | tr -c l 0
00ll000000[root@localhost ~]# (把除了l字符的其他字符都替换为0字符)
-t (相同位置匹配操作,等长字符替换)
00ll000000[root@localhost ~]# echo helloword | tr -t hl 0
0elloword (只将h替换为0字符)
[root@localhost ~]#
[root@localhost ~]# echo helloword | tr -t hl 02
0e22oword
[root@localhost ~]#
-s (将多次出现的连续字符替换为其他字符)
[root@localhost ~]# echo 1 2 3 | tr -s ' ' ' '
1 2 3 (将多次出现的空格替换为一个空格)
[root@localhost ~]#
-d (删除字符)
[root@localhost ~]# echo 1 222 | tr -d 2
1 (将所有的2都删除)
[root@localhost ~]#
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 27% /
/dev/nvme0n1p1 1014M 257M 758M 26% /boot
tmpfs 180M 24K 179M 1% /run/user/0
/dev/sr0 11G 11G 0 100% /run/media/root/RHEL-8-5-0-BaseOS-x86_64
[root@localhost ~]#
grep 文本过滤
[root@localhost ~]# grep 'root' /etc/passwd (输出有指定关键字的行)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#
-o
[root@localhost ~]# grep -o 'root' /etc/passwd (只显示该关键字)
root
root
root
root
[root@localhost ~]#
-i(过滤关键字且忽略大小写)
-v (反选定)
^# 以#开头的行
^$ 空白行