Linux学习笔记
操作系统下载:https://www.centos.org/download/
网络配置
桥接模式下,通过虚拟网桥连接一个交换机,各虚拟机连接到交换机上,那么各虚拟机与主机共享主机所在的网络,虚拟机的网络地址与主机的在同一个网段里。
nat模式下,创建一个虚拟路由器,各虚拟机连接到虚拟路由器上,虚拟机有自己的网段。vnet8是为了主机能够访问虚拟机里面的主机,这个虚拟网卡连接到虚拟路由器上,网关是虚拟路由器的地址,vnet8虚拟网卡也有一个地址,网关会将虚拟机的地址转换为网卡的地址进行外部连接。虚拟机访问外部地址是通过主机的网卡访问的。
仅主机模式下,是将nat模式中的路由器换成了交换机,虚拟机仅能连接到主机,主机仍然可通过vnet8访问虚拟机。
- 网络配置位置:
/etc/sysconfig/network-scripts/ifcfg-ens33 - 主机名配置位置:
/etc/hostname,命令hostname,hostnamectl,hostnamectl set-hostname xxx - hosts配置文件:
/etc/hosts
系统管理
进程,是一个正在执行的程序或命令,其中后一直常驻内存的一般被称作服务,linux中服务一般会以d结尾,表示是一个daemon进程
- 守护进程位置:
/etc/init.d/、/usr/lib/systemd/,后者是centos7才有的,centos7里面使用systemctl start/stop/restart/status serviceName,centos6使用service serviceName start/stop/restart/status。centos7里面NetworkManager服务替代了原来的network服务 - centos6配置运行级别位置在
/etc/inittab,改变当前运行级别:init 3,init 5,systemctl get-default查看当前运行级别,systemctl set-default设置运行级别 - setup进入图形化界面配置服务是否开机启动,
chkconfig serviceName on/off打开关闭开机启动,chkconfig --level 3 serviceName on/off打开关闭某个级别是否开机启动,cetos7配置开机启动可以使用systemctl enable/disable serviceName。防火墙配置,centos6下是iptables,使用service status/start/stop iptables查看,centos7下使用systemctl status/stop/start/restart/enable/disable firewalld - 关机重启
shutdown,默认1分钟后关机,shutdown -c取消shutdown命令,shutdown 55分钟后关机shutdown now立刻关机,shutdown 10:00指定时间关机sync将数据由内存同步到硬盘,shutdown now执行后也会先执行halt停机,不断电poweroff关机reboot,重启,相当于shutdown -r nowshutdown [选项] 时间
常用命令
sh是指向bash的连接,bash是bourne again shell的缩写
帮助命令
ls是外置命令,cd是内置命令,内置到shell里面的
- 使用
type 命令查看是否是内置命令 - 内置命令使用
help 命令查看使用帮助 - 外部命令使用
命令 --help查看
还使用man 命令查看帮助文档,这个可以直接查看外部命令的,如果查看内置命令可以使用man -f 命令查看该命令的第几册才有,然后使用man 册名(或可以区分的首字符) 命令查看,册名中1p表示posix协议(可移植性协议)
man查看命令是比较全面的,一般使使用命令 --help查看,内部命令使用help 命令查看即可
Ctrl + c停止进程Ctrl + l清屏,或者clear,使用reset彻底删除bash的所有记录table补全命令
文件目录命令
cd是内置命令,pwd也是内置命令
cd,会回到当前用户的home目录,cd -,进入上一次的工作目录ls -a,显示当前目录下的所有内容,包括以.开头的隐藏文件和目录。ls -l,一行列出一个文件,ls -lh友好显示文件大小mkdir,mkdir -p,rmdirtouch,创建一个空文件,或者使用vim然后保存也可以cp,\cp使用cp的原生命令,如果用重名文件是不会提示的,默认的cp是cp -i别名,cp -r递归复制alias可以查看系统的别名mv移动文件或目录,或重命名,移动文件,目标目录必须存在,如果文件名称与原来不相同,表示移动后重命名。移动目录,如果目标目录存在,则直接移动,名称不变,如果目标目录不存在但父目录存在,表示重命名,父目录不存在则与移动文件时目录不存在一样不允许移动。cat,将标准输入的内容输出到标准输出,-n显示行号more,分页查看文件内容,查看到最后自动退出,不好用less,分页查看文件内容,比more更加强大,根据要显示的内容加载,对于显示大型文件具有较高的效率。- 翻页
f/b,滚动e/y,(vim中要加Ctrl) - 也可以使用
空格向下翻页,enter向下滚动,gg/Shift + g到文件开头/末尾 - 按
=显示当前显示内容的信息,q退出 Shift + f,接收显示最新的数据,与tail -f类似less -S xxx.log,一行内容较长的不换行显示less -SN xxx.log,-N显示行号
- 翻页
echo -e,支持反斜线转义的字符- 重定向
>,>> ln -s sourceFile newFile,创建软连接,ln sourceFile newFile创建硬链接,不能为目录创建硬链接,硬链接表示多个文件指向了同一个inode节点,删除一个别的还可以访问这个inode。软连接是指向了某个文件,这个文件指向了它的inode,如果source文件没了,那么软连接也无法访问到这个inode了split -b 100m -d 文件名 文件前缀,将文件进行切分,-b指定切分大小,-d指定数字为后缀cat 文件前缀* > 文件名,将切分的文件进行合并
时间日期
date +'%Y-%m-%d %H:%M:%S, timestamps=%s'date -d '1 hours ago' +'%Y-%m-%d %H:%M:%S, timestamps=%s'date -s "2022-09-25 10:10:10"设置时间cal,日历命令
用户管理
useradd 用户名,-d指定home目录useradd -g 组名 用户名passwd 用户名,修改用户的密码id 用户名,查看用户信息,所有用户信息在/etc/passwd,su 用户切换用户,exit退出当前用户whoami,查看当前用户,who am i查看当前会话是由哪个用户创建,使用su切换前的那个用户,who查看登录的所有用户/etc/suders,可以配置哪些用户可以使用sudo临时获取root的权限(需要输入当前用户的密码),sudoers相当于root授权了哪些用户可以临时使用root的权限userdel 用户名删除用户,userdel -r 用户名同时删除用户的home目录
用户组管理
/etc/group,查看所有的用户组信息,在wheel组的用户,在sudoers里面该组配置了具有管理员权限groupadd 组名,添加组usermod -g 组名 用户名,修改用户的组名groupmod -n 新组名 旧组名,修改组名groupdel 组名,删除组名
文件权限
- 文件属性
- 第0位表示类型,-表示文件,d表示目录,l表示连接,c表示字符设备,b表示块设备
- 第1到第9位分别表示,文件所有者的权限,所在组的权限,其他用户的权限,如果要删除文件,需要该文件所在目录的w权限,目录中r表示可以查看,x表示可以进入到该目录
- 权限后面的数字表示当前文件硬链接的数量,如果是目录,表示当前目录下的子目录的数量
chmod [ugoa][+-=][rwx] 文件/目录,ugoa分别表示所有者、所有者的组、其他用户、所有用户,+-=表示增加、减少、赋予相应权限,或者使用cmod [三个1-7的数字],-R可以递归目录下的所有文件和目录的权限chown [选项] 用户 文件/目录,更改文件或目录的所有者chgrp,更改文件或目录的组,一个文件属于的组不一定是所属用户的组
搜索查找
find [路径,默认当前目录] -name '匹配模式',从指定目录向下递归遍历,将满足条件的文件显示在终端find [path] -user 用户名,查找指定用户名的文件find [path] -size +10M,查找大于10M的文件,ls -lh可以更清楚的显示文件大小locate 名称,利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate无须遍历整个文件系统,查询速度较快,为了保证查询结果的准确度,管理员必须定时更新locate时刻updatedb,更新locate数据库,在locate之前使用,查找更精确,默认每天更新which 命令,查看命令在哪里定义的whereis 命令,查看命令所在目录grep [选项] 名称 文件,从文件中匹配名称,-n输出所在行号,一般与管道符|结合使用grep -i xxx 文件,从文件中查找xxx,-i表示忽略大小写,-n显示行号grep -rn xxx,在当前目录下,递归查找文件中的xxx,并显示行号- 其他参数:
-A 数字显示匹配行后面的几行,-B显示匹配航前面的几行,-C显示匹配行前后分别各几行
wc 文件名,输入文件里面的行数、单词数、字节数,wc -l 文件输出行数
压缩解压
gzip 文件名,将文件压缩成.gz文件,只能压缩文件,压缩后会删除源文件gunzip gz文件,将.gz文件解压缩zip -r xxx.zip 目录,将目录压缩为一个zip包,源目录保留unzip xxx.zip -d newDir,将zip解压到newDirtar -cvzf xxx.tar.gz 目录,将目录打包并压缩,可以跟多个文件或目录,c表示创建,z表示使用gzip压缩,f表示指定压缩文件名称,v表示详细展示归档文件tar -xvzf xxx.tar.gz -C newDir,将tar.gz解压到newDir目录内
磁盘查看和分区
du -sh *,查看当前目录下所有目录各占磁盘大小,disk usage,不能查看不同分区的大小df -h,查看磁盘使用量,查看文件系统的磁盘空间占用情况tmpfs,临时文件系统,基于内存的文件系统,/dev/shm表示所有进程都可以共享的内存,默认系统内存的一般
free -h,查看内存及交换分区内存大小lsblk,查看块设备,磁盘分区情况,lsblk -f输出文件系统信息mount 设备名 挂载点,将设备挂载到指定目录umount 设备名或者挂载点,将设备卸载/etc/fstab,设置开机自动挂载,第一列写uuid或者设备名也可以,最后的两个0分别表示故障时是否dump、开机检查fsck的优先级(0表示不检查)fdisk -l,查看磁盘分区详情fdisk 设备名,对磁盘进行分区,linux最多有4个主分区,如果超过4个可以设置扩展分区,扩展分区可以从5到16,创建分区后需要格式化才能使用,挂载后原来挂载点的数据就无法查看了mkfs -t xfs 设备名,-t指定文件系统类型
进程管理
1号进程就是/usr/lib/systemd/systemd,centos7的初始进程
查看cpu占用和内存占用使用ps aux查看父进程id使用ps -ef
-
ps aux,process status,没有参数会输出当前终端运行的进程,a当前用户的终端进程,x所有用户的进程,u用户友好的显示风格,BSD风格,使用less分页查看ps aux | less- USER,哪个用户
- PID,进程id
- %CPU,占用cpu大小
- %MEM,占用内存大小
- VSZ,占用的虚拟内存大小,kB,有一定的算法,内存中有些页面不常用就会放到虚拟内存中
- RSS,占用的实际物理内存, resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz)
- TTY,表示使用的是哪个终端,?表示没有使用终端,tty1表示图形化终端,tt2-tty6是本地的字符界面终端,pts0-255表示虚拟终端
- STAT,进程状态,R运行状态,S睡眠状态,T暂停状态,Z僵尸状态(可能父进程需要它的某些信息,当父进程退出的时候它就会退出了),s包含子进程,l多线程,+前台显示,<表示高优先级,N表示低优先级
- START,进程启动时间
- TIME,占用cpu的时间
- CMD,启动该进程时的命令,对于sshd服务,如果用其他用户登录,会有两个进程,一个是xxx@pts/x,一个带
[priv]是root用户的,当该用户运行root权限的命令时会使用该进程,其他命令则使用另外一个用户进程
-
ps -ef,unix风格,会列出父进程PPID- 0号父进程是内核进程
- 1号进程是
/usr/lib/systemd/systemd,它的父进程是0号进程 - 2号进程
kthreadd的父进程也是0号进程,是做线程调度的 - 当前终端输入的命令的父进程是一个
-bash,它的父进程则是pts/x终端的PID,pts/x终端的父进程是sshd服务的,sshd服务的父进程是1,是系统
-
kill 选项 进程号,通过进程号杀死进程,PID,processID- 如果杀死父进程,子进程会还存在,PPID会赋值为1
- 如果进程在活跃状态,kill杀不掉可以使用
kill -9
-
killall 进程名称,通过进程名称杀死进程,支持通配符,这在系统因负载过大而变得很慢时很有用 -
pstree,查看进程树,进程之间的父子关系,pstree -p显示PID -
top,实时监控系统进程状态- 第一行top:系统当前时间,系统持续运行时间,当前有几个用户登录到系统(图形化界面也是),load average表示过去的1分钟、5分钟、15分钟整个系统的平均负载(一般认为小于0.7是比较小的)
- 第二行Tasks:total表示系统中总进程数,running的数量,sleep的数量,stop的数量,僵尸进程数量
- 第三行:cpu占用情况,
- us表示用户进程占cpu的时间百分比(没有更改优先级的用户进程)
- sy表示系统进程占用cpu的时间百分比(kernal进程)
- ni表示通过nice调整进程优先级之后的进程占cpu的时间百分比
- id表示空闲时间百分比
- wa表示等待进程占用的时间百分比,等待IO操作
- hi表示硬件中断请求占用的时间百分比
- si表示软中断请求占用的时间百分比
- st表示被偷的(虚拟化的)cpu占用时间百分比
- 第四行KiB Mem:内存占用情况
- total表示总共有多少,free表示有多少是空闲状态,used表示使用了多少,buff/cache表示有多少是放在缓存里面的
- 第五行KiB Swap:交换内存(虚拟内存)占用情况
- 下面显示的标题中分别表示:按f可以查看说明
- PID(进程号)
- USER(用户)
- PR(任务优先级priority)
- NI(用户指定的nice值,nice越大越容易被抢占)
- VIRT(virtual image虚拟内存占用大小)
- RES(resident,实际物理内存占用大小)
- SHR(shared,当前进程共享的内存大小
- 进程允许别的进程也用它的这个共享内存)
- S(status,进程状态,ps命令里面有写)
- %CPU(使用cpu占比)
- %MEM(使用内存占比)
- TIME+(已经占用的CPU总时间是多少,+表示精度)
- COMMAND(生成当前进程的命令)
- 启动命令
top -d 5 n 10,每5秒刷新一次,刷新10次后退出top -i,不显示空闲(idle,Sleep的,并不是所有的S都不显示,只是上次统计之后到当前为止没有占用的不显示,有可能占用了一下又不占用了)或僵尸进程top -c,显示启用进程的具体命令,或者进入top按c切换top -p PID,只查看某个进程的状态top -p PID -H,查看某个进程的线程
- top进去后使用
- h进入帮助文档,f进入字段选择、排序设置,上下键、翻页键滚动查看,q退出
- 按上下键、翻页键可以进行滚动查看,退出按q
- n,输入要显示的行数
- s,输入刷新的间隔
- r,修改某个进程的nice值
- u,过滤某个用户的所有进程
- k,kill某个进程,top有ps和kill的功能
- c,显示启动进程的具体命令
- F,使用过滤器过滤进程
- H,线程显示线程视图
- f进入可以选择其他列查看,比如显示nThread,进程的线程数
- 当前默认是按照cpu的占比排序的,按照内存占比排序使用
Shift + m,按照cpu占比排序Shift + p,安装PID从大到小Shift + n,自定义排序:先按f进入列选择模式,选中列并按s即可

