linux基础回顾总结

Linux基础回顾总结

一.Linux目录

目录作用
/bin/bin目录包含了引导启动所需的命令或普通用户可能用的命令这些命令都是二进制文件的可执行程序多是系统中重要的系统文件
/sbin/sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用
/etc/etc目录存放着各种系统配置文件
/root/root是管理员用户的家目录
/home/home是普通用户的家目录
/dev/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备
/boot/boot 系统启动所需文件
/opt/opt三方件目录
/mnt/mnt外部挂载
/var/var经常变化修改,日志文件在此目录下
/tmp/tmp临时文件目录

二.快捷键

1.shell快捷键
快捷键含义
ctrl+a光标移到行首
ctrl+e光标移到行尾
ctrl+l清屏
ctrl+←/→以单词为单位移动光标
ctrl+c终止当前任务
ctrl+z撤销上一次操作
ctrl+u剪切
ctrl+y粘贴
2.重启/关机
快捷键含义
shutdown - h now/0立刻关机
shutdown -h 5计划关机(5分钟后)
shutdown -r now/0立刻重启
shutdown -r 5计划重启(5分钟后)
reboot重启
logout退出登录
exit退出登录

三.基本命令

1.常用命令总结
命令解释
cd切换所在目录
ls查看目录下详情
mkdir创建目录
touch创建文件
rm删除
mv移动
cp复制
scp远程复制
cat查看/编辑文件
head查看文件
tail查看文件
echo打印
vi/vim编辑文件
ip addr/ifconfig查看网卡信息
pwd查看当前所在目录
which查看命令所在目录
alias别名
locate查看文件所在目录
mount/umount挂载/卸载
chown更改文件或目录的属组和用户
chmod更改目录或文件的权限
grep过滤-定位问题时常用
file查看文件类型
find查找文件
tar打包
lesslless 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页
more命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h
man查看命令详情帮助 man 命令
2.常用命令常用参数
1.cd

cd 切换目录

cd  回到家目录
cd - 回到上一次所在的目录
cd ~ 回到家目录
cd .. 前往上一级目录
. 代表当前目录
.. 代表上一级目录
2.ls

ls 查看目录详

ls 查看目录
ls -l /ll 查看目录详情
ll -a 查看目录下的隐藏信息
3.mkdir

mkdir 创建目录

正常创建以一个目录 mkdir a
递归创建目录 mkdir -p a/b/c
4.touch

touch 创建文件

创建文件 touch a.sh
5.rm

rm 删除文件或者目录

删除文件/文件夹 rm -rf a.sh
r 强制删除
f 不提示
6.mv

mv 移动目录或文件

移动到指定目录下 mv /root/a /tmp/
移动并改名 mv /root/a /tmp/b
7.cp

cp 复制

正常复制 cp a.sh /tmp/
递归复制 cp -r /a/b/c /tmp/

scp 远程复制

scp local_file remote_username@remote_ip:remote_folder
8.cat

cat 查看/编辑文件

#查看文件
查看文件内容 cat a.sh
查看并显示行号 cat -n a.sh
#编辑文件
覆盖添加
cat > 1.sh <<EOF
>1
>EOF
追加
cat >> 1.sh <<EOF
>2
>EOF
9.head

head 查看文件

默认查看前十行 head a.sh
查看前5行 head -5 a.sh
10.tail

tail 查看文件

默认查看后十行 tail a.log
监控跟踪文件变化 tail -f a.log
11.echo

echo 打印

echo -n 'content' 
-n 去掉数据内容最后的换行符
-E 默认的选项参数,不解析转义字符
-e 解析转义字符
12.vi

vi/vim 编辑文件 (文件不存在直接创建该文件)

#进入文件后,是【视图模式】
#一、【视图模式】下进入【编辑/插入模式】的方式:
	i #插入,光标在哪里,就在哪里插入;
	a #追加插入,光标的下一个字符前插入;
	I #在光标所在的行的行首插入;
	o #在当前行的下一行插入一个空行进行编辑;
	A #在当前行的行尾进行插入;
	O #在当前行的上一行插入一个空行进行编辑;
	C #删除光标所在位置,到行尾;
	cc #清空当前行(保留清空后的空行)
	esc #插入模式回到视图模式;
#二、【视图模式】下命令
	:wq  #保存退出
	:set nu #显示行号
	:q!  #强制退出不保存
	:set paste #原格式粘贴插入模式;(会有粘贴内容,格式变化问题时使用)
#三、【视图模式】下的快捷键
    u  #返回上一步操作;
    ctrl + r #回到下一步操作;
	dd #删除当前行;
	3dd #连续删除三行
	^  #光标到行首
	$  #光标到行尾
	G  #光标到最后一行
	gg #光标到第一行
	3G 或者 3gg #光标到第三行;
	###############
    dG #删除当前行一直到文件最后一行;
    d1G #删除当前行到第一行;
    d$ #从光标位置,删除到行尾;
    yy #复制当前行
    3yy #复制三行内容(算上光标所在行)
    p  #粘贴一次
    3p #连续粘贴3次;
#四、搜索、替换文件内容、撤销
	/wa  #n从上到下查找 N从下往上查找;
	/wa\c #忽略大小写查找
	?wa  #从文件下岛上查找
			n :从上往下查看搜索结果
			N :从下往上查看搜索结果
	%s#HAHAHA#hehe#g  #替换文件内容(第一个#后面,是文件中要被替换的内容,最后一个#前面,是要替换成什么)
	:7,10s###g   #指定行数进行内容替换(替换7-10行的内容)
				 s###g==s///g
	:noh  #取消搜索后的高亮;

ip addr/ifconfig 查看网卡信息

centos7默认使用ip addr查看网卡信息,若要使用ifconfig,需要安装,yum -y install ifconfig
windows查看网卡信息:ipconfig
13.pwd

pwd 查看当前所在目录

当不知道当前所在目录时可以使用pwd快速获取当前目录
14.alias

alias 别名

#先简单的设置一个别名
alias  ccwk='cat /etc/sysconfig/network-scripts/ifcfg-eth0' 
#使用别名
[root@oldboy ~]# ccwk
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
UUID=e1246356-ae71-41a9-956d-d9960c2e75db
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5

