核心命令

发布时间 2023-11-15 20:35:14作者: mikrokosmo

核心命令

查询网站

命令查询网站

帮助命令

help获得shell内置命令帮助信息

man获得帮助信息

文件目录类

ls

ls # 列出可见文件
ls -l # 列出可见文件详细信息
ls -al # 显示隐藏文件

cd

cd # 切换目录
cd ~ # 切换到用户主目录
cd - # 回到上次目录
cd .. # 返回上一级目录

cp

cp # 拷贝文件
cp -r # 递归

mv

mv oldfile newfile

mkdir

mkdir -p # 递归

rm

rm -rf # 强制删除

touch

touch # 创建文件
touch test{1..100}.txt # 批量创建 

file

file # 查看文件属性信息
-b # 不显示文件名称
-i # 显示mime类别
[root@mysql ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped

tree

tree # 树形显示文件目录
tree -L # 限制目录显示层级

md5sum

md5sum file # 生成md5值

文件内容

vi/vim

vim # 编辑文本工具
1、 VIM模式
切入命令模式使用冒号的时候:
:
w 保存  write
u 撤销  undo  保存之前
q 退出  quit
! 强制  

2、VIM快捷键
1)普通模式:
1.移动光标
cat /etc/passwd >oldboy.txt
G  文件结尾
gg 文件开头
$  行尾
0  行头
ngg     切换到第n行
n[回车] 移动n行

3、搜索和替换
/内容 向下搜索,此时按n继续搜索,N反向继续搜索。
?内容 向上搜索,此时按n继续搜索,N反向继续搜索。
:%s/A/B/g,把A替换成B,如果A或B中有斜线,把分割的斜线换#或@
   s为替换,g全局替换
:n1,n2s/A/B/g	n1、n2为数字,在第n1行和n2行间寻找A,用B替换
 
4、复制、粘贴 删除
yy  复制当前行
nyy 复制从当前开始的n行
p   粘贴到光标的下一行
P   粘贴到光标的上一行
dd  删除当前行
ndd 删除从当前行开始的n行
x   删除光标后字符
X   删除光标前字符
u   撤销

d1gg  d1G 删除当前行至第一行
dG	删除当前行至最后一行
d0	删除当前光标文本至行首
d$	删除当前光标文本至行尾

进入编辑模式命令
i	在当前光标所在处插入文字
A	在当前所在行的行尾最后一个字符处开始插入文字,和I相反
I	在当前所在行的行首第一个非空格符处开始插入文字,和A相反
O	在当前所在行的上一行处插入新的一行
o	在当前所在行的下一行处插入新的一行

 
命令模式
:set nu   显示行号
:set nonu 取消行号

编辑文件同时定位到102行。
vim /etc/sudoers +102

cat

cat # 查看文件内容
cat -n # 显示行号
# 追加内容
cat > 1.txt <<EOF
a
b
c
EOF

more

# 文件内容分屏查看器
more smartd.conf
空白键 下翻一页
enter 下翻一行
q	代表立刻离开 more ,不再显示该文件内容
Ctrl+F	向下滚动一屏
Ctrl+B 	返回上一屏
=	输出当前行的行号
:f 	输出文件名和当前行的行号
# 显示文件头部内容
head -n 5 filename
# 显示文件最新追加的内容,监视文件变化(ctrl+s暂停;ctrl+q开启)
head -f filename

tail

# 显示文件尾部内容
tail -n 5 filename

排序

sort

# -n 按数字排序
# -t 指定分隔符
# -k 指定列
# -r 倒序
[root@xiaowang ~]# sort test.txt
[root@xiaowang ~]# sort -n -t. -k4 test.txt > 1.txt # ip排序

uniq去重

# uniq(只是打印出来的去重,源文件没变)
# -c 计数(相邻行)

# 统计下面test.txt中各网址出现的次数。
http://www.etiantian.org
http://blog.etiantian.org
http://www.etiantian.org
http://blog.etiantian.org
http://www.etiantian.org
http://bbs.etiantian.org
http://www.etiantian.org
http://bbs.etiantian.org
# 答案
[root@xiaowang ~]# sort test.txt | uniq -c

wc计数

cat file|wc -l

tr

tr # 将字符进行替换压缩和删除
-d # 删除所有属于第一字符集的字符
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world

vimdiff

vimdiff和diff# 查看文件差异
# vimdiff更直观

dos2unix

# 将DOS格式⽂本⽂件转换成Unix格式
dos2unix file

压缩和解压

tar

tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
	-c 产生.tar 打包文件
    -v 显示详细信息
    -f 指定压缩后的文件名
    -z 打包同时压缩
    -x 解包.tar 文件
    -C 解压到指定目录

gzip/gunzip

gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)

zip/unzip

zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
	-r 压缩目录
	
unzip [选项] XXX.zip (功能描述:解压缩文件)
	-d<目录> 指定解压后文件的存放目录

信息显示类

uname

uname # 显示操作系统信息,例如内核版本、主机名、处理器类型等
-a # 显示全部信息
-r # 显示内核版本号
-n # 显示主机名

hostname

hostname # 显示主机名
hostnamectl set-hostname newhostname # 修改主机名

date

date +%Y-%m-%d\ %H:%M:%S
date +%F\ %T
date -s "2030/5/14"          #修改日期
date -s "2030/5/14 23:45:12" #修改时间
clock -w #写到bios永久生效。

stat

stat 以文字的格式来显示 inode 的内容

用户管理类

useradd

# 添加新用户
-u # 指定uid
-g # 指定属组
-e # 指定过期时间
-d # 指定家目录
-M # 不创建家目录
-s # 指定登录的解释器

passwd

# 设置用户密码
passwd 用户名 (功能描述:设置用户密码)
# --stdin 从标准输入获取信息

id

# 查看用户是否存在
id 用户名

su

