最全Linux系统学习笔记--持续更新

1、shell语法

命令 选项 参数
命令:整条shell命令的主体
选项:会影响会微调整个命令的行为
参数:命令作用的对象
1、自动补全
2、快捷键

ctrl+C:终止前台运行的程序
ctrl+D:相当于exit
ctrl+L:清屏
ctrl+A:光标移到命令行的前端
ctrl+E:光标移到命令行的后端
ctrl+K:删除光标后的所有字符
ctrl+U:删除光标前的所有字符

文件管理

1、文件目录结构
最全Linux系统学习笔记--持续更新_第1张图片
2、各个目录的作用各目录详解

https://www.cnblogs.com/zhuchenglin/p/8686924.html

3、命令详解

输出重定向
方式一:正确输出:> 等价于1> :将目标输出到文件中,会覆盖 >>等价于1>>: 将目标输出到文件中,追加到文件后
方式二:错误输出:2>将错误命令输出到文件中 ,有覆盖作用 ,2>>: 将错误命令输出到文件中 ,追加到文件后*
方式三:&> 不管是正确输出还是错误输出都重定向到一个文件中
实例:

命令:ls /home/ /hfsadd 1> yes.tst 2> no.txt  通过1>可将正确输出结果重定向到yes.txt中,并通过2>将错误输出结果重定向到no.txt中。

输入重定向
< 或者 0< 将文件中的内容作为CMD的输入
command file2 将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。
重定向符号<<,这个符号的作用是使用特定的分界符作为命令输入的结束标志,而不使用 Ctrl+D 键。

[c.biancheng.net]$ wc -l <<END
> 123
> 789
> abc
> xyz
> END
4

[c.biancheng.net]$ cat > test.txt <<END
> 123
> 789
> abc
> xyz
> END
表示通过cat看内容,即EOF后内容,随后将内容写入test.txt中

管道
操作符是:”|”,它只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入.
管理命令的输出说明:
最全Linux系统学习笔记--持续更新_第2张图片
tee命令:
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件
xargs命令用法
作用:用作替换工具,读取输入数据重新格式化后输出
1、多行输入单行输出
2、-n选项多行输出 例如:cat /home/ss.txt | xargs -n3 表示以三个字母为一行输出
3、-d选项可以自定义一个定界符 表示以某个字符为界输出

cut命令:
正如其名,cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,提取一列的字段,这种机制和sed是一样的。
剪切依据
cut命令主要是接受三个定位方法:
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f
语法格式

cut  [-bn] [file]cut [-c] [file]cut [-df] [file]

使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除。

awk命令讲解
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程:
1、awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符(RS)结束;
2、每行被间隔符:(默认为空格活制表符)分解成字段,每个字段储存在已编好的变量中,从$1开始
3、awk使用print函数打印字段,打印出来的字段以空格分隔,因为$1,$3之间有一个逗号,逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符OFS,OFS默认为空格
4、awk处理完一行后,将从文件中获取另一行,并将其储存在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理,该过程将持续到所有行处理完成。