-
netstat,显示网络状态和端口占用信息,netstat -anp查看进程的网络信息,netstat -lnp查看端口号占用情况,一般使用前者就可以了,前者的信息包含后者,不在监听的也列了处理- a,表示显示所有监听和未监听的套接字,all
- l,表示只列出监听状态的进程,listen
- n,表示不显示别名,域名显示为ip地址,no
- p,表示显示哪个进程在调用
- 标题含义:
- Proto,协议
- Recv-Q,当前套接字已经接收到数据,但是还没有拷贝出的字节数
- Send-Q,已经将套接字发出,但是还没有接收到确认的字节数
- Local Address,本地地址,0.0.0.0表示监听本地所有ip地址的这个端口,127.0.0.1表示本地回环地址(主要用于测试)
- Foreign Address,远程地址
- State,LISTEN表示正在监听,ESTABLISHED表示已经建立连接了
- PID/Program name,进程id及对应的程序名称

-
ss,可以代替netstat,效率比netstat、lsof高,-n不解析服务名,命令执行更快,-l,列出监听端口ss -nl | grep tcp | grep my_port,查看端口是否已监听,这里grep tcp是因为有些其他协议的文本会被grep出来
cron系统定时任务
后台守护进程是crond,systemctl status crond
crontab -e,添加定时任务crontab -l,列出定时任务crontab -r,删除当前用户所有定时任务- 定时表达式:
* * * * *,表示分钟(0-59),小时(0-23),天(1-31),月(1-12),周几(0-7)*,表示任何时间,,表示不连续的时间-,表示连续的时间*/n,表示隔多久执行一次
软件包管理
rpm -qa,查询所有rpm包rpm -ql 包名,查询安装位置rpm -qi 包名,查询包信息rpm -e 包名,删除rpm依赖,--nodeps,不检查依赖关系,如果检查的话当前包被别的软件依赖是不能卸载的rpm -ivh 包全名,安装rpm,必须有rpm安装文件,--nodeps,不检查依赖关系,可能有依赖其他安装包- yum,能够从指定服务器自动下载rpm包,并且安装,自动处理依赖关系,是基于rpm的
yum -y install 包名,安装yum remove 包名列表,删除安装包,与使用rpm删除一样yum update,更新yum check-update,检查是否有更新yum list,列出所有软件包信息yum clean 参数,清除yum过期的缓存,后面需要跟参数yum deplist 包名列表,显示yum安装包的所有依赖关系
- yum会自动查找最近的源进行下载,也可以使用wget下载一个国内的repo,替换
/etc/yum.repos.d/Centos-Base.repo,替换前备份一下
Shell编程
shell是一个命令行解释器,接收应用程序/用户的命令,然后调用操作系统内核。还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。

