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