# 切换用户
su 用户名称 (切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (切换到用户并获得该用户的环境变量及执行权限)

who

# 查看登录用户信息
(1)whoami (功能描述:显示自身用户名称)
(2)who am i (功能描述:显示登录用户的用户名以及登陆时间)

sudo

# 设置普通用户具有root权限
修改配置文件
visudo  # 等同于vim /etc/sudoers。区别:visudo检查语法,vim /etc/sudoers不检查语法(vim -c是检查语法)

userdel

# 删除用户
(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)
(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
-r 删除用户的同时,删除与用户相关的所有文件。

usermod

# 修改用户
usermod -g 用户组 用户名
-g 修改用户的初始登录组,给定的组必须存在。默认组 id 是 1。

w、whoami

# w 当前的在线用户
[root@localhost ~]# w
 17:52:58 up  7:09,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
xiaowang pts/0    192.168.79.1     10:43    2.00s  0.02s  0.04s sshd: xiaowang [priv]
[root@localhost ~]# whoami
root

last

# 查看系统的登录次数

用户组管理

groupadd

# 新建组
groupadd 组名

groupdel

# 删除组
groupdel 组名

groupmod

# 修改组
groupmod -n 新组名 老组名

/etc/group

# 查看创建了哪些组
cat /etc/group

修改权限

chmod

# 改变权限
chmod 644 file

chown

# 改变所有者
chown -R root:root file

chgrp

# 改变属组
chgrp root file

权限

chattr、lsattr

chattr给文件加特殊属性
a 只能追加内容,不能删除
i 不能修改,不能删除

lsattr查看chattr设置的属性

搜索查找类

find

find 路径 选项
# 时间
- mtime  天
- mmin 分钟

- name
- type

# 权限
- perm 
linux文件系统每个文件都有三种时间戳:
访问时间:atime/天 amin/分钟
修改时间:mtime/天 mmin/分钟
变化时间:ctime/天 cmin/分钟

locate

# 快速定位文件路径
# 是通过locate数据库快速定位
locate 搜索文件

which whereis

[root@shell ~]# which locate # 查找并显示给定命令的绝对路径
/usr/bin/locate

[root@shell ~]# whereis locate # 查找二进制程序、代码等相关文件路径
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz

网络操作类

ifconfig

# 查看和设置网卡
ifconfig
ifconfig eth0 down
ifconfig eth0 up
ifconfig eth0:1 10.0.0.1/24

netstat

# netstat查看网络状态
-l	监听状态
-n	以数字显示
-t	tcp协议
-u	udp协议
-p	显示进程名
-a	所有状态
-r  显示路由
netstat -lntup #查看端口
netstat -rn    #查看路由
netstat -an    #查看所有接口和网络状态

# ss(同netstat)
-x	unix sock相关
-e	扩展的信息
-s  显示Sockets摘要
-r  解析服务名称
-m  显示内存情况

ping

# 检查网络是否通畅
ping www.baidu.com

route

# 路由表管理
route -n
# 添加路由
route add  [-net|-host|default]  target [netmask Nm] [gw GW] [[dev] If]
-host   主机路由(两台主机之间配置)
-net    网络路由
default 默认路由

telnet

# 检测服务有没有打开该端口
telnet IP地址 端口

nc

文件传输、端口检查工具

ssh

# 远程连接linux
ssh -p 端口 用户@ip
# 远程执行命令
ssh ip 命令

scp

# 远程全量拷贝
-P 端口
-r 递归
-p 保持属性
-l 限制速度
# 推
scp -P 22 -rp /data root@10.0.0.7:/tmp/
# 拉
scp -rp 10.0.0.7:/tmp/etc /tmp

wget

# wget下载文件
wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080 # 以指定名称保存

nslookup

# 查询域名DNS信息
nslookup www.baidu.com

# 本机dns配置文件/etc/resolv.cnf

dig

# 域名查询
dig www.baidu.com

traceroute

# 路由追踪
-m 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
traceroute -n www.baidu.com
#实例

1、默认启动

tcpdump -vv		#普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2、过滤主机

tcpdump -i eth1 host 192.168.1.1		#抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据

tcpdump -i eth1 src host 192.168.1.1	#指定源地址,192.168.1.1

tcpdump -i eth1 dst host 192.168.1.1	#指定目的地址,192.168.1.1

3、过滤端口

tcpdump -i eth1 port 80			#抓取所有经过eth1,目的或源端口是80的网络数据

tcpdump -i eth1 src port 80		#指定源端口

tcpdump -i eth1 dst port 80		#指定目的端口

4、协议过滤

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 udp

tcpdump -i eth1 icmp

#抓tcp某端口的数据包

tcpdump -i eth0 tcp port 21 -nn

5、常用表达式

非 : ! or "not" (去掉双引号) 

且 : && or "and" 

或 : || or "or"

#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

mtr

# 使用ping命令测试出现丢包或不通时,可以通过MTR等工具进行链路测试来判断问题来源。
mtr 10.0.0.1

tcpdump

# 抓包(抓包方式:wireshark抓包软件在Windows中使用)
-i       #监听哪一个网卡 
-n  	 #不把ip解析成主机名
-nn 	 #不把端口解析成应用层协议
-c  	 #指定抓包的数量
-S  	 #不把随机序列和确认序列解析成绝对值
-w       #将流量保存到文件中,文件中的信息是无法直接查看的
-r       #读取文件中的内容
-v 		 #输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 
-vv 	 #输出详细的报文信息。

namp

# 扫描端口
# 查看单个端口是否开启
nmap 10.0.0.129 -p 80
# 查看目标主机开放的端口
nmap -PS 10.0.0.129
nmap -PS 22,80,25 10.0.0.129
nmap 10.0.0.129 -p 1-1024

lsof

# 查看进程打开的文件
lsof filename
# 查看端口
lsof -i :80

磁盘管理类

mount

mount # 挂载
umount # 取消挂载

du

# 查看文件和目录占用的磁盘空间
du 目录/文件 (功能描述:显示目录下每个子目录的磁盘使用情况)
	-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    -a 不仅查看子目录大小,还要包括文件
    -c 显示所有的文件和子目录大小后,显示总和
    -s 只显示总和
    --max-depth=n 指定统计子目录的深度为第 n 层

# 查看当前用户主目录占用的磁盘空间大小
du -sh

df

# 查看磁盘和分区的inode
df -i
# 查看磁盘和分区的大小(block)
df -h

# 当前物理内存、交互内存
free -h

lsblk

# 查看设备挂载情况
lsblk
# 查看镜像
lsblk -f

fdisk

# 磁盘分区

resize2fs

# 磁盘大小调整后,刷新

系统进程类

uptime

# 查看系统负载

top

# 动态查看进程信息 

free

# 查看内存

vmstat

# 查看cup,进程等信息
vmstat 1 10 # 1s执行10次

mpstat

# 看多个cpu信息,具体的使用率
mpstat -p ALL

iostat

# 查看系统整体的读写速度

nohup

# 在系统后台不挂断地运行命令,退出终端不会影响程序的运行

watch

# 实时查看进程变化

bg/fg

# bg后台运行
# fg挂起程序

kill/killall/pkill

1)kill    通过发送信号,通过PID杀掉进程
2)killall 通过进程名字
3)pkill   通过进程名称(完整名称)

crontab

crontab -l # 查看定时任务列表(cat /var/spool/cron/)
	    -e # 编辑定时任务列表(不检查语法vim /var/spool/cron/)
	    -i # 删除定时任务内容(会提示确认)
	    -r # 删除定时任务内容	
	    -u user # 指定使用的用户执行任务
	    
