admin管理员组文章数量:1538194
文章目录
- linux常用命令归纳汇总
- 环境变量设置
- 文件管理
- 网络管理
- 网络主机管理
- DNS配置
- netstat工具
- telnet
- lsof
- 防火墙管理
- scp文件传输
- 启动级别
- 用户和组
- 用户
- 用户组概念
- 用户组的相关命令
- 用户的相关命令
- 配置sudo权限
- 切换用户
- 用户权限详情
- 压缩打包
- 压缩
- 解压缩
- 打包
- 解包
- 服务管理
- 磁盘挂载
- 日期
- 软件安装
- 安装方式
- yum安装
- rpm安装
- 源码包安装
- 源码包卸载
- 进程管理
- 概念
- 进程类型
- 进程的启动方式
- 进程的工作原理图
- 进程查询ps命令
- 审计工具
- 计划任务
- 文本处理
- wc命令
- sort命令
- uniq命令
- cut命令
- find命令
- grep文本搜索
- ack快速查找
- sed命令
- 命令行快捷操作
- 结尾
linux常用命令归纳汇总
命令分类 | 常用命令列表 |
---|---|
文件管理 | mkdir,rmdir,mv rm cp touch,cat,tar,echo,more,less,head,tail,file,find,rename,ln,pwd,scp,alias |
磁盘管理 | ls,cd,pwd,du,df,mount,unmount,fdisk |
文档处理 | wc,sort,uniq,cut,sed,wak,grep,ack,vi,vim,diff |
用户和组 | useradd,usermod,passwd,userdel,groupadd,groupdel,chgrp,id,su,whomai,groups,exit |
文件传输 | get,put,wget |
网络通信 | telnet,nc,ifconfig,ping,netstat,ip,host,hostname,ifup,ifdown |
备份压缩 | gzip,zip,tar,bzip2,bunzip2 |
系统管理 | kill,last,ps,top,free,pstree,reboot,halt,shutdown,sudo,who,w,whereis,which,whatis |
系统设置 | clear,set,unset,hwclock,time,date,locale,uname,cal |
其他 | history,nohup,service,init,rpm,ssh,yum |
环境变量设置
查看环境变量有两种方式:
env
echo $PATH
命令 export $PAHT
设置环境变量,临时设置,中断关闭就没有了
export $PATH=$PATH:/usr/local/go/bin
永久有效
vim /etc/profile
$PATH=$PATH:/usr/local/go/bin
保存退出,别忘了
source /etc/profile 这样子才能生效
命令export -p
查看所有的环境变量
export -p
设置自定义的环境变量
cd /etc/profile.d下自己添加
文件管理
目录切换命令:cd
cd [目录]
cd ~ #回到当前用户的家目录
cd - #回到最近一次的历史目录
cd .. #回到上一级的目录
查看当前目录路径信息:pwd
cd /usr/local #进到/usr/local命令
pwd #查看当前目录信息
查看目录内容列表:ls
# 使用格式
ls [选项]... [目录或文件名]
# 常用选项
-l: #详细信息显示
-a: #显示所有子目录和文件的信息,包括隐藏文件
-A: #类似于-a,但不显示"."和".."目录的信息
-R: #递归显示目录内容
-h: #以友好的方式显示文件大小
# 例子
ls -l #列出文件详细信息,也可以写为ll
ls -alht ##以友好的方式显示包括隐藏文件的详细信息
显示文件或者目录的使用空间 du
du [选项]... [目录或文件名]
# 常用选项
-a: #统计时所有的文件,不仅仅是目录
-h: #以更易读的方式显示(字节单位K,M)
-s: #只统计每个参数所占用空间总的大小
du -sh ~/.ssh #统计家目录下.ssh目录的大小
du -sh /usr/local #统计/usr/local目录下的大小
du -h /data/lnmp1.8 --max-depth=1 | sort -n #查找某个目录下的大文件
显示磁盘分区的使用情况 df
常用选项
-h #以更容易读的字节单位(K,M)显示信息
-T #显示分区格式
例子
df -h #显示磁盘信息,以友好的方式
df -Th #已友好的方式显示磁盘信息,并附加磁盘格式
创建新文件 或 更新文件的时间标记 touch
touch 文件名
例子:
cd /data/test
touch abc.txt
查看文件类型 file
file 文件名 #它是根据文件内容格式判断,而不是通过文件后做名判断
例子:
file /data/test/abc.txt
创建文件夹 mkdir
常用选项
-p: 以递归的方式创建文件夹
例子:
mkdir -p /data/test/lihux #如果上级目录不存在,就自动创建
复制文件夹或文件 cp
使用格式
cp [选项] 源文件或目录 目标文件或目录
常用选项
-r 递归复制整个目录
-p 保持源文件的属性、权限不变
-f 强制覆盖目标同名文件或目录
-i 需要覆盖文件或目录时进行提醒
-a 复制文件的属性,权限,软链接,递归子文件夹等
例子:
cp -a /root/testdata /data/
删除文件或目录 rm
使用格式:rm [选项] 文件或目录
常用选项
-f 强行删除文件或目录,不尽兴提醒,在特殊情况下使用
-i 删除文件或者目录时提醒用户确认
-r 递归删除整个目录以及子文件
rmdir #删除空文件夹
rm -rf #以不提醒的方式,直接删除一个文件夹
rm -rf / #删库跑路
例子:
rm -rf /data/test/linux/abc
移动文件或者重命名文件 mv
mv [选项] 源文件或目录... 目标文件或目录...
常用选项
-f 若目标文件或目录已经存在时,则直接覆盖现有的文件或目录
-u 当源文件或目标文件不存在时,才执行移动操作
-t 指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
mv -t /home/dir1/ test1.txt test2.txt
在屏幕显示文件内容 cat/head/tail/more/less
cat -n [文件] #查看所有文件内容
常用选项
-n或--number 由1开始对所有输出的行数编号
head -n [文件] #查看文本的开头几行,默认是10行
例子:
head -n 20 ~/lnmp-install.log
tail -f [文件] #动态显示文件最新追加的内容
常用选项
tail -n 15 file #显示文件最后10行
tail +20 file #显示文件内容,从第20行到文件末尾
tail -c 10 file #显示文件内容最后10个字符
tail -f file #动态显示文件最新追加的内容
more file #分屏显示文件内容
常用选项
按enter键,显示文本的下一行的内容
按空格键,显示文本的下一屏的内容
按b键,显示上一屏的内容
按q,退出
less file #增强版的上下翻页浏览文件内容
常用选项
和more使用方式基本相同
按e键,向上滚动一行
按y键,向下滚动一行
G,跳到文件末尾
gg,跳到文件首行
按space键,向后翻页
按b,向前翻页
按q,退出
输出指定的字符串或变量到屏幕 echo
常用选项
-e 如果如下字符串中出现以下字符,则会进行转义
\n 换行且光标移到行首
\t 插入tab符
输出指定字符串到文件
> 覆盖输出到文件
>> 追加输出到文件
2&>1 错误信息标准输出(包含系统错误,异常错误)
例子:
echo "hello world!" > test.txt #覆盖输出
echo -e "hello world!" >> test1.txt #追加输出
php crontab.php >> /data/wwwlogs/2022-02-27.log 2>&1
创建软链接 ln
类似于win下的快捷方式
主要针对于文件路径较长的文件夹建立一个软连接,方便访问
ln -s [实际路径] [链接路径]
例子:
ln -s /usr/local/php/php7.4 /opt/php74
其他应用场景:
像软件包升级,比如mysql之前是5.7,后面要升级到8.0,直接升级物理软件包,在用的时候,使用软连接就行。
创建别名 alias
主要针对于某个命令,如果这个命令的路径比复杂,或比较长,那么起别名,会很方便使用
alias la="ll -a" #设置命令别名,将ll -a设置为la
unalias la #取消别名
网络管理
- NAT模式下的虚拟机访问外网的流程
网络主机管理
查看IP
ifconfig
或者
ip addr
hostnamectl (centos7支持)
hostnamectl status 查看状态
hostnamectl --static 静态
hostnamectl --pretty 灵活态
hostnamectl --transient 瞬态
hostname (centos6和centos7都支持)
cat /etc/hostname 从配置文件查看hostname信息(centos7支持)
cat /etc/sysconfig/network 从配置文件查看(centos6支持)
//修改主机名称
hostname [newname] #只对当前的host有效
hostnamectl set-hostname [newname] #永久有效
vim /etc/hostname #永久修改配置文件
//清除主机名
hostnamectl set-hostname "" #清除主机名
DNS配置
1. vi /etc/NetworkManager/NetworkManager.conf
增加配置:dns=none
2. vi /etc/resolv.conf
增加DNS服务配置
nameserver ip地址
3. linux下本地dns的配置
vi /et/hosts
4. windows本地的dns的配置
C:\windows\system32\drivers\etc\hosts
netstat工具
netstat命令可以显示网络接口很多信息,包括打开的socket和路由表
-a (all) 显示所有选项,默认不显示LISTEN相关
-t (tcp) 仅显示tcp相关选项
-u (udp) 仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出有在listen(监听)的服务状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
- linux例子
netstat -nltp #表示显示只有在监听的tcp连接的程序,主要包含端口,进程号等。
netstat -nltp | grep 3306 #查看3306被那个进程使用
- mac例子
netstat -aln | grep 18308 #mac系列
netstat -lntup | grep 9000 #linux系列
telnet
- 端口能否连接
- 命令 telnet [ip地址] [端口号]
例子:
telnet 121.202.135.32 3306
lsof
- 查看端口使用情况
- 命令:lsof -i:[端口号]
lsof -i:3306 #查看mysql的端口号
lsof -i -P #查看所有当前打开的端口和相关进程
防火墙管理
- centos7系列
# 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
# 永久开启或关闭防火墙
systemctl enabled firewalld # 开机启动防火墙
systemctl disable firewalld # 开机不启动防火墙
#查询3306端口是否开放
firewall-cmd --query-port=3306/tcp
# 开放端口(需要重启防火墙),--permanent表示永久生效
firewall-cmd --zone=public --add-port=3306/tcp --permanent
systemctl restart firewalld #重启防火墙
# 关闭端口(需要重启防火墙)
firewall-cmd --remove-port=3306/tcp --permanent
systemctl restart firewalld #重启防火墙
#systemctl reload firewalld #重新加载防火墙
# 查看防火墙的端口号
firewall-cmd --zone=public --list-ports
- centos6系列
service iptables status # 查看防火墙的状态
service iptables start # 开启防火墙
service iptables stop # 关闭防火墙
chkconfig iptables off # 关闭防火墙开机自启动
chkconfig iptables on # 开启防火墙开机自启动
防火墙的作用,就是对某些端口进行开放和关闭,可以通过配置端口列表来进行
scp文件传输
- 从把文件上传到服务器
scp -v -P 43619 longhuimed.tar.gz root@ip地址:/repo/xxxx
scp [-v显示信息] [-P 端口号] [源文件] [远程服务器账号@远程服务器密码:路径]
- 从服务器下载文件到本地
scp -v -P 43619 root@ip地址:/opt/result.csv /Users/allen.huang/Desktop/docs
scp [-v显示信息] [-P 端口号] [远程服务器账号@远程服务器密码:路径] [本地路径]
启动级别
- 查看启动级别命令:
- runlevel (centos6)
- systemctl get-default (centos7)
- 启动级别配置文件:/etc/inittab
0 halt关机 #启动级别千万不要设置成这个启动级别,不然一开机就关机
3 没有桌面系统的多用户模式 #这个启动级别也是系统默认的
5 表示启动时,启动桌面系统(可视化界面系统)
6 reboot重启, #启动级别千万不要设置成这个启动级别,不然一开机就重启
例如我要以多用户命令行模式
init 3
如果要图形界面方式运行
init 5
或
startx
关机:
shutdown -h now
用户和组
- 用户是能够获取系统资源的 权限集合
- 用户组则是 权限的容器
- 举例说明
drwxr-xr-x #表示文件类型和权限,d开头的表示目录
数字 #表示链接数,如果是文件则是1,如果是文件夹则表示文件夹下的文件夹个数
第一个root #表示文件或目录的所有者
第二个root #表示所属组
数字 #表示文件大小
Mar 2 17:31 #表示创建日期
最后一栏 #表示目录名或文件名
用户
超级管理员root:具有使用系统所有权限的用户,其uid=0
系统用户:保障系统运行的用户,一般不提供密码登录系统,其UID为1-1000之间
普通用户:就是一般用户,其使用系统的权限受限制,UID在1000以上
与linux用户信息相关的文件有两个:分别是/etc/passwd(用户),/etc/shadow(密码)
- 查看/etc/passwd文件的内容,选取第一行
root:x:0:0:root:/root:/bin/bash
- root: 用户名
- x: 密码占位符,密码保存在shadow文件中
- 0:用户id,UID
- 0: 用户组id,GID
- root:注释信息
- /root: 是用户的宿主目录,普通用户是在/home/xxx
- /bin/bash:用户默认使用shell类型
- 查看/etc/shadow文件的内容,选取root的秘闻
root:$1$jMeykmSV$Zv/yyHSlcrcwoQ16Mp05n1:19012:0:99999:7:::
- 上面表示的是root用户后面跟了加密后的密文
用户组概念
- 系统组:一般是加入一些系统用户的组
- 普通用户组:可以加入多个普通用户
- 私有组/基本组:当创建用户时,如果没有为其指定所属组,则就为其定义一个私有的用户组,其名称和用户名相当,当把其他用户加入到改组中则变成了普通用户组。
- 与linux相关的用户组有两个配置文件:分别是/etc/group,和 /etc/gshadow
- 查看文件/etc/group文件内容 bigdata:x:1005:spark,hadoop
- bigdata: 组名
- x:组密码占位符,一般是没有密码
- 1005:组id
- spark,hadoop: 该用户组下的用户信息
用户组的相关命令
- 添加用户组
groupadd [组名称]
例子:groupadd bigdata
- 删除用户组
groupdel bigdata
- 查看有哪些用户组
cat /etc/group
- 添加用户到组
命令:gpasswd -a [username] [groupname]
gpasswd -a vgrant docker
用户的相关命令
linux中的用户管理主要涉及到用户账号的添加,修改和删除,所有操作都影响/etc/passwd中的文件内容
- 添加用户:useradd [选项] [用户名]
- useradd hadoop
- useradd spark
- 为用户设置用户组 usermod -G [用户组] [用户]
- usermod -G bigdata spark
- usermod -G bigdata hadoop
- 设置密码:
- passwd spark
- 修改用户
- usermod -G root,bigdata spark #将用户spark添加到bigdata和root用户组中去
- 查看用户组的信息
- groups spark
- 删除用户 userdel [参数] [用户名]
- userdel -r spark #加r,表示把用户和用户组的主目录都删除掉
配置sudo权限
有时候是为了给普通用户拥有更多的权限去做更多的事情,可以通过在/etc/soders给此用户配置下权限,就可以拥有更多操作权限了,当然普通用户毕竟不是root用户,不会有百分百的操作权限。
- 操作命令:
- visudo 或 vi /etc/soders
- 添加 "用户名 ALL=(ALL) ALL"
- 例如给hjc这个用户添加root权限:
- hjc ALL=(ALL) ALL
- 给普通管理员授权后举例说明:
- sudo systemctl start firewalld #普通管理员在执行一些服务时,前面加入sudo表示使用root权限
- 注意,普通管理员最好不要去使用超管的权限
切换用户
如果是普通用户切换到root用户,需要输入root密码
- sudo -i # 切换到root用户,这样的好处是不用每次输入密码,在执行某些服务的时候
- su [用户名] # 切换到某个用户,如果不带用户名,切换到root用户
- exit 退出某个用户
用户权限详情
每个文件和目录的使用者分为3个组
- 文件和目录的所属组
- 同i个组下面的人
- 其他组的人员
文件的操作权限有3个
- 可读
- 可写
- 可执行
linux文件权限的描述格式解读
d rwx r-x r-x 用法二进制来描述,111 101 101 权限的大小是0755。
如下图所示:
- d 表示目录,如果是l表示链接文件,-表示文件
- 第一组rwx,表示文件拥有者对它的权限,是可读可写可执行,同时它用字母来表示是u
- 第二组r-x,表示所属组下面的用户,可读,不可写,可执行,字母表示g
- 第三组r-x, 表示其他组的人,也是可读,不可写,可执行,字母表示o
人员标识
- a 所有人
- u 所有者
- g 所属组
- o 其他组的
权限的文字设置方法:
- “+” 表示添加权限
- “-” 表示删除权限
- = 表示分配权限,同时删除旧权限
权限字符:
- r 表示可读
- w 表示可写
- x 表示可执行
例子:
将下面testdir下的所属组,其他组的成员只设置只读权限
chmod o-x testdir #其他组成员设置只读
chmod g-x testdir #所属组成员设置只读
其他用户cd的时候因为没有可执行权限,所以进不去
对所有人加上所有权限
chmod a+x testdir #所有组加上可执行权限
其他用户可以进去了。
也可以把这个目录的所有组成员设置成可读可写可执行
chmod a+rwx testdir #等同于数字0777
压缩打包
压缩
压缩的目的是让文件空间变小,对于某些文件比较大,但又不是常用的,可以进行压缩。
- 命令:gzip [-rv] [源文件名]
它只对文件进行压缩,不能对目录操作,-r表示对目录下的文件进行递归压缩,-v表示显示压缩的过程
压缩完成后,源文件不存在了。
gzip abc.txt #压缩后编程了abc.txt.gz
解压缩
- 命令 gzip -d [.gz压缩文件]
- 命令 gunzip [.gz压缩文件]
gzip -d abc.txt.gz
gunzip lnmp-install.log.gz
打包
打包,是指把若干个文件进行归档在一起,他和压缩一起使用
参数说明:
-
z:gzip,通过gzpi进行压缩或者解压缩
-
c:create 创建压缩文件
-
x:extract 解压缩文件
-
v:verbose 显示过程
-
t:list 显示文件列表
-
命令 tar [参数] [包名称] [源文件/目录]
1.将linux目录打包并压缩
tar -zcvf linux.tar.gz linux
2.将linux目录下的特殊文件或目录
tar -zcvf linux.tar.gz linux/ --exclude=*.sh
tar -zcvf thinkphp6.tar.gz thinkphp6/ --exclude=uploads --exclude=.svn --exclude=logs
3.查看打包后的内容
tar -tvf linux.tar.gz
解包
- 命令 tar [-zxvf] [包名称] [-C] [目标目录]
tar -zxvf linux.tar.gz #解压到当前目录,如果目录已经存在,就会被覆盖。
tar -zxvf linux.tar.gz -C testdir #将linux.tar.gz解包到testdir目录
服务管理
centos6:
- chkconfig --list #查看服务列表
- service start|restart|stop|status [服务名称]
centos7:
- systemctl list-unit-files #查看服务列表
- 服务状态说明:
- enabled:开机自启动
- disabled:开机不启动
- static:enabled服务启动时需要同时启动的依赖服务,也是开机启动
- active:活跃的
- invalid:无效的
systemctl list-unit-files | grep enabled #显示开机启动的服务
systemctl list-unit-files | grep mysql #查看mysql
systemctl list-unit-files --type=service #列出所有的service
- systemctl服务操作
- systemctl status|start|stop|restart|enable|disable 服务名
systemctl status 服务名
systemctl start 服务名
systemctl stop 服务名
systemctl restart 服务名
systemctl eanble 服务名
systemctl disable 服务名
systemctl --failed #显示启动失败的服务
systemctl daemon-reload #在修改了配置之后,有的服务会提示需要重新加载
磁盘挂载
设备本身不能直接被访问,需要挂载到指定的目录下,如果在挂载到已经存在数据的目录,那么之前的数据就会被覆盖掉。所以在挂载时,最好是没有数据的空目录。
- 挂载命令:mount [设备名] [目标目录]
- 这个挂载命令有个缺点,就是在系统重启后,磁盘就会丢失。所以需要去/etc/fstab里面修改配置
- 挂载光驱
mount /dev/cdrom /mnt/cdrom
- 挂载硬盘
mount /dev/vdb1 /data
- 开机自动挂载硬盘
/dev/vdb1 /data ext4 defaults 1 1
日期
- 命令 date [参数]
#格式化显示日期
date '+%Y-%m-%d %H:%M:%S'
# 校对时间和阿里云同步,参数-u表示跨过防火墙一样
ntpdate -u ntp1.aliyun
# 由于服务器时间需要实时同步,所以定期进行一个校对,每隔30分钟执行一次
*/30 * * * * /usr/sbin/ntpdate -u ntp1.aliyun >/dev/null &
软件安装
安装方式
- 二进制发布包
- RPM类似于windows下的exe文件,通过命令安装
- yum在线安装,先从centos官网(yum源头)下载二进制rpm包,然后自动安装
- 源码包,编译安装
yum安装
- yum源检查
yum repolist
- yum安装
yum -y install [软件名]
- yum更新(尤其是在生产线上,没事别乱更新,因为涉及到操作系统版本不一样,那么更新源就会有兼容问题)
yum -y update [软件名]
rpm安装
-
命令选项
-i:安装
-v: 显示安装过程
-h:使用"#"显示过程
-U:升级
-e:卸载
-q:查询
-a:冲突
–force:强制安装,即使覆盖其他包的文件也要安装
–no’deps:不检查依赖 -
最常用的
rpm -qa 查询是否已经安装
rpm -ivh 安装
rpm -e --nodeps 卸载不检查依赖,强制卸载,这种方式适用于旧的版本卸载,用新的版本
#查询是否已经安装了mysql
rpm -q | grep mysql
#安装mysql8.0
rpm -ivh mysql-community-common-8.0.22-1.el8.x86_64.rpm
#卸载mysql8.0
rpm -e --nodeps mysql-community-common-8.0.22-1.el8.x86_64.rpm
源码包安装
1. 下载解压
wget [应用名称]
tar -zxvf [包] -C [指定目录]
2. 编译前,先安装一些依赖包
yum -y install [应用1] [应用2]... #常用的像gcc, autoconf等等
3. 进入到源码包中,编译
./configure --prefix=[指定安装的目录下] # 这个是存在configure文件的时候使用
或
make && make test
4. 安装
make install PREFIX=[指定安装的目录] #如果./configure时已经制订了,那么就不用再指定目录了
源码包卸载
比如要卸载老的 python3环境,可以先找到相关的 python的依赖,然后再执行删除
whereis python3 | xargs rm -frv
进程管理
概念
进程是程序执行的过程,是一个程序在其自身的虚拟地址空间中的一次执行活动,相对于程序,进程是动态的,在linux中,他与用户权限相关,程序和进程并不是一一对应,一个程序可能应对多个进程。
进程类型
-
交互进程:由一个shell启动的进程,交互进程即可以在前台运行,也可以在后台运行。
# 在终端连接mysql,redis都是属于交互进程 mysql -u root -p123456 # 连接redis redis-cli -h 172.34.28.35 -p 6379 -a 123456
- 批处理进程:不与特定的终端相关联,提交到等待队列中顺序执行。
一系列需要执行的任务
- 守护进程(Daemo):在linux启动的初始化,一直运行于后台的进程,其实就是所谓的服务
守护进程是计算机启动时运行的,并在系统中持续运行的进程,它等待着随时为用户提供自身负责的服务。
由于此类程序运行在后台,除非程序异常终止或认为终止,否则他们将一直运行下去直到系统关闭。
linux中的守护进程(Daemon)在windows中被称作"服务"。- 查看系统当前的守护进程:
在linux下,进程由psmisc工具来进行管理,其包概括ps,kill,fuser,pstree等命令,其更方便的管理linux操作系统。
#安装pstree的组件,psmisc yum -y install psmisc #在使用pstree前需要看有没有安装psmisc #查看所有守护进程树 pstree #查看某个进程下的子进程 pstree -halps 2528
- 守护进程的工作原理
> 守护进程的工作就是打开一个端口,并且等待并监听进入的链接,如果客户提了一个连接,守护进程就创建(fork)子进程来响应此连接,而父进程继续监听更多的服务请求,因此,每个守护进程都可以处理多个客户的请求。
> 命令:
nohup [执行命令] [脚本名] &
```
nohup sh /data/shellcode/test.sh & #以后台的方式运行
nohup php task.php & #以后台的方式运行,并且默认在当前目录下产生nohup.out
```
进程的启动方式
- 手动启动
- 调度器动
进程的工作原理图
进程查询ps命令
- a:显示所有用户的进程
- u:显示用户名和启动时间
- x:显示所有进程,包括控制终端的进程
- e:显示所有进程,包括控制终端的进程,较X选项,信息更为简略
- l:显示进程详细信息,按长格式显示
- f:显示进程数
常用命令:
以下两种方式差别不大,推荐使用aux
ps -ef | grep mysql #显示mysql的进程,显示进程树
ps -aux | grep redis #显示redis的进程
- 进程终止kill命令:
为什么要杀死进程:
- 该进程占用了过多CPU的时间或超出运行时间
- 该进程锁住了一个终端,使得前台进程无法运行
- 运行时间过长,但没有达到预期效果
- 产生了过多到屏幕或磁盘文件的输出
- 无法正常退出
- 常用命令
- kill pid 直接杀死进程,但不能保证一定会被杀死
- kill -9 pid 强制杀死进程,请慎用
- kill -15 pid 建议用这个安全删除,程序有个善后工作
- pgrep [程序名] 模糊查找进程中的程序显示其pid
- pidof [程序名] 精准查找进程中的程序显示其pid
- pkill [程序名] 匹配出程序,并将其杀死
pgrep redis #找出redis的进程号
kill -15 955 #杀死redis的进程号
pkill redis #找出redis,并将其杀死
pkill mysql #找出mysl,并将其杀死
- 进程切换
- 前台进程指的是进程在执行时,会将命令进行阻塞,直到进程执行完毕,后台进程指的是进程在执行时,不会阻塞当前命令行,而是在系统后台执行。
- ctrl+c 进程终止
- ctrl+z 挂起进程
- fg 将进程转换到前台运行
- bg 将进程转换到后台运行
- jobs 查看任务
- 进程之内存管理
top命令,可以查看系统进程运行的情况,哪些是进程的CPU,内存占用比较高,可以参看物理CPU,内存的大小
htop命令,除了有top功能,还可以可以筛选指定进程,快捷键F3搜索,F4过滤
free -m 可以查看内存的情况
审计工具
linux下监控 文件被什么进程修改、删除,审计工具auditd
- auditd 是后台守护进程,负责监控记录
- auditctl 是配置规则的工具
- auditsearch 搜索查看
- aureport 根据监控记录生成报表
比如监控文件/root/.ssh/authorized_keys是否被修改过
auditctl -w /root/.ssh/authorized_keys -p war -k auth_key
- -w 指明要监控的文件
- -p awrx 要监控的文件操作类型,append,write,read,execute
- -k 给当前这条监控规则取名为auth_key,生成报表authreport
计划任务
- 命令:crontab [-l|-e] [-u 服务器用户名],默认是按root用户匹配值
通过crontab命令,我们可以在指定的时间执行指定的系统指令或shell脚本,时间间隔可以是分钟,小时,日,月,周以及以上的任意组合,这个命令非常适合用于周期性的日志分析或数据备份工作- 安装服务
yum -y install crontabs- 检查服务
systemctl status crond- 开机自启动
systemctl enable crond- crontab配置的任务存储:/var/spool/cron/服务器用户名
- 计划任务配置规则
crontab -l -u root #查看root下面的计划任务
crontab -e -u root #编辑计划任务,默认都是用root用户
- 配置规则采用 分、时、日、月、周来进行
文本处理
wc命令
统计文本长度
- 命令的常用选项
-l 统计多少行
-w 统计字数
-c 统计文件字节数,一个英文字母1字节,一个汉字占2-4个字节(根据编码)
-m 统计文件字符数,一个英文字母1个字符,一个汉字1个字符
-L 统计最长行的长度,也可以统计字符串的长度
– version 显示版本号
wc test.txt #统计文本的信息
echo "hello,world!" | wc -L #统计字符串的长度
wc -l | test.txt #统计文件行数
wc -w test.txt #统计文件字数
wc -m test.txt #统计文件字符数
sort命令
功能:对文本进行排序,默认对整列有效
常用可选项:
-f;忽略字母大小写,就是将小写字母视为大写字母排序
-M:根据月份比较,比如JAN,DEC
-h:根据易读的单位大小进行比较,比如2K,2G
-g:按照常规数值进行比较
-n:根据字符串数值进行比较
-r:倒序排序
-k:根据列的位置1,位置2的关键字进行排序,用都好隔开,位置1开始,位置2结束
-t:指定分隔符
-u:去重复行
-o:讲结果写入文件
- 以sort.txt的文本内容举例说明
aaaa:10:1.1:1:one
bbbb:20:2.1:2:two
cccc:30:3.1:3:three
cccc:30:3.1:4:four
dddd:40:4.1:5:five
eeee:50:5.1:6:six
ffff:60:6.1:7:seven
gggg:70:7.1:8:nine
hhhh:80:8.1:10:ten
bbbb:20:2.1:11:eleven
- 实例1:将文本的第二列按数字进行排序
sort sort.txt # 直接排序将整行当做一个字符串排序,默认按ASCII值排序
sort -t ":" -nk "2" sort.txt # 第二列内容顺序排列
sort -t ":" -rnk "2" sort.txt # 第二列内容倒序排列
- 实例2:通过去重排序
sort -t ":" -rnk "3" -u sort.txt # 第三列内容倒序排序,加入-u参数是为了去重
- 实例3:通过数值排序,以:分隔符,第2,3列倒序排,第4列顺序排
sort -n -t: -rk2,3 -k4 sort.txt
uniq命令
- 功能:去除重复行,只会统计相邻的,和sort配合使用
- 常用选项:
-c:打印出现的次数
-d:只打印重复行
-u:只打印不重复行
-D:只打印重复行,并且把所有重复行打印出来
-f N:比较时,跳过前N列
-i:忽略大小写
-s N:比较时,跳过前N个字符
-w N:对每行第N个字符以后的内容不做比较
- 以unique.txt举例说明:
abc
abc
abd
etfed
etfee
abd
defhijk
www.baidu
www.sina
mail.sina
- 实例1:直接去重:
uniq unique.txt # 只去重相邻的
- 实例2:打印出现的次数
sort unique.txt | uniq -c #由于是只去重相临的行,所以一般和sort命令一起使用
- 实例3:打印重复行,并显示出现的次数
sort unique.txt | uniq -d -c
- 实例4:只打印不重复的行
sort unique.txt | uniq -u
- 计算两个文本的交集,a.txt,b.txt进行操作
- a.bxt的内容
a
b
c
d
- b.txt的内容
c
d
e
f
- 计算a.txt和b.txt的交集内容
cat a.txt b.txt | sort | unique -d # 就是显示两个文本的重复内容
- 计算a.txt和b.txt的并集内容
cat a.txt b.txt | sort | unique # 就是合并两个文本的内容,并去重
- 计算a.txt和b.txt的差集内容
cat a.txt b.txt b.txt | sort | unique -d # 就是a.txt - b.txt的内容
cat b.txt a.txt a.txt | sort | unique -d # 就是b.txt - a.txt的内容
cut命令
- 功能:分割文本内容
- 用选项:
-d:后面是接分隔符,与 -f一起使用
-f:根据-d的分隔符将一段信息取出来分割成好几列,用-f就是取出来第几列的意思
-c:按照字符截取
-b:按照字节截取
- 以截取环境变量来进行说明
echo $PATH | cut -d ":" -f 2- #获取环境变量第二列以后的数据
echo $PATH | cut -d ":" -f 1-3,5 #环境变量按:截取,并获取1,3,5列的数据
find命令
- 功能:搜索文件目录的层次结构
- 格式:
find [文件路径] [-选项] [表达式]- 常用可选项
-name:根据文件名查找,支持(*,?等通配符)
-type:根据文件类型查找,c-字符设备文件,b-块设备文件,l-链接文件,d-目录
-perm:根据文件权限查找,比如0755
-user:根据文件拥有者查找
-group:根据文件所属组查找
-size:根据文件大小查找
-o :表达式 或
-a:表达式 且
-not:表达式 非
- 例子1:
从/home/wwwroot找所有扩展为.log的文件,并找出包含"ERROR"的行, xargs是表示输出的意思
find /home/wwwroot -type f -name "*.log" | xargs grep "ERROR"
- 例子2:
#从当前目录下找出所有扩展为.ini文件,并找出包含"nginx"的行
find ./ -type f -name "*.log" | xargs grep "nginx"
- 例子3:
从当前目录下搜索含有名称为linux的目录或文件,包括目录的子目录,文件的递归查找,并且忽略大小写
find ./ -iname "*linux*"
- 例子4:
从/data/test目录下搜索含有.txt或.log文件
find /data/test/ -iname "*.log" -o -iname "*.txt"
grep文本搜索
- **功能:**文本搜索工具,他能使正则表达式搜索文本,并且把匹配的行统计出来,过滤数据流或文件内容
- 命令格式:
grep [选项] --color[=auto] “搜索字符串” filename- 常用参数:
-c:统计符合条件的总行数
-E:支持正则表达式
-i:忽略字符大小写
-n:在显示匹配到的字符串前面加上行号
-v:显示没有匹配内容的那N行
-l:列出文件内容中匹配到的文件名称
-o:只输出文件中匹配到的部分
–color[=auto]:将匹配到的字符串高量出来- 持正则表达式:
^word 搜索以word开头的
*wordKaTeX parse error: Expected group after '^' at position 15: ** 搜索以word结尾的 ^̲ 搜索空行
. 表示任意字符
\ 转义字符,例:"."只代表点的本身
. 匹配所有字符,^.*表示以任意字符开头
[word] 匹配字符集内的任意一个字符
[^word] 匹配不包含后的任意字符的内容。中括号的表示取反
a{n,m} 重复n到m次
- 以sort.txt举例说明:
aaaa:10:1.1:1:one
bbbb:20:2.1:2:two
cccc:30:3.1:3:three
cccc:30:3.1:4:four
dddd:40:4.1:5:five
eeee:50:5.1:6:six
ffff:60:6.1:7:seven
gggg:70:7.1:8:nine
hhaa:80:8.1:10:ten
bbbb:20:2.1:11:eleven
- 统计符合条件的行数
grep -i -c "one" /data/test/sort.txt #并且忽略大小写
- 查看不包含cccc的内容
grep -i "cccc" -v /data/test/sort.txt
- 查看以b开头的内容
grep -i ^b /data/test/sort.txt
- 查看包含有aa的内容
grep -i .*aa.* /data/test/sort.txt
- 输出匹配行的前N行
grep -B 2 "aa" /data/test/sort.txt
- 输出匹配行的后N行
grep -A 2 "aa" /data/test/sort.txt
- 输出匹配行的前后N行
grep -C 1 "aa" /data/test/sort.txt
- 输出以h开头,a结尾的
grep -i "h.*a" /data/test/sort.txt
ack快速查找
这是一个第三方工具,可以递归查找,速度比grep快很多,是基于perl编写,如果在服务器没有,可以安装
安装:yum -y install ack (如果yum源没有,也可以源码包安装)
使用:ack [-文字匹配规则] [–分组整合] [–文件类型] [搜索关键词] [目录文件路径]
- 例子1:
搜索从sohuole_new目录中的php文件搜索带有souhol内容,并分组展示出搜索结果
ack -w --group --php "souhol" /data/wwwroot/suohuole_new
- 例子2:
从nginx配置目录中的conf文件中带有local.test内容,并分组展示
ack -w --group "local.test" /usr/local/etc/nginx/vhost/*.conf
sed命令
- 功能:
sed叫做流编辑器,在shell脚本和makefile中作为过滤,使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一些列编辑命令转换成另一个格式的输出。
sed是一种在线编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把内容发送到屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用 “-i” 选项进行覆盖输出。- 选项:
-i:用sed的修改结果直接覆盖读取数据的文件,而不是输出到屏幕(这个是要慎用)
-n:一般sed命令会把所有数据都输出到屏幕,如果加入-n的话,则只会把经过sed命令处理的行输出到屏幕,和p一起使用
-f :用指定的script文件来处理输入的文本闻不见
-e:允许对输入数据应用多条sed命令编辑- 命令行参数
a:在当前行后面追加文本
i:在当前行前面插入文本
s:替换指定字符
c:选定行或段落改为新的文本
p:打印,输出指定行
d:把某一行删除,但不删除源文件- 调用sed命令有两种选项:
sed [选项] [命令] [文件]
sed [选项] -f [脚本文件] [文件]
- 举例说明
示例文档sed.txt
hello,huangjinchao
hello,world! hi,world! hello.
abcd
efjh
123456
098765
qwert
abcdeft
test111
sedtest
- 删除
sed '2d' sed.txt #删除第二行
sed '2,$d' sed.txt #删除第二行到末尾的所有行
sed '$d' sed.txt #删除最后一行
sed '/abc/d' sed.txt #删除带有abc的行
sed '/[a-zA-Z]/d' sed.txt #删除带有字母的行
sed '/[0-9]/d' sed.txt #删除带有数字的行
- 整行替换"c"
sed '2c hjc' sed.txt #将第2行替换成hjc
- 字符串替换"s"
sed 's/hello/hi/g' sed.txt #将hello替换成hi,全局替换
sed 's/hello/hi/2' sed.txt #将每一行的第2个hello替换成hi
sed 's/hello/hi/2g' sed.txt #将每行第2个以后的hello替换为hi(包括第2个)
sed -n 's/^hello/hi/gp' sed.txt #将每行以hello开头的全局替换成hi,并且只打印改变的行,-n,p是一起使用,-n表示统计只发生改变的行,p表示打印
sed -n '2,4p' sed.txt #打印第2到第4行
sed -n 's/hello/&-hi/gp' sed.txt #将每行的hello改成hello-hi,并且只打印改变的行。&表示引用搜索的那个字符串,就是正则里面的反向引用
sed -n 's/^hello/[&]/p' sed.txt #将每行以hello开头的,替换成带上[]号,就是替换成[hello]
sed 's#hello#hi#g' sed.txt 只要紧跟着s命令的都被认为是新的分隔符,所以,'#'在这里是分隔符代替了默认的'/'分隔符,表示所有的hello替换成hi
- 范围查找
sed -n '/123/,/test/p' sed.txt #打印从含有第一个123的行 到 含有第一个test的行
sed -n '3,/test$/p' sed.txt #打印从第三行开始,到以test结尾的行
sed -n '/^hello/,/111$/p' sed.txt #打印从hello开始,到以hello结尾的行
sed -n '/^hello/,/456$/s/$/www/p' sed.txt #先找到以hello开头,到包含456结尾的行,并且每行末尾用www进行替换,并打印。
sed -n '/^hello/,/456$/s/^/~_~/p' sed.txt #先找到以hello开头,到包含456结尾的行,并且每行末尾用~_~进行替换,并打印。
sed -n '/[^abc]/s/[0-9]/8/gp' sed.txt #将没包含abc的字符串中把带有数字的都全局替换成8,并且打印
sed -n '/^[a-zA-Z]/s/test/TEST/gp' sed.txt #将以字母开头的,将test改成TEST,并且打印出来
- 从一个文件读取内容
sed -n '/hello/r test.txt' sed.txt #将test.txt的文件读出来,并且拼到hello的行
- 从文件找到匹配的内容写入到新的文件
sed -n '/hello/w hello.txt' sed.txt #将匹配hello的内容写入到hello.txt
sed -n '/hjc/w hello.txt' sed.txt #将匹配hjc的内容写入到hello.txt
- 内容追加
sed '/test/a\\hjc' sed.txt #将带有test的行追加hjc字符串的一行,a后面需要加\\转义
- 内容插入
sed '/test/i\\hjc' sed.txt #将带有test行插入hjc字符串的一行。i后面需要加\\转义
- 在源文件中直接进行写入
sed -i '/test/a\\hjc' sed.txt #将带有test的行 追加hjc字符串的一行,并写入到文件
- 执行多个sed命令
sed -e '1,3d' -e 's/test/Test/g' sed.txt #每个操作用-e分组,这个意思是1-3行进行删除,并且带有test替换成Test
命令行快捷操作
光标快速切换:
ctrl+a : 切换至行首
ctrl+e : 切换至行尾
ctrl+k : 删除光标所在处至行尾的字符
ctrl+u : 删除当前光标前面的字符
ctrl+y : 粘贴最后一次被删除的单词
Tab:命令行自动补全。
结尾
本套内容总结,是根据centos7.x来的,不足之处还望见谅,还望多多指出建议,后续再改进
版权声明:本文标题:linux基础学习笔记 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725871031a1046232.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论