awk命令形式:  awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
[-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
'  '          引用代码块
BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符,注意:如果要手动设置分隔符,在分隔符开始要用BEGIN
//           匹配代码块,可以是字符串或正则表达式
{}           命令代码块,包含一条或多条命令
;          多条命令使用分号分隔
END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
**特殊要点:**
$0           表示整个当前行,整行全部内容,awk '{print $0}' copy.txt
$1           每行第一个字段,类似的$2  $3 $4 $5
NF          字段数量变量   cat /etc/passwd | awk -F: '{print NF}',即为一共有多少列全部打印出来
$NF        表示打印最后一列,如果要往前则是$(NF-1)
NR          每行的记录号,多文件记录递增,比如打印1到5行,则是awk 'NR==1,NR==5{print $0}'
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符,可以理解为F的作用
OFS       输出字段分隔符, 默认也是空格,可以改为制表符等,意思是将输出字段按指定分隔符衔接
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
ORS         输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
-F'[:#/]'   定义三个分隔符
例如:awk ' $6>=20{ print $1},在输出时候先进行判断

sed命令
sed是一种几乎包括在所有unix平台的轻量级流编辑器,sed主要是用来将数据进行选取,替换,删除,新增的命令。
sed命令详解

https://blog.csdn.net/jsut_rick/article/details/78287737
**语法:sed  [选项]  ‘[动作]’  文件名**
选项:
-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕
-e:允许对输入数据应用多条sed命令编辑
-i: 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:
a\ :追加,在当前行后添加一行或多行
c \:行替换,用c后面的字符串替换原数据行
i \:插入,在当前行前插入一行或者多行
d:删除指定行
p:打印指定行
s:字符串替换,格式为  “行范围s/旧字符/新字符/g”

命令排序
1、&& || 具备逻辑判断
command1 && command2 只有在command1成功执行后才会执行command2
command1 || command2 在command1没有成功执行时执行command2
2、;(分号)不具备逻辑判断

paste用法:
paste单词意思是粘贴。该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反。
粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。paste将按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本,除非指定-d选项,它将成为域分隔符。
paste格式为:
paste -d -s -file1 file2
选项含义如下:
-d 指定不同于空格或tab键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。

  • 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。(这个参数的解释是网上找来的,但从后面的例子来看,应该是对输出的列进行设置。)

join命令用法:
功能说明:将两个文件中,指定栏位内容相同的行连接起来。

语法:join [-i][-a<1或2>][-e<字符串>][-o<格式>] [-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help] [--version][文件1][文件2] 
 补充说明:找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。 
参  数
-a<1或2>   除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。 
-e<字符串>   若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。 
-i或--igore-case   比较栏位内容时,忽略大小写的差异。 
-o<格式>   按照指定的格式来显示结果。 
-t<字符>   使用栏位的分隔字符。 
-v<1或2>   跟-a相同,但是只显示文件中没有相同栏位的行。 
-1<栏位>   连接[文件1]指定的栏位。 
-2<栏位>   连接[文件2]指定的栏位。 
--help   显示帮助。 
 --version   显示版本信息。

rpm相关命令

rpm -ivh 软件包的名字   #安装软件
rpm -ql  软件名称   #查看软件包的安装路径
rpm -qa  软件名称     #查看软件包名称
如果是rpm安装的话可以使用以下命令:
rpm -qa | grep 软件名
查看软件相关的配置文件,可使用如下命令
rpm -qc 软件名,比如:rpm -qc rsyslog

yum相关命令:

yum clean all    #清理yum缓存
yum makecache    #缓存软件包信息
yum repolist    #查询yum源信息
yum search 软件名      #查询软件
yum provides  软件名     #查看软件属于哪个文件    
yum list          # yum list显示所有已经安装和可以安装的程序包
yum list 软件名  #可以查看相关的软件信息,是否安装
如果是yum安装的话可以使用
yum list installed | grep 软件名

日志管理

日志优先级

日志优先级划分为:7种日志级别代号0-7
0 debug 有调试信息的,日志信息最多
1 info 一般信息的日志,最常用
2 notice 最具有重要性的普通条件的信息
3 warning 警告级别
4 err 错误级别,阻止某个功能或者模块不能正常工作的信息
5 crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
6 alter 需要立刻修改的信息
7 emerg 内核崩溃等严重信息

常见的日志文件(系统、进程、应用程序)
tail -f /var/log/messages 动态查看日志文件的尾部,核心系统日志文件,记录linux操作系统和服务错误信息。
/var/log/secure 是查看记录安全相关的信息、系统登录、与网络连接的信息。
/var/log/dmesg 查看和系统启动的信息。
/var/log/cron 看下crond、at进程产生的日志。
/var/log/yum.log 查看yum日志

通过rpm -qc 加程序名字可以查看配置文件地址
rsyslog程序,维护配置文件
升级:yum update rsyslog
配置文件: /etc/rsyslog.conf
规则:设备.级别 文件

日志轮转的配置文件有哪些?

/etc/logrotate.conf
/etc/logrotate.d/*

cd /etc/rsyslog.conf
cd /etc/logrotate.d
/var/log/ppp/connect-errors {
        missingok
        compress
        notifempty
        daily
        rotate 5
        create 0600 root root

		prerotate
		#中间写命令,表示在日志轮转之前做的动作
		endscript

		postrotate
		#中间写命令,表示日志轮转之后要做的动作
		endscript
}
#create 创建 0600 权限 root 属主  root属组
#rotate  保留5份
#daily 每天
#compress 是否压缩
#missingok  丢失无所谓
#notifempty 空文件不轮转
写完配置文件用 logrotate /var/logrotate.d/检查配置文件是否写错

注意:etc/rsyslog.conf中的配置文件配置一些日志的存放地点,logrotate.d中的配置文件说明日志的轮转策略,毕竟日志不会一直保存,占用系统资源

网络管理

目录:/etc/sysconfig/network-scripts
TYPE=Ethernet                        //网络类型:Ethernet以太网
BOOTPROTO=none                       //引导协议:自动获取dhcp、static静态、none不指定
DEFROUTE=yes                         //启动默认路由
IPV4_FAILURE_FATAL=no                //不启用IPV4错误检测功能
IPV6INIT=yes                         //启用IPV6协议
IPV6_AUTOCONF=yes                    //自动配置IPV6地址
IPV6_DEFROUTE=yes                    //启用IPV6默认路由
IPV6_FAILURE_FATAL=no                //不启用IPV6错误检测功能
NAME=eno16777736                     // 网卡设备的别名
UUID=90528772-9967-46da-b401-f82b64b4acbc         //网卡设备的UUID唯一标识号
DEVICE=eno16777736                   // 网卡的设备名称
ONBOOT=yes                           //开机自动激活网卡
DNS1=6.6.6.6                         //DNS域名解析服务器的IP地址
IPADDR=192.168.1.199                 //网卡的IP地址
PREFIX=24                            //子网掩码
GATEWAY=192.168.1.1                  //默认网关IP地址
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPADDR=192.168.2.2             #你想要设置的固定IP,理论上192.168.2.2-255之间都可以,请自行验证;
NETMASK=255.255.255.0          #子网掩码,不需要修改;
GATEWAY=192.168.2.1            #网关,这里是你在“2.配置虚拟机的NAT模式具体地址参数”中的
设置完以后需要重启网卡:systemctl restart nwtwork

主机名

hostname 可以查看当前服务器的主机名
hostname  +名字  可以临时更改主机名字,重启后失效
hostnamectl set-hostname 可以永久更改主机名
vim  /etc/hostname  可以在此文件下直接更改
更改后可以通过reboot或者init 6 重启

查看ip

ip a  可以查看所有的ip信息 
ip route可以查看网关
ip addr也可以查看ip信息
ping 命令可以查看能不能ping通 ,测试网络是否通畅。

ping命令
ping命令用于:确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题;测试、评估和管理网络。如果主机正在运行并连在网上,它就对回送信号进行响应。每个回送信号请求包含一个网际协议(IP)和 ICMP 头,后面紧跟一个 tim 结构,以及来填写这个信息包的足够的字节。缺省情况是连续发送回送信号请求直到接收到中断信号(Ctrl-C)。
命令参数:

-d 使用Socket的SO_DEBUG功能。
-f  极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。   #静默输出
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目:在发送指定数目的包后停止。     # 指定发包数量
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。  #指定发包间隔时间
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t 存活数值:设置存活数值TTL的大小。

traceroute命令
作用:通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
.命令参数:

-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。

route命令
最全Linux系统学习笔记--持续更新_第3张图片
功能:route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是 为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为 Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由

1、destination:表示目的的网络或者目的的IP地址,Gateway:指定的网关,Genmask:掩码,比如:上面第三行显示,掩码是24位,目的网络是10.20.48.0,所以如10.20.48.12这类的地址就是走的这个网关,Flags:是一种标识,U:used表示被使用,G:表示Gateway,H:host指的是目的地址不是一个网络而是一个精确的ip,iface:是通过哪个网卡与外部进行通信。
2、default:表示当你访问一个ip时候,它在所以路由信息中都不匹配的时候就会走default,gateway:当显示0.0.0.0或者*号(不同系统显示不一样)时候表示不指定网关,Genmask:掩码显示0.0.0.0,表示不指定掩码,那就是所有ip都可以走,掩码主要看掩了多少位,主要确定不同网段地址
可以参考:https://www.cnblogs.com/peida/archive/2013/03/05/2943698.html

常见服务管理操作

systemctl list-units     #列举出所有服务
systemctl start 服务名   #启动一个服务
systemctl restart 服务名   #重启一个服务
systemctl stop  服务名   #停止一个服务
systemctl enable  服务名     #设置为开机自启
systemctl disalble  服务名      #关闭开机自启服务
systemctl reload   服务名      #重新加载服务
systemctl status  服务名   #查看当前服务状态

正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配,grep、awk、sed等命令可以支持正则表达式
通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配。

元字符                                                                         作用
*                                                                   前一个字符匹配0次或者任意多次
.																	前一个字符匹配1次或者任意多次
^                                                                  匹配行首
$                                                                  匹配行尾
[]																    匹配中括号中指定的任意一个字符,只匹配一个字符
[^]                                                                匹配除中括号以外的任意一个字符,
\                                                                   转义符
\{n,m}                                                           表示前面的字符至少出现n次

进程管理
ps命令
ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。
ps 命令的基本格式如下:

[root@localhost ~]# ps aux
#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~]# ps -le
#查看系统中所有的进程,使用 Linux 标准命令格式
选项:
a:显示所有包括所有终端的进程;
u:显示进程的归属用户及内存的使用情况;
x:显示没有控制终端的进程;
-a: 显示当前终端下执行的进程;
-l:长格式显示更加详细的信息;
-e:显示所有进程;
-f: 显示所有进程的父进程
可以看到,ps 命令有些与众不同,它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”。

[root@localhost ~]# ps aux
#查看系统中所有的进程
USER PID %CPU %MEM  VSZ  RSS   TTY STAT START TIME COMMAND
root   1  0.0  0.2 2872 1416   ?   Ss   Jun04 0:02 /sbin/init
root   2  0.0  0.0    0    0   ?    S   Jun04 0:00 [kthreadd]
root   3  0.0  0.0    0    0   ?    S   Jun04 0:00 [migration/0]
root   4  0.0  0.0    0    0   ?    S   Jun04 0:00 [ksoftirqd/0]
…省略部分输出…
USER	该进程是由哪个用户产生的。
PID	进程的 ID。
%CPU	该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM	该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ	该进程占用虚拟内存的大小,单位为 KB。
RSS	该进程占用实际物理内存的大小,单位为 KB。
TTY	该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。
STAT	进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
START	该进程的启动时间。
TIME	该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND	产生此进程的命令名。

top命令
功能:top命令显示当前系统正在执行的进程的相关信息,包括进程ID,内存占用率,CPU使用率等,top命令实现对系统处理器进行实时监测。
top参数详解
最全Linux系统学习笔记--持续更新_第4张图片

第一行,任务队列信息,同 uptime 命令的执行结果

系统时间:07:27:05
运行时间:up 1:57 min,
当前登录用户:  3 user
负载均衡(uptime)  load average: 0.00, 0.00, 0.00
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行,Tasks — 任务(进程)
总进程:150 total, 运行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

第三行,cpu状态信息
0.0%us【user space】— 用户空间占用CPU的百分比。
0.3%sy【sysctl】— 内核空间占用CPU的百分比。
0.0%ni【】— 改变过优先级的进程占用CPU的百分比
99.7%id【idolt】— 空闲CPU百分比
0.0%wa【wait】— IO等待占用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比
0.0%si【Software Interrupts】— 软中断占用CPU的百分比

第四行,内存状态
1003020k total,   234464k used,   777824k free,    24084k buffers【缓存的内存量】

第五行,swap交换分区信息
2031612k total,      536k used,  2031076k free,   505864k cached【缓冲的交换区总量】

备注:
可用内存=free + buffer + cached

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

第六行,空行

第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

内部指令:
M:按内存的使用排序
P: 按cpu的使用排序
N: pid的大小排序
>: 向后
<: 向前
z: 彩色

free命令
在这里插入图片描述
功能:free命令用于显示Linux系统内存的使用情况,包括物理内存(Mem)、交换内存(swap)和内核缓冲区内存(buffer/cache)

Mem: 内存的使用信息
Swap: 交换空间的使用信息
第一行说明:
total : 系统总的物理内存大小
used: 系统已使用物理内存大小
free: 系统还剩余的物理内存大小
shared: 被共享使用的物理内存大小
buff/cache: buffer/cache使用的物理内存大小
available 从应用程序角度来看,还可以被 应用程序 使用的物理内存大小
计算方法
total = used + free + buff/cache
buff/cache = buffers + cache
available = free + buff/cache - 不可释放部分
内存会拿一部分用于buff/cache

磁盘管理
lsblk命令
主分区:一块物理硬盘上可以被独立使用的一部分,一个硬盘最多可以有4个主分区。
扩展分区:为了突破一个物理硬盘只能有4个分区的限制,引入了扩展分区。扩展分区和主分区的地位相当,但是扩展分区本身不能被直接使用,然而可以被继续划分成多个逻辑分区。
逻辑分区:逻辑分区可以有任意多个,但是不能独立存在,多个连续的逻辑分区可做为一个扩展分区。一个硬盘只能有一个扩展分区。
总结:也就是说,在一个物理硬盘上主分区和扩展分区加在一起最多仍然只有4个。但是扩展分区可以继续被划分成逻辑分区,而对多数用户而言,其实主分区和逻辑分区在使用上是没什么区别的。这样就达到了一快硬盘几乎可以有无限个分区的目的

iostat--监测磁盘使用情况
功能:iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态

-c 参数
iostat还可以用来获取cpu部分状态值:

-x 参数
iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据。
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。    
await:  每一个IO请求处理的平均时间,包括等待时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
%idle  cpu空闲时间百分比,idle小于70% IO压力就较大了,一般读取速度有较多的wait.

参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求""一次传输"请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。

 重点关注参数
1、iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
2、avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
3、await 表示每次IO请求等待时间,包括等待时间和处理时间
4、svctm 表示每次IO请求处理的时间
5、%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

正则表达式
元字符:
指那些在正则表达式中具有特殊意义的专用字符,如:. * ?
前导字符:
位于元字符前面的字符,如abc* 中的c,aooo.中的o
正则表达式中的常用元字符,具体功能如下:

.          匹配除了换行符以外的任意单个字符
*          前导字符出现0次或者连续多次
.*         任意长度字符
^          行首以某字符开头
$          行尾以某字符结尾
^$         空行
[]          匹配括号里任意单个字符或者一组单个字符
[^]         匹配不包含括号任一单个字符或一组单子字符
^[]         匹配以括号里任意单个字符或者一组单个字符开头
^[^]        匹配不以括号里任意单个字符或一组单个字符开头

\<          取单词的头    grep '\ copy.txt
\>          取单词的尾    grep 'rld\>' copy.txt
\< \>       精准匹配    grep '\' copy.txt 
\{n\}       匹配前导字符连续出现n次   grep 'go\{3\}' copy.txt  前导字符o出现3次 gooooo中的o只被匹配3次
\{n,\}      匹配前导字符至少出现N次   grep 'go\{3,\}' copy.txt   gooooo中的o全部被匹配
\{n,m\}     匹配前导字符出现n次到m次之间   grep 'go\{1,3\}' copy.txt gooooo中的o全部被匹配1到3次
\( \)       保存被匹配的字符 
\d          匹配数字
\w          匹配字母数字下划线
\s          匹配空格,制表符,换页符

source命令
source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。
功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录,我任务这是个主要作用,然配置文件在当前shell中立即生效
用法:
source filename 或 . filename
source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。

source filename 与 sh filename 及./filename执行脚本的区别在那里呢?
1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export让其成为环境变量,且通过source执行脚本才会使export生效,(这里说的为啥需要source才可以,因为source是在本shell中执行,所以其子shell也可以继承父shell的变量,但是通过sh finename即使是export,但其会再生成一个shell去执行,所以在本shell中的子shell无法继承执行filename中shell的环境变量,简单理解成本shell的子shell跟执行finename的shell的子shell非同一个shell)
3.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面,

export
将局部变量申明为环境变量
用法如:export JAVA_HOME=/opt/jdk,通过export创建的环境变量在子shell中可以被引用,但是无法带回上级shell中
解决:比如脚本为run.sh,如果执行./run.sh是不生效的,要执行source ./run.sh,文件中export的环境变量才能生效。

cpu信息
关于计算机中CPU的计算,主要通过以下几个命令查看
最全Linux系统学习笔记--持续更新_第5张图片
物理CPU
物理CPU就是计算机上实际配置的CPU个数。在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,你能找到几个physical id就代表你的计算机实际有几个CPU。在linux下可以通过指令 /proc/cpuinfo | grep ‘physical id’查看

cpu核数
核数就是指CPU上集中的处理数据的cpu核心个数,单核指cpu核心数一个,双核则指的是两个。通常每个CPU下的核数都是固定的,比如你的计算机有两个物理CPU,每个CPU是双核,那么计算机就是四核的。linux的cpu核心总数也可以在/proc/cpuinfo里面通过指令cat /proc/cpuinfo查看的到,其中的core id指的是每个物理CPU下的cpu核的id,能找到几个core id就代表你的计算机有几个核心。也可以使用指令cat /proc/cpuinfo | grep “cpu cores”查看

逻辑CPU
操作系统可以使用逻辑CPU来模拟出真实CPU的效果。在之前没有多核处理器的时候,一个CPU只有一个核,而现在有了多核技术,其效果就好像把多个CPU集中在一个CPU上。当计算机没有开启超线程时,逻辑CPU的个数就是计算机的核数。而当超线程开启后,逻辑CPU的个数是核数的两倍。实际上逻辑CPU的数量就是平时称呼的几核几线程中的线程数量,在linux的cpuinfo中逻辑CPU数就是processor的数量。可以使用指令cat /proc/cpuinfo | grep “processor” 查看

知道上面这些,常说的几核几线程就好理解了。假设计算机有一个物理CPU,是双核的,支持超线程。那么这台计算机就是双核四线程的。
所以两路(两路指的是有两个物理CPU)四核超线程就有2x4x2=16个逻辑CPU。有人也把它称之为16核,实际上在linux的/proc/cpuinfo中查看只有8核。

linux系统中的变量文件
1、每个用户都有自己的环境变量配置文件,~/.bash_profile ~/.bashrc,且以个人配置文件,优先加载变量,读取以个人的优先生效。
2、当你需要给所有用户使用这个变量的话,就要写入全局/etc/profile

谈谈shell编程中的那些括号们

**条件测试常用的语法如下**
语法1:test <测试表达式>
说明:这是利用test命令进行条件测试表达式的方法,test命令和“<测试表达式>”之间至少有一个空格

语法2:[ <测试表达式> ]
说明:这是通过[](单中括号)进行条件测试表达式的方法,和test命令的用法相同,这是老男孩推荐的方法,[]边界和内容之间
至少有一个空格,并且可以使用-a(and),-eq等

语法3:[[ <测试表达式> ]]
说明:这是通过[[]](双中括号)进行条件测试表达式的方法,是比test,[]命令更新的语法格式,[[]]边界和内容之间至少有一个空格

语法4:((<测试表达式>))  
说明:这是通过(())(双小括号)进行条件测试表达式的方法,一般用于if语句,(())两端不用空格,且此时等于等表达不可再用-eq等,
而采用数学符号><等

**用于计算的那些括号们**
语法:(())
说明:用于整数常用的运算符,效率很高,可以在“(())”前加$符号,表示将表达式极端后赋值给某个数,例如:num=$((i==i+1))

语法:()
说明:一个括号的时候不用于计算,主要用于命令的引用,常用于在其前加$(),例如:path=$(pwd),表示当前路径,并把值进行赋值

语法:$[]
说明:用于整数计算

shell中字符串、数字、逻辑比较等

常用的字符串测试操作符 说明
-n “字符串” 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero
-z “字符串” 若字符串的长度为0则为真,即测试表达式成立,z可以理解为zero的缩写
“串1” = “串2” 若字符串1等于字符串2,则为真,即测试表达式成立,可使用"==“代替”="
“串1” != “串2” 若字符串1不等于字符串2,则为真,即测试表达式成立,可使用"!==“代替”!="
在[]以及test中使用的比较符号 在[[]]和(())中使用的比较符号
-eq ==或者=(equal)
-ne !=(not equal)
-gt >(greater than)
-ge >=(greater equal)
-lt < (less than)
-le <=(less equal)

你可能感兴趣的:(linux)