* * * * * cmd
第1段	代表分钟	00~59(00也可以是0)
第2段	代表小时	00~23
第3段	代表日,天	01~31
第4段	代表月份	01~12
第5段	代表星期,周几	0~7(0和7都代表星期日)

特殊符号	含义
*		*号,表示任意时间都,实际就是“每”的意思。举例:
-		减号,表示分隔符,表示一个时间范围,区间段
,		逗号,表示分隔时段的意思。
/n		n代表数字,即“每隔n单位时间”

pstree

# 显示进程状态树

其他

echo

# 打印输出
-e # 转义字符

# 查看所有环境变量
echo $

rpm

# 安装
rpm -ivh nginx-1.18.0-2.el7.ngx.x86_64.rpm
rpm -qa	# 查看系统中已安装的所有RPM软件包列表
rpm -ql	# 查询指定软件包所安装的目录、文件列表

clear

# 清空

history

history # 查看命令历史记录
-d 指定序号删除命令
-c 清空所有命令

xargs

# 标准输入不能作为命令的参数时使用
find /sbin -perm +700 | xargs ls -l 
cat /etc/passwd|awk -F: '{print $1}'|xargs mkdir -p

bc

# bc 支持整数和小数运算
echo 1+1|bc

expr

# expr不支持小数运算
expr 1 + 1

time

# 命令执行的解析时间

cut

-d 指定分隔符(awk -F)
-f数字指定哪列,多列可用逗号或-
-c 按字符取内容

危险命令

mv rm

关机/重启/注销

关机重启:shutdown、halt、init、reboot

注销退出:logout、exit、ctrl+d

三剑客

sed取行和替换

# 取行
sed -n '1,5p' test.txt
# 过滤
sed -n '/xxx/p' test.txt
# 删除
sed -n '1,3d' test.txt # 删除1-3行
sed -n '/xx/d' test.txt # 删除xx
nl test.txt|sed '1,3d' # 删除并显示行号
# 备份
sed -i.bak '/xxx/d' test.txt
# 替换
sed 's/123/456/g' test.txt	# 或者sed 's#123#456#g' test.txt
sed -i '/^user/c user www;' /etc/nginx/nginx.conf
# 追加a[在后],i[在前]
sed -i '2a hello world01' test.txt
sed -i '2i hello world02' test.txt
# 文件末尾插入
sed '$a end' test.txt
# 截取ip(使用正则+sed)(^.*inet-->以任意inet开头;netmask.*$-->以任意netmask结尾)
ifconfig ens33 | grep -w inet | sed 's/^.*inet//g' | sed 's/netmask.*$//g'
# [-e多项编辑可以实现减少管道的使用]
ifconfig ens33 | sed -ne '2s#^.*inet##g' -ne 's#netmask.*$##gp'

awk取列

# 格式:awk 参数 条件 文件
# -F 指定分隔符
# $n 取第n列
awk -F: '{print $2}' /etc/passwd
# NF 取最后一列
awk -F: '{print $NF}' /etc/passwd
# NR 行号
ifconfig ens33|awk 'NR==2{print $2}'
# 条件判断
awk '{if(条件表达式){动作}else if(条件表达式){动作}else{动作}}' file
# while循环
awk -F: '{i=1;while(i<=NF){print $i;i++}}' /etc/passwd
# for循环
awk -F: '{for(i=1;i<=10;i++){print $0}}' /etc/passwd
# 统计/etc/passwd中各种类型shell的数量
awk -F: '{shells[$NF]++}END{for(i in shells)print i,shells[i]}' /etc/passwd
# 统计访问IP
[root@m01 ~]# ab -n2000 -c100 http://192.168.79.61/index.html
[root@m01 ~]# awk '{IP[$1]++}END{for(i in IP)print i,IP[i]}' /var/log/nginx/access.log
# 统计404状态码
awk '{if($9=="404")code[$9]++}END{for(i in code){print i,code[i]}}' access.log 

grep过滤查找及|管道符

-i # 不区分大小写
-E # 同时过滤多个
-v # 取反
# 查找某文件在第几行
ls | grep -n test
# grep -E = egrep(egrep支持正则表达式的特殊元字符)

正则

^ ^root,匹配以root开头的行
$ root$,匹配以root结尾的行
^$ 表示空行
. 匹配任意一个且只有一个字符(不能匹配空行)
\ 转义字符
* 匹配前一个字符(连续出现)0次或1次以上
.* 匹配所有内容
.*$ 以任意多个字符结尾的内容
[abc] 匹配[]集合内的任意一个字符,也可以写成[a-c]
[^abc] 匹配不包含^后的任意字符,取反的意思