#查看系统中都有哪些别名
[root@oldboy ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

#取消别名
[root@oldboy ~]# unalias ccwk
15.locate

locate 查看文件所在目录

使用locate查看文件所在目录,要先updatedb将所有目录和文件搞到一个表里,再locate name 查找文件所在目录
16.mount

mount/umount 挂载/卸载

外部存储硬件设备的识别;里面的东西不能查看,因为没有绑定文件系统;
需要挂载之后才能操作;
mount  被挂在的硬件路径  挂载到的目标目录   #挂载
umount 挂载到的目标目录     #卸载
17.chown

chown 更改文件或目录的属组和用户

chown root a.sh  将a.sh的属主更换为root
chown所接的新的属主和新的属组之间可以使用:连接,属主和属组之一可以为空。如果属主为空,应该是“:属组”;如果属组为空,“:”可以不用带上。
chown :root a.sh  将文件a.sh的属组改为root
-R 处理指定目录以及其子目录下的所有文件
chown -R root:rootgroup * 将当前前目录下的所有文件与子目录的拥有者皆设为 root,群体的使用者 rootgroup:
18.chmod

hmod 更改目录或文件的权限

模式权限数字大小名称解释
r4设置为可读权限
w2设置为可写权限
x1执行设置为可执行权限
chmod 755 a.sh一般给文件赋权都是755
19.grep

grep 过滤-定位问题时常用

常用参数解释
-i忽略大小写进行匹配
-v反向查找,只打印不匹配的行
-n显示匹配行的行号
-r递归查找子目录中的文件
-l只打印匹配的文件名
-c只打印匹配的行数
grep aa a.sh 在a.sh中查找字符串aa
20.find

find 查找文件

1.通过名称查找
find / -name 'a.sh' 正常查找
find / -name '*.sh'当忘记或不知道全部文件名只知道部分时,忘记的可以用*代替
find / -iname 'a.sh'  i忽略大小写通过时间来查找
2.通过时间来查找
按天查找
find /etc -mtime -4 查找四天内的
find /etc -mtime +4 查找四天前的
按分钟查找
find /root/   -mmin -3 查找三分钟内的
find /root/   -mmin +3 查找三分钟前的
3.通过文件类型来查找文件
-  普通文件,find查找的时候,用f,而不是-
d  目录
l  链接【软、硬链接】
find ./ -type d  -name "*txt" 只查看目录类型
find ./ -type f  -name "*txt" 只查看文件类型
find ./ -type l  -name "*txt" 只查询链接文件
find ./ ! -type l  -name "*txt" 查看所有非链接文件 !取反
4.通过文件大小来查询
find / -size  +1k 字节为单位查找(大于1k的)
21.tar

tar 打包

1.压缩文件
tar zcvf  自定义压缩包名称.tar.gz  被压缩的文件 被压缩的文件 .....
2.解压文件
tar xvf  压缩包【-C:指定解压到哪个目录】,不-C就默认解压到当前目录下
3.不解压查看压缩包内容
tar tf 
4.参数
h:可以寻址到软连接的真实目录,将其打包压缩
--exclude=路径/文件  除了某个文件以外全打包
tar zcvfh test.tar.gz --exclude=./1.sh    ./*

四.虚拟机优化

虚拟机安装完成后一般进行以下优化

一.主机名称优化(系统主机名称的配置文件/etc/hostname)
#修改方式一:直接编辑文件,然后重启系统;
#修改方式二:命令修改,不需要重启系统;
hostnamectl set-hostname test
二.时间同步优化
1.时区设置
先查看系统时间信息 timedatectl
设置系统时区 timedatectl set-timezone  Asia/Shanghai
2.时间同步
手动方式同步时间:
    安装时间同步工具 yum -y install ntpdate
    时间同步 ntpdate ntp.aliyun.com
自动方式同步时间:
systemctl start chronyd
三.下载源优化(yum与epel)
	# 这里说下centos的几种安装软件的方式
		1.yum -y install name
        2.rpm安装 rpm -ivh  ./*.rpm
        	i  #isntall安装
			v  #显示安装过程
			h  #人类可读的方式
        3.源码编译安装
        4.二进制安装
四.安全软件的关闭优化(selinux与firewalld)
五.字符集优化
六.系统远程连接优化

五.Extra

wc-l统计行数
wc-w统计单词数

1.物理机与虚拟机相互传输数据

使用shell时物理机与虚拟机之间相互传输数据

yum -y install lrzsz
rz:实现将虚拟机内的文件传递到当前路径	
sz filename:实现将当前路径下的文件传出	
2.变量

计算机语言中能储存计算结果或能表示值的抽象概念

系统变量
定义: 系统默认生成的变量叫做系统环境变量
特点: 它的key都是大写的字母组成
查看系统环境变量 env
#变量优先级
1,局部变量>全局变量
2,profile>bashrc
系统语言变量 LANG
命令解释器变量 PS1
全局命令路径变量 PATH

普通变量与系统环境变量的区别

1,系统环境变量都是系统特殊需求的变量;
2,系统环境变量都有默认的设置;
3,系统环境变量都是大写字母;
4,系统环境变量对所有用户都生效;
总结:系统环境变量,就是针对计算机系统所使用的变量

永久配置变量文件

编辑/etc/profile文件即可
3.配置

开机打印文件

修改/etc/motd

开机就执行脚本的目录

在/etc/profile.d/下创建要执行的脚本
4.查看配置信息

查看网卡信息

cat /etc/sysconfig/network-scripts/ifcfg-eth0 

查看系统版本信息

cat /etc/redhat-release

查看DNS解析服务器文件

cat /etc/resolv.conf 

域名解析文件地址

cat /etc/hosts

主机名称配置文件

cat /etc/hostname 

cpu信息文件

cat /proc/cpuinfo 

内存信息文件

cat /proc/meminfo 

磁盘使用情况

df -h
5.文件相关信息
5.1文件属性-权限属性-rwx补充信息
r  #读权限
	针对于文件:打开文件(cat)查看文件中的内容;
	针对于目录:可以看目录(ls)里面有什么;
w  #写权限
	针对于文件:就是编辑权限(vi、vim、cat、echo)编辑文件内容;
	针对于目录:就是能否在目录下创建或删除目录或文件;
x  #执行权限
	针对于文件:是否能够直接执行;
	针对于目录:能否切换到这个目录;
5.2文件属性-时间属性
[root@oldboy ~]# stat wa.sh 
  文件:"wa.sh"
  大小:36        	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:33575307    硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2024-05-27 09:42:24.648875143 +0800     #上一次,被查看的时间;
最近更改:2024-05-27 09:41:17.647995001 +0800     #最近一次编辑时间(vim、vi、cat、echo > >>)
最近改动:2024-05-27 09:42:10.216685560 +0800     #最近一次属性变动
创建时间:-
##Linux中可以改变系统时间来达到更改文件创建时间的目的
date -s '日期/时间'
更改完后若想回到当前时间,再次执行时间同步就可以了
ntpdate ntp.aliyun.com
5.3文件属性-存储信息
ll -i 1.txt 
33574978 -rwxr-xr-x 1 root root 4 527 10:03 1.sh #33574978 inode号
inode使用情况
df -i
inode是索引节点,通过inode可以找到文件,block是存储数据的(每个block默认是4k,小文件不足4k,剩余空间也无法给其他使用,大于4k则占用多个)
每创建一个非空文件占用一个inode号,至少占用一个block
#创建文件体系统
磁盘创建分区后并不能直接被操作系统使用,还需要创建文件系统
创建文件系统的过程又称为格式化

5.4软硬链接
硬链接:指向编号的文件
ln  文件或目录  链接名称 ln  1.sh  1.ln
软链接:路径(指向原文件的路径)(Windows中的快捷方式)
ln -s 文件或目录  链接命令 ln -s 1.sh slink.sh
6.用户与权限
6.1用户概念
Linux中的三种用户
1.root,管理员,所有限制对root都不管用
2.普通用户,权限是被赋予的,权限受限
3.虚拟用户,傀儡用户,没有家目录无法登录
root用户  #id为0
普通用户   #id>1000 
虚拟用户   #0<id<1000
6.2用户组
一个用户组可以拥有多个用户,一个用户可以拥有多个权限
Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建
6.3用户相关配置
6.3.1用户列表文件
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
【:】是分隔符
root   #用户名
x      #早期的密码信息,后来变成了一个占位符号
0      #uid==用户id
0      #gid==用户组id
root   #用户描述、注释信息、备注
/root  #用户的家目录路径
/bin/bash  #用户的解释器(能登录),用户能否登录系统就是因为他;
6.3.2密码存储文件
cat /etc/shadow
bin:*:18353:0:99999:7:::
#####【了解即可】################
第一列: 用户名
第二列: 加密后的密码
第三列: 最近更改密码的时间戳;(1970年1月1日0:00:00起,到现在的“秒数”叫时间戳);
第四列:禁止修改密码的天数
第五列: 用户必须修改密码的天数;
第六列:提醒用户修改密码的警告时间;
第七列:密码过期后,权限彻底禁用的时间天数;
第八列:彻底试下的时间;
6.3.3用户组文件
cat /etc/group
root:x:0:
6.4用户相关的操作命令
6.4.1创建用户
#创建普通用户
useradd test2
#查看用户信息
id test2
uid=1091(test2) gid=1091(test2)=1091(test2)
#指定id来创建用户
useradd test5 -u 500
#创建一个用户,指定注释信息
useradd test6 -u 250 -c "asdf"
#创建虚拟用户
useradd test7 -M -s /sbin/nologin
-M  #没有家目录
-s  #不能登录
###额外参数
-u  #指定用户id==uid
-g  #指定gid
-G  #指定附属组
-d  #指定家目录
-M  #声明没有家目录
-m  #不写默认就是(声明有家目录)
-s  #指定解释器

useradd test8 -u 750 -g 750 
useradd:“750”组不存在

#创建用户,指定用户组的时候,必须提前拥有这个用户组,否则无法继续执行;
#没有用户组,直接指定不存在的gid,是不可以滴;
6.4.2创建用户组
groupadd test7
groupadd test7 -g 750
6.4.3修改用户信息
#修改用户组id
usermod test2 -g 750
#修改用户id
usermod test2 -u 760
#修改,用户id,用户组id,注释
usermod test2 -u 780 -g 750 -c "testaaa"
6.4.4删除用户
#删除用户,但是,保留用户生前的数据
userdel test2 
userdel:组“test2”没有移除,因为它不是用户 test2 的主组
[root@test ~]# ll /home/test2/
总用量 0
#删除用户,切删除用户的数据信息
userdel -r test3
userdel:组“test3”没有移除,因为它不是用户 test3 的主组
[root@test ~]# ll /home/test3/
ls: 无法访问/home/test3: 没有那个文件或目录
6.4.5 w
#查看系统当前用户登录信息
[root@test test]# w
 19:12:52 up  9:41,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      09:31    9:15m  0.09s  0.09s -bash
root     pts/0    10.0.0.1         09:32    4.00s  0.19s  0.00s w
root     pts/1    10.0.0.1         15:06    9:56   0.07s  0.05s bash
##【拓展】###############################
[root@test ~]# w
 19:12:52 up  9:41,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      09:31    9:15m  0.09s  0.09s -bash
root     pts/0    10.0.0.1         09:32    4.00s  0.19s  0.00s w
root     pts/1    10.0.0.1         15:06    9:56   0.07s  0.05s bash
[root@test ~]# ps -ef | grep pts/1
root       2236   1246  0 15:06 ?        00:00:00 sshd: root@pts/1
root       2238   2236  0 15:06 pts/1    00:00:00 -bash
root       2275   2238  0 15:09 pts/1    00:00:00 su test1
test1      2276   2275  0 15:09 pts/1    00:00:00 bash
root       2908   1522  0 19:14 pts/0    00:00:00 grep --color=auto pts/1
[root@test ~]# kill -9 2236 #杀死当前进程
6.4.6设置用户的密码
#1,手动给用户设置密码【passwd 用户名】
[root@test ~]# passwd test3

#2,免交互修改密码
[root@test ~]# echo "123456" | passwd --stdin test3
更改用户 test3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
6.4.7用户信息的查看命令
#查看自己的id信息
[root@test02 test]# id
uid=0(root) gid=0(root)=0(root)
#查看别人的id信息
[root@test02 test]# id test1
uid=1000(test1) gid=1000(test1)=1000(test1)
#w当前登录用户的信息
[root@test02 test]# w
 19:16:51 up  9:45,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      09:31    9:19m  0.09s  0.09s -bash
root     pts/0    10.0.0.1         09:32    3.00s  0.19s  0.00s w
root     pts/1    10.0.0.1         15:06   13:55   0.07s  0.05s bash
#who==w
[root@test02 test]# who
root     tty1         2024-05-28 09:31
root     pts/0        2024-05-28 09:32 (10.0.0.1)
root     pts/1        2024-05-28 15:06 (10.0.0.1)
#last用户登录的历史信息
[root@test02 test]# last
root     pts/1        10.0.0.1         Tue May 28 15:06   still logged in   
root     pts/0        10.0.0.1         Tue May 28 09:32   still logged in   
root     tty1                          Tue May 28 09:31   still logged in   
reboot   system boot  3.10.0-1160.el7. Tue May 28 09:31 - 19:17  (09:45)    
root     pts/0        10.0.0.1         Mon May 27 20:05 - crash  (13:25)    
root     pts/0        10.0.0.1         Mon May 27 08:20 - 20:05  (11:44)    
reboot   system boot  3.10.0-1160.el7. Mon May 27 08:20 - 19:17 (1+10:56)   
#lastlog 登录用户为单位划分
[root@test02 test]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/1    10.0.0.1         二 528 15:06:47 +0800 2024
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                                       **从未登录过**
shutdown                                   **从未登录过**
#切换用户
[root@test02 test]# su test1
[test1@test02 test]$ 
6.4.8sudo提权(用户提权)

普通用户通过sudo借用root的权限来达到某种目的,在/etc/sudoers中设置了普通用户的命令权限,普通用户就可以通过sudo来将命令的权限提高至root等级

#就是通过root用户,将全力分发给其他用户
[root@test ~]# vim /etc/sudoers
或者
[root@test ~]# visudo
100 root    ALL=(ALL)       ALL
101 test2     ALL=(ALL)       /usr/bin/touch,/usr/bin/mkdir,/usr/bin/mv
###
root        #用户名
ALL=(ALL)  #用户登录进系统的白名单
ALL         #表示给用户什么功能(必须写,绝对路径)
###
#查看哪些可以提权的功能命令,借用root的能力,临时提权
[test2@test ~]$ sudo -l
用户 test2 可以在 test 上运行以下命令:
     (ALL) /usr/bin/mkdir, /usr/bin/mv, /usr/bin/cp
#sudo提权,跟系统中的文件属性权限,没有任何关系;只是借用root的命令使用;
6.5权限补充
umask 002    #设置默认权限的命令
如果umask设置成基数,在生成的结果的权限位上默认+1
补充知识:
-gt  #大于
-ge  #大于等于
-lt  #小于
-le  #小于等于
-eq  #==
-ne  #!=
#更改权限的两种方式
1.chmod u-r 1.txt chmod g-r 1.txt chmod o-r 1.txt
2.chmod 755 1.txt
#修改某个文件下所有文件和子目录的权限
chmod -R 1/
#修改属组
chown root:root 1.txt
#修改某个文件下所有文件和子目录的属主和属组
chown -R test2:test2 1/
#1,特殊权限为:setuid和setgid
#setuid含义:在设置setuid之后,让普通用户(其他用户)操作这个文件的时候,也同时拥有属主的权限;
#setgid含义:在设置setgid之后,让普通用户(其他用户)操作这个文件的时候,也同时拥有属组的权限;
注意:目前,s权限只能针对二进制命令文件进行操作(/usr/bin/命令)
#设置方式:
#设置setuid
chmod u+s 命令绝对路径
chmod 4600 命令绝对路径
#设置setgid
chmod g+s 命令绝对路径
chmod 2600 命令绝对路径

#################################################################
#粘滞位(sticky,应用最多的方式);这个跟上两个不同,可以设置给普通文件或目录
#设置这个权限后,只有属主能操作这个文件,其他用户只能看;
#设置粘滞位
chmod o+t 目录/文件
chmod 1600 目录/文件
##############
u+s  4
g+s  2
o+t  1
#文件加锁
#给文件加锁后(只有root才可以加),即便是root用户也无法修改和删除
#给文件加锁
chattr +i 文件
#解锁
chattr -i 文件

#查看一个文件是否加锁
lsattr
7.通配符
通配符含义
*前面字符出现0次或0次以上
匹配任意一个字符
[]匹配中括号中任意一个字符
{}指定可选项集合/生成文件名的方法
7.1 * 前面字符出现0次,或者0次以上
[root@test02 test]# ll *.sh
-rw-r--r-- 1 root root  63 529 19:50 a.sh
-rw-r--r-- 1 root root 210 529 19:54 b.sh
7.2 ? 匹配任意1个字符
[root@test02 test]# ll ?.sh
-rw-r--r-- 1 root root  63 529 19:50 a.sh
-rw-r--r-- 1 root root 210 529 19:54 b.sh

[root@test02 test]# ll ??.sh
-rw-r--r-- 1 root root 0 530 15:29 ad.sh
7.3 [] 匹配中括号中任意1个字符
[root@test02 test]# ll [ab].sh
-rw-r--r-- 1 root root  63 529 19:50 a.sh
-rw-r--r-- 1 root root 210 529 19:54 b.sh
#中括号使用中,可以省略的写法,全是字母的[a-z],全是数字的[0-9]
[root@test02 test]# ll [a-e].sh
-rw-r--r-- 1 root root  63 529 19:50 a.sh
-rw-r--r-- 1 root root 210 529 19:54 b.sh
-rw-r--r-- 1 root root   0 530 15:32 c.sh
-rw-r--r-- 1 root root   0 530 15:32 d.sh
-rw-r--r-- 1 root root   0 530 15:32 e.sh
# !中括号取反
[root@test02 test]# ll [!a].sh
-rw-r--r-- 1 root root 210 529 19:54 b.sh
-rw-r--r-- 1 root root   0 530 15:32 c.sh
-rw-r--r-- 1 root root   0 530 15:32 d.sh
-rw-r--r-- 1 root root   0 530 15:32 e.sh
7.4 {} 指定可选项集合/生成文件名的方法

#给eth0设置一个备份文件,cp 被复制者 目标 == cp 被复制者{,目标}
[root@test02 test]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}
#大括号,可以控制查询,前面的字符出现的次数
[root@test02 test]# echo A{a,s}
Aa As
[root@test02 test]# echo A{,s}
A As
#若是打印数字类,1-100这种,可以设置步长{1..10..3},类似于range(1,100,5)
[root@test02 test]# echo {1..10..3}
1 4 7 10
###
$,shell调用变量时需要在变量名前加$才能调用成功
[root@test02 test]# a=1
[root@test02 test]# echo $a
1
[root@test02 test]# echo "${a}bc"
1bc
#若变量名与其他字符挨着,shell会把它识别为一个新的变量名,再打印的话找不到这个变量就会输出空
[root@test02 test]# echo "$abc"

[root@test02 test]# echo "$a bc"
1 bc
8.符号
8.1特殊符号
符号含义解释
;命令结束、两个命令之间的分割/隔符
#注释内容,只能看,不执行
|(管道)将前面的命令结果,交给后面的命令操作
$调取变量/普通用户的提示符
“”解析特殊符号和变量
‘’不解析特殊变量和符号
``限制性反引号里面的代码命令
\还原本意
# ;
[root@test02 test]# echo "a" ; echo "s"
a
s
# ;前后无论哪一个命令出现错误都对另一个没有任何影响
[root@test02 test]# echoq "a" ; echo "s"
-bash: echoq: 未找到命令
s
# |
[root@test02 ~]# find / -name "*-eth0" |xargs grep "IPADDR"
IPADDR=10.0.0.200
#$
#拓展:【$?】  #判断上一个命令执行的是够正确,0正确,非0错误
#引号和\
[root@test02 test]# echo '$a'
$a
[root@test02 test]# echo "$a"
1
[root@test02 test]# echo "\$a"
$a
#【``】先执行反引号里面的内容
[root@test02 ~]# grep "IPADDR" `find / -name '*-eth0'`
IPADDR=10.0.0.200
8.2重定向
符号含义
stdin :标准输入重定向(代码:0)
<基础的输入重定向符号,用于将文件内容作为命令的标准输入
<<双小于号,后跟分界符
#stdout :标准输出重定向(代码:1)
>覆盖
>>追加
#stderr:标准错误输出重定向(代码:2)
1>标准正确覆盖输出
1>>标准正确追加输出
2>标准错误覆盖
2>>标准错误追加
&>正确错误全输出(覆盖)
&>>正确错误都输出(追加)
[root@oldboy data]# cat > 1.txt <<EOF
> 111
> 222
> EOF

#tr 替换
[root@test02 ~]# echo "a b c" | tr "a " "1"
11b1c
#将空格替换成换行符
[root@test02 ~]# echo "a b c" | tr " " "\n"
a
b
c
[root@test02 ~]# tr "\n"  " " < 1.txt
 a b c [root@test02 ~]# 

&>>  #正确错误都输出(追加)
[root@test02 ~]# echo "hahaha" &>> 1.txt 
[root@test02 ~]# cat 1.txt 

a
b
c
hahaha
[root@test02 ~]# echoo "hahaha" &>> 1.txt 
[root@test02 ~]# cat 1.txt 

a
b
c
hahaha
-bash: echoo: 未找到命令
8.3逻辑符号
符号含义
与 &&前面正确,才执行后面
或 ||前面错误,才执行后面
非 !取反
#&&
[root@test02 ~]# echo "a" && cat 1.txt
a

a
b
c
hahaha
[root@test02 ~]# escho "a" && cat 1.txt
-bash: escho: 未找到命令
#||
[root@test02 ~]# echo "a" || cat 1.txt
a
[root@test02 ~]# escho "a" || cat 1.txt
-bash: escho: 未找到命令

a
b
c
hahaha
#!
[root@test02 ~]# find ./  -name "*.*"
./
./.bash_logout
./.cshrc
./.tcshrc

[root@test02 ~]# find ./ ! -name "*.*"
./.pki/nssdb
./a
#案例分析:与或的关系 [ -f /etc/hosts ] 判断文件是否存在的语句
[root@test02 ~]# [ -f 1.txt ] && echo "文件存在" || echo "文件不存在"
文件存在
[root@test02 ~]# [ -f 11.txt ] && echo "文件存在" || echo "文件不存在" 
文件不存在

9.正则
9.1基础正则
符号含义
^以什么开头
$以什么结尾
[]中括号中任意一个字符
[^]中括号中内容取反
.匹配任意1个,有且只有1个字符
*连续出现0次或者0次以上的字符
####结果以实际操作高亮部分为主,此处只是为了做笔记随意截取的
#^以什么开头
[root@test02 ~]# grep "^i" 1.txt
i have a dearm , build big house;
[root@test02 ~]# grep -i "^i" 1.txt
I am wa teacher~
I teach Linux.
i have a dearm , build big house;
#grep 取反参数 -v
[root@test02 ~]# grep -iv "^i" 1.txt

not 111222333
#$以什么结尾
[root@test02 ~]# grep 'bc$' 1.txt
abc
abbc
#打印非空行
[root@test02 ~]# grep -v '^$' 1.txt
Linux.
# . 匹配任意1个,有且只有1个字符
[root@test02 ~]# grep '^.' 1.txt
abc
abbc
abbbc
abbbbc
# * 连续出现0次或者0次以上的字符
[root@test02 ~]# grep "b*" 1.txt 
abc
abbc
abbbc
abbbbc
#-o查看匹配过程
[root@test02 ~]# grep -o "my*" 1.txt
m
m
my
# [] 匹配中括号中任意1个字符
[root@test02 ~]# grep "[ab]" 1.txt 
abc
abbc
#中括号取反[^]

[root@test02 ~]# grep "[^ab]" 1.txt 
not 111222333

9.2 扩展正则

grep如果想要识别扩展正则,需要grep -E或者egrep

符号含义
+匹配前一个字符出现1次或者1次以上
[]+中括号中的任意1个字符,出现1次或1次以上
匹配前一个字符出现0次或1次的情况
|或者
()表示括号中是一个整体
a{n,m}前面一个字符a,连续最少出现n次,最多出现m次
####结果以实际操作高亮部分为主,此处只是为了做笔记随意截取的
#+
[root@test02 ~]# grep -E "b+" 1.txt 
i have a dearm , build big house;
abc
abbc
#[]+
[root@test02 ~]# grep -E "[bc]+" 1.txt 
i have a dearm , build big house;
abc
abbc
#?
[root@test02 ~]# grep -E "b?" 1.txt 

i have a dearm , build big house;

abc
#|
[root@test02 ~]# grep -E "my|i" 1.txt 
i have a dearm , build big house;
my qq is 234456234234234
#()
[root@test02 ~]# grep -E "(my)" 1.txt
my qq is 234456234234234
#a{m,n}
[root@test02 ~]# grep -E "b{2,3}" 1.txt
abbc
abbbc
abbbbc
10.进程
10.1概念
概念:进程就是正在运行的程序(Windows中开启的软件就是一个进程)

1.当程序运行起来后,计算机系统会为进程分配存储空间、内存,以及守护进程的用户和权限;
2.当程序运行起来后,会用各项指标来表示进程的状态。
10.2查看进程指令
#查看当前所有进程
[root@test02 ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 15:06 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --d
root          2      0  0 15:06 ?        00:00:00 [kthreadd] 
root          3      2  0 15:06 ?        00:00:00 [kworker/0:0]
#[]中括号的进程,系统默认的进程
10.3进程分类
普通进程-守护进程
#1,【普通进程】,进程出现后,执行对应的任务,执行完毕后,进程关闭
#2,【守护进程】,程序执行任务的时候开启,不行行任务的时候,也开启;一直保持开启状态;(例如sshd服务)

[root@test02 ~]# ps -ef | grep sshd
root       1243      1  0 15:06 ?        00:00:00 /usr/sbin/sshd -D
root       1516   1243  0 15:06 ?        00:00:00 sshd: root@pts/0
root       1590   1544  0 15:13 pts/0    00:00:00 grep --color=auto sshd
10.4子进程与生命周期
fork在创建子进程后,将子进程的pid返回给父进程,父进程记录子进程的pid,并等待子进程运行结束;子进程创建后执行进入R(running)状态,若执行成功,将结果告知父进程,父进程将结果返回给客户端,而子进程则进入S(sleep)状态;若执行失败,父进程接收不到子进程执行结果,父进程就没有执行wait或waitpid,若父进程结束则由init进程接管这样子进程就会被kill,若父进程是一个循环进程,父进程不会结束,这样子进程就会一直存在,处于Z(zombie)状态

僵尸进程与孤儿进程

#僵尸进程:子进程执行一半,突然挂掉了...
- 僵尸进程,占用系统的资源,cpu、mem、磁盘、网络..........
- 系统中有一个叫systemd的服务,一般情况下,systemd会自动的清理僵尸进程,但是也有无法清理的僵尸进程;比如
说:java程序,只能重启java服务;
#孤儿进程:
- 孤儿进程,程序执行的过程中,爹没了,子进程执行一半,父进程挂掉了;
- 孤儿进程,没有了父进程的管理、没有父进程回收,systemd服务会管理;
#systemd服务的进程号【0】,是系统中一切进程的祖宗,它可以管理所有进程的生命周期;

10.5查看系统进程信息
10.5.1ps 参数介绍
####【参数介绍】
-a #显示所有终端下执行的程序进程
-A #显示系统中存在的所有程序信息,没执行的也算。
-u #显示进程管理的用户信息,以及更相信的进程使用情况
-x #显示所有程序,不以终端作区分(包含系统运行的进程)
-e #==A
-f #显示当前用户操作产生的进程信息,显示pid与ppid
-o #指定列名显示进程信息;
ps -ef
[root@test02 ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 15:06 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --d
root          2      0  0 15:06 ?        00:00:00 [kthreadd]
root          4      2  0 15:06 ?        00:00:00 [kworker/0:0H]
########
ps -axu
[root@test02 ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 125756  4232 ?        Ss   15:06   0:01 /usr/lib/systemd/systemd --switched-r
root          2  0.0  0.0      0     0 ?        S    15:06   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   15:06   0:00 [kworker/0:0H]

###
###ps每列含义解释
USER #进程的执行用户
PID #子进程号
%CPU #程序进程占用cpu的%比
%MEM #占用内存的%比
VSZ #虚拟内存的使用情况(单位kb)
RSS #实际内存的使用情况(单位kb)
TTY #链接主机的终端类型(?表示系统自己内部的进程)
STAT #进程的状态********【重点】********
START #进程启动的时间,什么时间启动的,出现的;
TIME #进程执行过程中,占用cpu多长时间的资源;
COMMAND #进程执行的命令;
#[]中括号代表系统内核启动的进程
10.5.2 top

动态进程

[root@test02 ~]# top
top - 15:45:22 up 39 min,  1 user,  load average: 0.07, 0.04, 0.04
Tasks:  99 total,   1 running,  98 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2027864 total,  1747840 free,   174840 used,   105184 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1720152 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                           
     1 root      20   0  125756   4232   2572 S  0.0  0.2   0:01.47 systemd                           
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                          
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                      
     5 root      20   0       0      0      0 S  0.0  0.0   0:00.06 kworker/u256:0                    
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.05 ksoftirqd/0     

进程状态和符号介绍

S #sleep 等待任务,休眠状态;
R #running cpu正在执行的状态
T #暂停的进程状态【ctrl+z:暂停程序】
[root@oldboy ~]# vim wa.sh
#!/bin/bash
for i in {1..30000}
do
echo "$i"
sleep 1
done
终端一:sh wa.sh
终端一:ctrl+z 暂停进程
终端二:ps -axu | grep sh 此时发现状态为T

[root@test02 ~]# ps -aux |grep a.sh
root       1652  0.0  0.0 113284  1408 pts/0    T    15:50   0:00 sh a.sh
#extra
#状态对的符号介绍(拿sleep装做比喻)
Ss #【s】父进程,控制进程
S< #【<】优先级比较高的进程
SN #【N】优先级比较低的进程
S+ #【+】前台运行的进程
Sl #【L】代表进程是多线程的,代表进程是以线程的方式运行的;

top相关参数

top -d 10 #改变更新速度,10秒更新一次
-i #不显示任何闲置(idle)或者无用的进程(僵尸进程zombie)
-n 5 #更新的次数,,更新5次后,退出top命令
-b #批次归档,搭配n参数一起使用,可以将top的结果输出到文件内;
[root@oldboy ~]# top -n2 -b > top.txt

top在动态查看的状态下的使用命令

M #按照内存排序
P #按照CPU排序
b #高亮(变白)显示RUNNING状态的进程
1 #显示所有cpu核心数的负载情况
q #退出top
h #获取帮助信息

top命令的结果详解

[root@test02 ~]# top
#################################################################################
top - 11:39:44 up 3:28, 4 users, load average: 0.00, 0.01, 0.05
系统的时间 系统运行的时间 几个用户正在登录 cpu平均负载 1分钟负载 5分钟负载 15分钟负载
#################################################################################
Tasks: 104 total, 1 running, 103 sleeping, 0 stopped, 0 zombie
104个进程 1个在运行 103等待进程 0个暂停 0个僵尸
#################################################################################
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
#详解
0.0 us #【用户态】(用户操作的时候占用cpu的%比)优先级最高
0.0 sy #【内核态】(系统内默认的进程占用cpu的%比)优先级较低
0.0 ni #优先执行的进程占用cpu的%比
100.0 id #cpu100%时间都是空闲状态
0.0 wa #【拓展】系统cpu等待硬件处理任务的%比
0.0 hi #【拓展】硬中断
0.0 si #【拓展】软中断
0.0 st #虚拟主机占用cpu的百分比
#################################################################################
KiB Mem : 995672 total, 688776 free, 176896 used, 130000 buff/cache
--- 系统最大内存 空闲内存 已经使用的 缓冲和缓存
#################################################################################
KiB Swap: 2097148 total, 2097148 free, 0 used. 678448 avail Mem
交换分区大小 空间的交换分区大小 已经用了的
#################################################################################
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                           
     1 root      20   0  125756   4232   2572 S  0.0  0.2   0:01.47 systemd                           
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                          
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                      
     5 root      20   0       0      0      0 S  0.0  0.0   0:00.07 kworker/u256:0                    
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.05 ksoftirqd/0                       
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0 

PID #子进程号
USER #执行用户
PR #优先级号码,进程调度的优先级【0】~【40】 值越大,优先级越低
NI #优先级号码,进程调度的优先级【-20】~【20】
VIRT #进程占用的虚拟内存(建筑面积,只要程序运行,就必须有这么大的内存空间,实际使用多少不管)
RES #进程占用的实际内存(使用面积,真实运行进程时使用的内存大小)
SHR #进程占用的共享内存(公摊面积,谁都可以用的内存)
S #进程状态
%CPU #运行进程占用CPU的%比
%MEM #运行进程占用内存的%比
TIME+ #运行进程到现在一共使用cpu多长时间的资源
COMMAND #进程调用的命令
10.6系统进程的管理命令
# &是指在后台运行
#jobs 查看当前正在运行的进程
# kill pid 终止进程
[root@test02 ~]# sleep 1000000 && rm rf /tmp &
[1] 2536
[root@test02 ~]# jobs
[1]+  运行中               sleep 1000000 && rm rf /tmp &
[root@test02 ~]# ps -ef | grep sleep
root       2537   2536  0 15:44 pts/0    00:00:00 sleep 1000000
root       2539   2121  0 15:45 pts/0    00:00:00 grep --color=auto sleep
[root@test02 ~]# kill 2537
[root@test02 ~]# -bash: 行 15:  2537 已终止               sleep 1000000

[1]+  退出 143              sleep 1000000 && rm rf /tmp
[root@test02 ~]# ps -ef | grep sleep
root       2541   2121  0 15:45 pts/0    00:00:00 grep --color=auto sleep
[root@test02 ~]# 

10.6.1 kill相关参数
[root@test02 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
#常用
kill -9  进程号   #强行杀死,强行关闭(系统重要的服务,不要使用)
kill  [-15]   进程号   #温柔的杀死你(任务完成再走)#默认的,不加任何参数即使-15
kill  -1 进程号   #不杀死进程,重新加载一下配置文件(进程不停,进程号不变)
10.6.2 pkill
#kill杀死成功,有提示,pkill有时候没有,很危险,
!!!!尽量不要使用进程名称杀死进程!!!!
[root@oldboy ~]# pkill sleep
10.7 进程的操作
10.7.1 前后台运行
#前台运行
[root@test02 ~]# sh a.sh
#后台运行
#fg使其前台运行
#bg使其后台运行
[root@test02 ~]# sh a.sh &
[1] 2575
[root@test02 ~]# jobs
[1]+  运行中               sh a.sh &
[root@test02 ~]# fg 1
sh a.sh
^Z
[1]+  已停止               sh a.sh
[root@test02 ~]# jobs
[1]+  已停止               sh a.sh
[root@test02 ~]# bg 1
[1]+ sh a.sh &
[root@test02 ~]# ps -ef | grep sh
root       1208      1  0 09:57 ?        00:00:00 /usr/sbin/sshd -D
root       2119   1208  0 10:53 ?        00:00:00 sshd: root@pts/0
root       2121   2119  0 10:53 pts/0    00:00:00 -bash
root       2165   1208  0 10:54 ?        00:00:00 sshd: root@pts/1
root       2167   2165  0 10:54 pts/1    00:00:00 -bash
root       2575   2121  0 15:59 pts/0    00:00:00 sh a.sh
root       2608   2121  0 16:00 pts/0    00:00:00 grep --color=auto sh
#虽然&后台运行,但是,只要你退出shell,即便是后台运行,也会被杀死
10.7.2 screen后台运行
#它可以实现,即便关闭shell,系统也可以正常运行程序;
#我们知道&符,可以使命令后台运行,但是只要关闭shell,进程就没了;
#原因:
- &符,的后台运行,是跟随bash解释器共存的,bash关闭,进程就关闭;

#screen命令,就可以解决这个问题;
- screen命令,是单独存在于系统中的操作空间,不跟随bash解释器共存,也就是说bash消失了,进程还在;
- screen命令目的:让自己写个脚本,永久的在系统中运行,即便退出shell-bash解释器,也照样运行。

#总结:
&后台能运行,bash关闭,进程关闭
screen后台运行,bash关闭,进程继续存在。
#使用screen命令需要安装screen工具
[root@test02 ~]# yum -y install screen
#创建一个screen后台空间,你会发现屏幕一闪,类似ctrl+l清屏一样
[root@test02 ~]# screen -S test
[detached from 2639.test]
#退出空间ctrl+a+d
[root@test02 ~]# ps -ef | grep sh
root       2657   2640  0 16:05 pts/2    00:00:00 sh a.sh
#此时退出shell,再次链接,查看进程,验证后台运行成功(断开重连)
[root@test02 ~]# ps -ef | grep sh
root       2657   2640  0 16:05 pts/2    00:00:00 sh a.sh
#查看空间窗口列表
[root@test02 ~]# screen -list
There is a screen on:
	2639.test	(Detached)
1 Socket in /var/run/screen/S-root.
#进入到一个screen空间中
[root@test02 ~]# screen -r test
[screen is terminating]
#删除一个空间(就是退出)
exit    #前提是里面的进程,没了~才能退出;
[root@test02 ~]# ps -ef | grep sh
root       1208      1  0 09:57 ?        00:00:00 /usr/sbin/sshd -D
root       2119   1208  0 10:53 ?        00:00:00 sshd: root@pts/0
root       2121   2119  0 10:53 pts/0    00:00:00 -bash
root       2165   1208  0 10:54 ?        00:00:00 sshd: root@pts/1
root       2167   2165  0 10:54 pts/1    00:00:00 -bash
root       2766   2121  0 16:07 pts/0    00:00:00 grep --color=auto sh
10.8 调整进程的优先级
10.8.1 优先级字段NI
NI   #取值在-20~20之间,值越大、优先级越小。
[root@test02 ~]# top n1
top - 16:12:19 up  6:14,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  99 total,   2 running,  97 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  6.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2027864 total,  1561800 free,   194764 used,   271300 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1674744 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                       
     1 root      20   0  125768   4216   2572 S  0.0  0.2   0:01.34 systemd                        
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                          
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H    
#查看指定列
[root@test02 ~]# ps -axo command,nice | grep sh
/usr/sbin/sshd -D             0
sshd: root@pts/0            -20
-bash                         0
sshd: root@pts/1              0
-bash                         0
grep --color=auto sh          0

10.8.3 调整优先级案例
[root@test02 ~]# vim /etc/hosts
#进行进程的同时来指定
[root@test02 ~]# ps -axo command,nice | grep vim
vim /etc/hosts                0
grep --color=auto vim         0
[root@test02 ~]# nice -n 5 vim /etc/hosts
[root@test02 ~]# ps -axo command,nice | grep vim
vim /etc/hosts                5
grep --color=auto vim         0

#给已经运行的程序调整优先级
#给进行中的程序,调整优先级renice(注意,只能拿指定他的进程号,不能指定名字)
[root@test02 ~]# ps -axo command,nice,pid | grep sshd
/usr/sbin/sshd -D             0   1208
sshd: root@pts/0            -20   2119
sshd: root@pts/1              0   2165
grep --color=auto sshd        0   3042
[root@test02 ~]# renice -n -20 2165
2165 (进程 ID) 旧优先级为 0,新优先级为 -20
[root@test02 ~]# ps -axo command,nice,pid | grep sshd
/usr/sbin/sshd -D             0   1208
sshd: root@pts/0            -20   2119
sshd: root@pts/1            -20   2165
grep --color=auto sshd        0   3045

11.sed
11.1 过滤文件
11.1.1查看行信息
#默认输出所有信息
[root@test02 ~]# sed "2p" sed.txt 
11
22
22
33
44
#取消默认输出信息
[root@test02 ~]# sed -n "2p" sed.txt 
22
#只查1-3行的信息
[root@test02 ~]# sed -n "1,3p" sed.txt 
11
22
33
11.1.2 通过内容过滤
#通过内容过滤
#查看普通用户
[root@test02 ~]# sed -n "/bash$/p" passwd
root:x:0:0:root:/root:/bin/bash
test1:x:1000:1000::/home/test1:/bin/bash
test3:x:1090:1008:测试用户:/home/test3:/bin/bash
test2:x:1091:1091::/home/test2:/bin/bash
test7:x:1092:1092::/home/test7:/bin/bash
#sed使用扩展正则,-r
[root@test02 ~]# sed -rn "/(aa|bash)$/p" passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/aa
daemon:x:2:2:daemon:/sbin:/sbin/aa
test1:x:1000:1000::/home/test1:/bin/bash
test3:x:1090:1008:测试用户:/home/test3:/bin/bash
test2:x:1091:1091::/home/test2:/bin/bash
test7:x:1092:1092::/home/test7:/bin/bash
#以字符串过滤区间内容
[root@test02 ~]# sed -n "/11/,/33/p" sed.txt 
11
22
33
[root@test02 ~]# sed -n "/1/,/3/p" sed.txt 
11
22
33
#截取日志案例;
[root@test02 ~]# sed -n "/16:15:19/,/16:15:59/p" /var/log/messages
Jun  4 16:15:19 test02 NetworkManager[815]: <info>  [1717488919.1352] device (eth0): state change: activated -> unavailable (reason 'carrier-changed', sys-iface-state: 'managed')
11.2 sed增删改
11.2.1 替换/备份
s###g
s///g
s@@@g
#把什么,替换成什么
#有g代表全局匹配,全部修改,无则只修改第一个
[root@test02 ~]# sed "s#1#i#g" sed.txt 
ii
22
33
[root@test02 ~]# sed "s#2#o#" sed.txt 
11
o2
33
#上述只是在内存中修改,磁盘中的文件并未被修改
#sed默认不修改文件内容,想要修改,需要-i
[root@test02 ~]# sed -i "s#2#o#" sed.txt 
[root@test02 ~]# cat sed.txt 
11
o2
#sed  -i.bak  修改并备份文件
[root@test02 ~]# sed -i.bak "s#1#i#g" sed.txt 
[root@test02 ~]# cat sed.txt 
ii
o2
[root@test02 ~]# ll
-rw-r--r-- 1 root root   30 64 16:46 sed.txt
-rw-r--r-- 1 root root   30 64 16:46 sed.txt.bak


11.2.2 删除
#删除第一行(未加-i,只是在内存中修改)
[root@test02 ~]# sed "1d" sed.txt
o2
33
#删除空行或者#的行
[root@test02 ~]# sed -r '/^$|#/d' sed.txt
ii
o2
11.2.3插入新增
#在第一行下面,插入一个字符串
[root@test02 ~]# sed "1amm" sed.txt
o2
mm
#在第二行插入字符串,原来的第二行向下移动变第三行
[root@test02 ~]# sed "2i--" sed.txt
o2
--
33
#把第二行的内容替换成成其他字符串
[root@test02 ~]# sed "2cdd" sed.txt
o2
dd
11.2.4反向引用

感觉有点类似于字符串格式化format的一些东西

[root@test02 ~]# sed -r "s#(2024)(06)(04)#\1#g" t.txt 
2024
[root@test02 ~]# sed -ri "s#(2024)(06)(04)#\1-\2-\3#g" t.txt 
[root@test02 ~]# cat t.txt
2024-06-04
12.awk

注意:区分单双引号

单引号:变量不会被解释undefined 双引号:变量被解释

12.1 取列
#指定分隔符,打印某一列
[root@test02 ~]# awk -F ':' '{print $1}' passwd
root
bin
daemon
#取倒数第二列
[root@test02 ~]# awk -F ':' '{print $(NF-1)}' passwd
/root
/bin

12.2 取行
#取文件的第一行
[root@test02 ~]# awk 'NR==1' passwd 
root:x:0:0:root:/root:/bin/bash
#取文件中大于第一行小于第四行的内容
[root@test02 ~]# awk 'NR>1 && NR<4' passwd 
bin:x:1:1:bin:/bin:/sbin/aa
daemon:x:2:2:daemon:/sbin:/sbin/aa

12.3取列大小对比
#取出uid大于999的用户
[root@test02 ~]# awk -F ':' '$3>=1000' passwd
test1:x:1000:1000::/home/test1:/bin/bash
test3:x:1090:1008:测试用户:/home/test3:/bin/bash
test4:x:1003:1003::/home/test4:/sbin/nologin
test5:x:1004:1002::/home/test5:/sbin/nologin
test2:x:1091:1091::/home/test2:/bin/bash
test7:x:1092:1092::/home/test7:/bin/bash
12.4 awk过滤
#过滤字符串
[root@test02 ~]# awk '/root|adm/' passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
#
[root@test02 ~]# awk '/2/,/4/' sed.txt
o2
33
44
12.5 取行取列结合
[root@test02 ~]# awk -F ':' 'NR==5{print $5}' passwd 
lp

12.6 计算

[root@test02 ~]# awk 'BEGIN{print 2*5}'
10
#计算未被使用的内存百分比
[root@test02 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        2027864      195192     1560144        9760      272528     1674288
Swap:       2097148           0     2097148
[root@test02 ~]# free | sed -n '2p'
Mem:        2027864      195428     1559856        9760      272580     1674036
[root@test02 ~]# free | sed -n '2p' | awk '{print $NF/$2}'
0.825383

六.面试题

1.文件异常退出处理方式
第一种方式:
进入文件==提示页面【R:恢复之前的操作】/【D:不要上次的操作了,从新开始编辑】
.文件名.swp  隐藏文件;
第二种方式:
直接删掉隐藏文件
2.磁盘空间什么时候会满
1.大文件过多,(清理大文件,没用的大文件删掉;)
2.小文件过多,(清理没用的小文件,inode号被占满)
3.如果用户误删自己的家目录中的所有内容包含隐藏文件,怎么办?
将/etc/skel/下的文件复制到家目录下即可
-bash-4.2$ ll -a /etc/skel/
总用量 24
drwxr-xr-x.  2 root root   62 516 10:10 .
drwxr-xr-x. 83 root root 8192 528 09:38 ..
-rw-r--r--.  1 root root   18 41 2020 .bash_logout
-rw-r--r--.  1 root root  193 41 2020 .bash_profile
-rw-r--r--.  1 root root  231 41 2020 .bashrc
-bash-4.2$ cp /etc/skel/.* ./
  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值