Linux学习笔记

操作系统下载:https://www.centos.org/download/

网络配置

桥接模式下,通过虚拟网桥连接一个交换机,各虚拟机连接到交换机上,那么各虚拟机与主机共享主机所在的网络,虚拟机的网络地址与主机的在同一个网段里。

nat模式下,创建一个虚拟路由器,各虚拟机连接到虚拟路由器上,虚拟机有自己的网段。vnet8是为了主机能够访问虚拟机里面的主机,这个虚拟网卡连接到虚拟路由器上,网关是虚拟路由器的地址,vnet8虚拟网卡也有一个地址,网关会将虚拟机的地址转换为网卡的地址进行外部连接。虚拟机访问外部地址是通过主机的网卡访问的。

仅主机模式下,是将nat模式中的路由器换成了交换机,虚拟机仅能连接到主机,主机仍然可通过vnet8访问虚拟机。

  • 网络配置位置: /etc/sysconfig/network-scripts/ifcfg-ens33
  • 主机名配置位置: /etc/hostname,命令 hostnamehostnamectlhostnamectl 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 3init 5systemctl 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 now
  • shutdown [选项] 时间

常用命令

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友好显示文件大小
  • mkdirmkdir -prmdir
  • touch,创建一个空文件,或者使用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一行内容较长的不换行显示
  • 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/passwdsu 用户切换用户, 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解压到newDir
  • tar -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多线程,+前台显示,
  • 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即可
      Linux学习笔记
  • 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及对应的程序名称
      Linux学习笔记

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是一个命令行解释器,接收应用程序/用户的命令,然后调用操作系统内核。还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。

Linux学习笔记

查看操作系统支持的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或者 printenvprintenv 变量名可以打印出变量值,如 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+=1let a++
  • 替换命令执行的结果使用 $(命令)或者使用两个反引号

条件判断

  • test $a = Helloecho $?,注意等号两边有空格,如果返回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后没有空格也可以,小括号内没有空格也可以,可以使用

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表示每一行的所有内容
  • 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指定变量
  • 内置变量: FILENAME文件名, NR行号, NF当前行分割了多少列

总结

  • 使用netstat查看端口情况: netstat -anp | grep 7900
  • netstat -anp | grep 7900 | grep LISTEN,根据LISTEN关键字,可以过滤出监听的套接字,最后一列显示的是PID和程序执行的名称
  • LISTEN前面的2,表示接收字节数,还没有拷贝的数据,这里的2可以看作是下面两个ESTABLISHED后面是-的,表示已经建立连接,但是还没有处理,前面的226字节数据也还没有拷贝进行处理
    Linux学习笔记
  • 使用ps查看,cpu内存占比,cpu内存实际占用,进程状态,启动时间点,占用cpu总时间,启动进程的命令: ps aux | grep 9568
    Linux学习笔记
  • 使用ps查看父进程id: ps -ef | grep 9568
    Linux学习笔记
  • 使用top查看进程的内存cpu情况: top -p 9568
    Linux学习笔记
  • 使用top查看进程的线程情况: top -p 9568 -H或者 top -p 9568后按 Shift + H
    Linux学习笔记

Original: https://www.cnblogs.com/bingmous/p/16709469.html
Author: Bingmous
Title: Linux学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684424/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球