目录
1、grep 命令常见参数及使用方法
grep 命令:按照一定规则的文本搜索工具,打印匹配的行;
模式:由正则表达式以及一些文本字符所编写出来的过滤条件
语法:grep 选项 表达式 文件路径
常用选项
-n 打印行号(grep -n 'root' /etc/passwd 在该文件中打印出含有root的行号和内容) -v 反向过滤被模式匹配到的行 -r 目录递归搜索 (在多级目录中对文本进行递归搜索 egrep -r "111" *) -l
打印模式匹配到的文件(找出内容中含有first单词的文件都有哪些。
[roc@roclinux ~]$ grep -l "first" *.txt )
-w 精确匹配整个单词 -o 仅输出匹配到的内容 -e 指定字符串做为查找文件内容的样式。
并列使用多个 -e参数可以实现或条件
-A num 打印匹配到行之后的num行 -B num 打印匹配到行之前的num行 -C num 打印匹配到行的前后num行
( grep -C 1 "bash" /etc/passwd,输出匹配含有bash行和其上下一行)
-E 代表开启扩展正则表达式(grep -E 和 egrep效果一样)
当把匹配数字的规则写成多个的时候,代表至少匹配多次
基本正则表达式
分组和引用 分组 \(\) 将括号中的内容当作一个整体捆绑起来,在后面 进行整体处理 引用 \1 模式的左侧起,第一个左括号与它匹配的右括号之 间的模式所匹配到的字符 \2 模式的左侧起,第二个左括号与它匹配的右括号之 间的模式所匹配到的字符 \3 模式的左侧起,第三个左括号与它匹配的右括号之 间的模式所匹配到的字符
举例
匹配字数
表示?前的d出现0次或1次
表示*前的b出现0次或1次或多次,所以会匹配到 高亮显示内容
表示+前的b至少出现1次,所以会ac没有匹配到
因为aaaa中每一个a都出现了1次,所以全部匹配到了。
grep "b\{0,3\}" b至少出现0次,至多出现3次
位置锚定
用词首词尾锚定将aa看作一个完整的单词,但是文件里没有aa 所以找不到
分组及引用
我们在字符的连续匹配中使用过"abc\{1,3\}",最后得到的匹配的结果有abc,abcc,即c重复一次两次三次都能匹配到,但是如果需要匹配的是重复的abc这一个整个字符时,我们就需要分组,将abc作为一个整体,示例如下:
# vi love.file
He loves his lover
He likes his lover
SHe loves her liker
She likes her liker# grep "\(l\(..\)e\).*\1" love.file
(表达式的意思为:将第1个括号包裹起来的的内容在最后引用,中间(.*)出现任何内容都可以) ((l..e)包裹起来,..可以是任意两个字符;)
# grep "\(l\(..\)e\).*\2" love.file
(表达式的意思为:将第2个括号包裹起来的的内容在最后引用,中间(.*)出现任何内容都可以) ((..)包裹起来,..可以是任意两个字符;)
练习题
1、显示/etc/passwd中不以/sbin/nologin结尾的行 # grep -v "/sbin/nologin$" /etc/passwd 2、显示/etc/passwd中的完整数字 # grep -o "\<[0-9]\{1,\}\>" /etc/passwd 3、显示/etc/passwd中的两位数和三位数 # grep -o "\<[0-9]\{2,3\}\>" /etc/passwd # egrep -w "[0-9]{2,3}" /etc/passwd # grep -E -w "[0-9]{2,3}" /etc/passwd 4、显示/etc/passwd中以apache开头的行 # grep "^apache" /etc/passwd 5、显示/etc/fstab中的空白行,并显示行号 # grep -n "^$" /etc/fstab # grep -n "^[[:space:]]*$" /etc/fstab 6、显示/etc/fstab中包含defaults单词的行 # grep -n "\<defaults\>" /etc/fstab 7、通过ip a 命令获取主机IP地址 # ip a |grep "[1-9].[1-9].[1-9].[1-9]" |cut -d/ -f1 |cut -dt -f2 # ip a show ens33 |grep -w inet |cut -d '/' -f1 | tr " " @| cut -d "@" -f6 (tr " " @ 将空格替换成@) # ip a show ens33 | grep -w inet |egrep -o '([0-9]{1,3}.){1,3} [0-9]{1,3}/' | egrep -o '([0-9]{1,3}.){1,3}[0-9]{1,3}'
tr 字符替换删除转换 -d 删除字符![]()
扩展正则表达式
* 匹配其前面的字符任意次
.* 任意长度的任意字符(通配符里不可用)
cat 1 |egrep "[^[:alpha:]]"(过滤除了所以字母的内容)
cat 1 |egrep "^[[:alpha:]]"(过滤以字母开头的)
cat 1 |egrep "^[0-9].*[[:alpha:]]$"(过滤以数字开头字母结尾的字符)
cat 1 |grep '^[[:digit:]]\{1,5\}'(过滤以至少1个至多5个数字开头的)
2、命令通配符
它是完全匹配,不是部分匹配。
*的使用
使用*匹配时,不加字符表示匹配所有目录及文件,隐藏目录和文件不会被匹配;
*a表示匹配当前目录下以a结尾的所有目录及文件,
*a*示匹配当前目录下包含a的所有目录及文件,
a*表示匹配当前目录下以a开头的所有目录及文件;
?的使用
表示匹配任意单个字符
① 以任意单个字符开头a?:
② 以任意单个字符结尾?a:
[ ]的使用
匹配指定范围内的单个字符;
① [12].txt表示打印出含有1或2的txt文件,就算当前目录下有12.txt也不会打印,如下:
[root@localhost ~]# touch 1.txt 2.txt 3.txt 12.txt
[root@localhost ~]# ls [12].txt
1.txt 2.txt② 如果没有含有1或2的txt文件则把[12].txt看成一个整体交给ls命令处理,如下:
[root@localhost ~]# ls [54].txt
ls: cannot access [54].txt: No such file or directory③ 顺便提下{ },与[ ]不同的是,{ }里的字符用,隔开且如果匹配到一个另一个匹配不到会报错,如下:
[root@localhost ~]# ls {3,4}.txt
ls: cannot access 4.txt: No such file or directory
3.txt④ [0-9].txt表示匹配0到9之间的txt文件,如下:
[root@localhost ~]# ls [1-4].txt
1.txt 2.txt 3.txt⑤ { }用..来连接,如果未匹配到会报错,如下:
[root@localhost ~]# ls {1..4}.txt
ls: cannot access 4.txt: No such file or directory
1.txt 2.txt 3.txt使用通配符时不需要加双引号单引号
练习题:
1、显示一下/etc目录下以一个数字开头、并且以一个大写字母结尾的文件
# ls /etc/[0-9]*[[:upper:]]
2、显示/etc/目录下以l、n、m、p中的一个字母开头,中间有任意一个数字,并且以非 数字结尾的文件
# ls /etc/[lpmn]*[0-9]*[^[0-9]]
3、显示/etc/目录下以非字母开头,后面跟一个大写字母及任意长度的任意字符的文件
# ls /etc/[^[:alpha:]][[:upper:]]*
4、# 练习1:显示/var目录下所有以1开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录
# ls -d /var/1?[[:lower:]]5、# 练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
# ls -d /etc/[0-9]*[^0-9]6、# 练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录
# 1s -d /etc/[^a-z][a-z]*
7、# 练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录;
# cp -r /etc/m*[^0-9] /tmp/magedu.com/8、# 练习5:复制/usr/share/man目录下,所有以man开头后跟一个数字结尾的文件或目录至/tmp/man/目录下# # cp -r /usr/share/man/man[0-9] /tmp/man/
9、# 练习6:复制/etc目录下,所有以conf结尾,且以m,n,r,开头的文件或目录至/tmp/conf.d/目录下
# cp -r /etc/[mnrp]*.conf /tmp/conf.d/
3、命令语法
hwclock命令
硬件时钟是自己电脑的纯硬件时间,通常是主板时间
系统时钟是自己电脑的操作系统时间,这个时间在安装操作系统的时候就设置过了
hwclock 是查询 linux 硬件时间 ;date 命令是获取系统时间
hwclock 常用修改参数
-w 设置硬件时间:从当前系统时间获取硬件时间
-s 设置系统时间:从硬件时间获取系统时间
passwd 命令
- passwd 命令用来修改用户的密码 超级用户 root 可以修改任何一个可以登录系统的用户的密码;
- 默认修改自己的密;
- 只有root可以修改别人的密码,或者有特殊权限的用户(需要root授权)
--stdin 只有root用户才可以使用这种方法给其它用户修改密码,如下:
echo "123456" |passwd user1 --stdin
常用参数
- -S USERNAME:查看用户的密码状态
- -d:删除用户密码
- -l:锁住用户(仅root用户可用)
- -u:解锁
总结:
给普通用户user1使用-l命令后,普通用户user2无法切换到user1,会显示身份验证失败,使用-u命令解锁后,普通用户user2就可以切换到user1。
su命令
切换用户
超级用户 root 在切换其他用户时不需要输入密码; 普通用户之间进行切换需要输入对应用户的密码。
常用参数
- su - user 切换用户的时候,用户变量也会切到环境变量
- su user 切换用户的时候,用户变量不会切换,当前的环境变量还是以前用户的变量(切 完以后可以用 $PATH查看)
- -l:类似于login(它与su -的执行结果是一样的,都是切换到另一个用户,用户变量与环境变 量都改变了)
- -c commond USERNAME:变更用户身份后执行commond命令,再变回原来用户 身份
who命令
who [参数] 文件
显示当前是哪些用户正在登录的详细信
参数 功能 -a 显示所有信息,相当于所有参数 -b 显示系统最近启动日期 -l 显示所有可登录的终端信息 -m 仅显示关于当前终端的信息。"who -m"相当于"who am i" -q 显示当前登录的用户名称和人数 -r 显示当前系统的运行级别 -s 仅显示名称、终端和时间等字段信息,为who从的默认输出
pts 伪终端 tty表示终端设备名称
-u 显示当前每个用户的用户名、登录终端、登录时间、终端活动和进程标识 -T/-w 显示tty终端的状态,"+"表示对任何人可写,"-"表示仅对root用户或所有者可写,"?"表示遇到终端故障
run-level 0-6(运行级别)
- 0:系统停止状态,系统关机,系统默认运行级别不能是0
- 1:单用户工作状态,只有root权限,系统维护使用,当root密码遗忘时, 通过此级别修改root密码
- 2:多用户状态,无网络连接
- 3:完全多用户状态,命令模式状态,最常用的运行级别
- 4:保留状态
- 5:图形模式
- 6:重启状态
w 命令
显示目前登录系统的用户信息
FROM 登录用户来源的主机名
JCPU 附加到tty的所有进程使用时间
PCPU 用户当前进程使用的时间
WHAT 用户当前进程/参数
TTY 终端
uname命令
显示操作系统相关信息的命令
常用参数:
-a 显示系统所有相关信息 -m 显示计算机硬件架构 -n 显示主机名称 -r --kernel-release 显示内核发行版本号 -s --kernel-name 显示内核名称 -v --kernel-version 显示内核版本 -p 显示主机处理器类型 -o 显示操作系统名称 -i
显示硬件平台 ![]()
uptime 命令
显示系统自运行以来多长时间
[root@localhost ~]# uptime
19:02:04 up 1:54, 3 users, load average: 0.00, 0.01, 0.05
每个CPU内核的当前活动的进程数不大于3
w命令和uptime命令都可以显示系统运行信息,而w命令会都出一项功能:显示目前登录终端的用户信息。
last命令
用于显示用户最近登录信息
pts 伪终端
tty 终端设备名称
free 命令(常用)
显示系统内存的使用情况 (默认KB形式),习惯使用 free -m (内存以MB形式显示)或者 free -h(有KB,MB,GB的形式);
dmesg命令
显示开机信息
ps 命令(常用)
显示系统进程瞬间运行状态;静态的
选项 功能 -A 显示所有的进程,跟-e的效果相同 -a 显示现行终端机下的所有进程,包括其他用户的进程 -u 显示当前用户的进程状态 -x 通常与 a 这个参数一起使用,可列出较完整信息 -l 较长、较详细的将该PID的信息列出 -j 工作的格式(jobs format) -f 把进程的所有信息都显示出来 -e 表示显示所有继承 以标准语法格式显示当前系ps -e
ps -ef 全格式化的列表
ps -eF
ps -ely
head -n 3 只读取前三行
以 BSD 语法格式显示当前系统所有进程
ps ax
ps axu
ps -l命令各表头的含义
- F:代表这个进程的flag,如果是4,则代表使用者为 super user
- S:代表这个进程的状态stat
- UID:代表执行者的userId
- PID:进程的id
- PPID:父进程的id
- C:占用CPU资源的百分比
- PRI:指进程的执行优先级(Priority的简写),其值越小越早被执行
- NI:代表进程的nice值,其表示进程可被执行的优先级的修正数值
- ADDR:代表进程的地址,它指出该进程在内存的哪个部分,如果是个正在运行的程序,一般都是"-"
- SZ:占用的内存大小
- WCHAN:判断当前进程是否正在运行,若为"-",则代表正在运行;若该进程处于休眠状态,该值就是它在内核中的地址
- TTY:该进程是在那个终端机上面运行,若与终端机无关,则显示?,另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
- TIME:占用CPU的时间
- CMD:所下达的指令名称
UID 用户身份验证- PID 进程号
- PPID 父进程号
top命令
显示 Linux 进程信息,动态的
进程信息可以用键盘来翻页:
Shift+<
Shift+>