查看操作系统支持的shell,cat /etc/shells,查看当前shell,echo $SHELL
Shell脚本入门
第一行一般使用#!/bin/bash指定解析器
执行脚本
- 使用
sh、bash命令执行,不需要脚本有可执行权限,脚本是作为命令的一个参数 - 执行脚本本身,需要有可执行权限,使用绝对目录,或者使用相对目录,注意在当前目录下需要使用./,否则会解析脚本为一个命令(或者将脚本所在路径放在PATH里)
- 使用
source或.命令执行,表示使用当前shell执行,上面的两种执行方式会使用创建子shell执行脚本,不会影响当前shell的环境变量
变量
系统变量与用户变量:系统预定义的,和用户自己定义的
全局变量与局部变量:全局变量在shell及子shell都有效,局部变量表示只在当前shell有效
在当前shell执行bash,会进入子shell,使用ps -f可以查看当前shell的进程,会发现bash的父进程是-bash,exit退出当前shell
系统变量:
- 常见系统变量:
$HOME、$PWD、$SHELL、$USER、$PATH - 查看所有系统环境变量使用命令
env或者printenv,printenv 变量名可以打印出变量值,如printenv HOME,也可以等价的使用echo $HOME - 查看包括系统环境变量及自定义的环境变量使用命令
set
自定义变量:
- 用户自定义变量:
变量名=值,变量名使用字母、数字、下划线,不能数字开头,默认字符串类型,不能有空格,如果有空格需要使用引号括起来 - 提升为全局变量使用
export 变量名,此时子shell可以访问到,但是子shell对该变量的修改不会影响到父shell - 定义只读变量
readonly xx=xx - 取消变量使用
unset 变量名,只读变量不能使用unset,它是一个常量
注意:平常使用sh或./xx执行脚本是不会获取到当前shell定义的局部变量的,因为该执行方式会创建子shell执行,如果需要脚本访问,需要使用export提升为全局变量
特殊变量:
$n,n为数字,大于10使用花括号括起来,$0表示脚本名称,$1表示第一个参数,以此类推,双引号中的$xxx是占位符,会进行解析该命令,单引号中的就是字符串本身,不会解析$#,获取脚本参数个数$*、$@,获取所有脚本参数,前者将参数看成一个空格分割的整体字符串,后者将参数分割为数组$?,最后一个命令的返回状态,正确执行返回0
运算符
expr 1 + 2,执行表达式,作为三个参数传递给命令expr,注意乘使用*,使用比较麻烦- 使用
$((表达式))或$[表达式]计算,或者使用let a+=1、let a++ - 替换命令执行的结果使用
$(命令)或者使用两个反引号
条件判断
test $a = Hello,echo $?,注意等号两边有空格,如果返回0表示true,返回1表示false,比较麻烦- 使用
[ 条件表达式 ],注意表达式两边有空格,注意如果是字符串非空即为true - 整数比较使用:
-eq等于,-ne不等于,-lt小于,-gt大于,-le小于等于,-ge大于等于 - 字符比较使用:
=,!= - 文件权限判断:
-r、-w、-x分别表示有读、写、可执行权限 - 文件类型判断:
-e文件存在,-f是一个文件,-d是一个目录 &&、||:逻辑与、逻辑或,&&表示前一条执行成功才执行后一条命令,||表示前一条执行失败才执行后一条命令,同时使用可以达到三元运算符的效果,a && b || c,如果a真执行b,如果a假执行c-z xxx,xxx为空判断- 如果是多个表达式,在同一个
[]也可以使用-a表示逻辑与,-o表示逻辑或,如[ a = a -a b = b ]等价于[ a = a ] && [ b = b]
流程控制
if判断
# else和elif都是可选的,也可以不使用[] 使用test一样的,也可以使用((条件表达式))
if [ 条件表达式 ];then # 使用分号是因为有两个命令写在了同一行,也可以不使用分号,将then换行
程序
elif [ 条件表达式 ]
then
程序
else
程序
fi
case语句
# case行尾必须为in,每一个模式匹配以右括号结束
# ;;相当于break
case $xxx in
值1)
程序1
;;
值2)
程序2
;;
*)
上述条件都不满足情况下执行
;;
esac
for循环
# 在双小括号内可以使用各种数学运算符,if后面也可以使用双小括号,双小括号也可以做逻辑运算,如果是逻辑true计算结果为1,
for((初始值;循环控制条件;条件变化)) # for后没有空格也可以,小括号内没有空格也可以,可以使用<=,i++
do
程序
done
# 遍历序列
for 变量 in 值1 值2 值3 # in后面可以跟{1..100}表示1到100的序列,这个100不能使用变量代替,否则就全部变成了一个字符串
do
程序
done
# for para in $*或者$@是没有区别的,因为前者还是空格分割的字符串,这里会被for遍历到
# 如果使用for para in "$*"或"$@",那么就有区别了,前者就变成了一个字符串,后者还是被双引号解释后是一个数组
while循环
while [ 条件表达式 ]
do
程序
done
读取控制台的输入
read -t 超时时间 -p 提示符 变量名
# 超时时间单位为秒
# 如下所示,将输入的内容赋值给name变量
read -t 10 -p 'please input:' name
系统函数
basename xxx,将xxx最后一个/及之前的内容剪切掉,一般用于获取文件名称- 如果指定后者会将后缀剪切掉,如
basename xxx.sh .sh会得到xxx,basename xxx x会得到xx
- 如果指定后者会将后缀剪切掉,如
dirname xxx,将最后一个/及之后的内容剪切掉,一般用于获取文件的父目录- 获取脚本所在的绝对目录可以使用
$(cd ${dirname $0}; pwd)
- 获取脚本所在的绝对目录可以使用
自定义函数
functionName # 如果没有小括号,参数可以使用$1/$2等获取,与脚本参数相同,function关键字可以不写
{
程序
}
# 或者
function fName()
{
程序
return 1; # 返回值可以是0-255,返回值只能通过$?获取,如果不加return将以最后一条命令的运行结果作为返回值,如果想要返回其他数据或者不在0-255的数据可以使用echo返回值,然后return,在调用函数时使用$(函数调用)来获取到echo的数据
}
正则表达式
^abc,表示以abc开头的行abc$,表示以abc结尾的行,^$表示匹配空行r..t,.表示任意字符,r..t表示匹配任意rxxt的字符*,不单独使用,与上一个字符连用,表示匹配0次或多次,.*表示任意字符出现任意多次[],表示匹配某个范围内的一个字符[1,2],表示匹配1或2[0-9],表示匹配0-9的数字,[0-9]*表示匹配任意长度的数字字符串,这里表示前面的中括号内的字符都可以任意多次[a-z],表示匹配a-z之间的字符,[a-z]*表示匹配任意长度的字母字符串,注意需要使用单引号''扩起来避免单独使用时有问题,比如echo hello | grep '[a-z]*',不要使用双引号,因为双引号会先解释
\,特殊字符的话使用转义字符,并使用单引号括起来- 还有其他扩展的正则表达式
grep -n xxx,可以显示行号grep -E 正则表达式,这里可以使用扩展的正则表达式,比如{2}前面的字符只出现两次
文本处理工具
cut -d 分隔符 -f 取哪些列,剪切某一列数据,分隔符只能是单个字符(相当于每一个分隔符都会画一条竖线,每一行画一条横线,组成一张表,取第n列)cut -d " " -f 1,取第一列,2-,取第二列及后面的所有列,-3,取第一列至第三列- 可以结合grep获取想要截取的内容,使用管道符,否则在后面跟文件名
awk -F "分隔符" '/pattern/{action}' 文件,将文件的每一行以指定分隔符切分,使用pattern进行匹配,留下含匹配内容的行,匹配后的内容执行action代码,(awk切分不会包含空的列,cut包含虚拟的列)- 分隔符参数-F可选,默认是空格分割,/pattern/也是可选,
$1表示第一列,$n表示每一行的所有内容,打印多个列时使用逗号隔开会使用空格分开显示,如'{print $1,$2}' cat a.txt | awk -F " " '/a/{print $1"---"}',匹配含有a的行,并打印第一列加---后缀cat a.txt | awk -F " " '{print $1"---"}',也可以不使用正则匹配,所有行执行action命令cat a.txt | awk -F " " '/a/BEGIN{print hi}{print $1"---"}END{print "endend"}',在执行action命令前后分别执行一些命令cat /etc/passwd | awk -v i=2 -F ":" '{print $3+i}',使用-v指定变量cat /xx/ | awk -F/ '{print $1}',使用/进行分割,分隔符不用双引号- 内置变量:
FILENAME文件名,NR行号,NF当前行分割了多少列
- 分隔符参数-F可选,默认是空格分割,/pattern/也是可选,
sort,对输出从小到大排序,-r反向排序,从大到小sort -n,使用数字排序
uniq,对输出重复项进行合并,-c,对重复项进行计数,计数值作为第一列head -n 10,取前10行head -n -10,去掉后10行
tail -n 10,获取后10行tail -n +10,去掉前10行
总结
-
使用netstat查看端口情况:
netstat -anp | grep 7900netstat -anp | grep 7900 | grep LISTEN,根据LISTEN关键字,可以过滤出监听的套接字,最后一列显示的是PID和程序执行的名称- LISTEN前面的2,表示接收字节数,还没有拷贝的数据,这里的2可以看作是下面两个ESTABLISHED后面是-的,表示已经建立连接,但是还没有处理,前面的226字节数据也还没有拷贝进行处理

-
使用ps查看,cpu内存占比,cpu内存实际占用,进程状态,启动时间点,占用cpu总时间,启动进程的命令:
ps aux | grep 9568

-
使用ps查看父进程id:
ps -ef | grep 9568

-
使用top查看进程的内存cpu情况:
top -p 9568

-
使用top查看进程的线程情况:
top -p 9568 -H或者top -p 9568后按Shift + H

本文来自博客园,作者:Bingmous,转载请注明原文链接:https://www.cnblogs.com/bingmous/p/16709469.html
浙公网安备 33010602011771号