目录
帮助命令
查看文件
目录操作
文件操作
其他命令
时间日期类
用户管理命令
sudo 临时管理权限
用户组管理
访问权限
压缩解压类
磁盘管理
进程管理
ps 查看进程状态(process status)
kill 终止进程
top 实时监控系统进程状态
netstat 显示网络状态和端口占用信息
搜索查找类
VIM编辑器
一般模式
编辑/插入模式(一般按 i 进入)
命令模式( : +命令)
网络配置和系统管理操作
虚拟机的网络连接模式
系统管理
防火墙设置
Linux进程运行级别
关机重启命令
crontab 系统定时任务
软件包管理
RPM
YUM
Shell
系统预设变量
自定义变量
特殊变量
运算符
条件判断
常用判断条件
逻辑与&&、或|| 实现三目运算符
流程控制
if 判断
case 语句
for 循环
while 循环
read 读取控制台输入
函数
系统函数 (basename、dirname)
自定义函数
正则
文本处理工具
层级式目录结构
~ 表示 /root
Ctrl + C 停止进程
Ctrl + L 清屏,等同于clear;彻底清屏/重置是reset
man [命令名称] 查看命令的说明文档
man -f cd / help cd 查看内置命令
type cd / history /exit / useradd 查看命令类型(内嵌、外部)
ls --help 命令自带的帮助选项
cat [选项] 要看的文件
-n 显示所有行的行号
more 分屏显示要查看的文件
less 分屏显示文件内容
空格 向下翻页
Enter 向下翻一行
q 退出
Ctrl + F 向下滚动一屏
Ctrl + B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
/搜索
g页首 G页尾
n向下查找 N向上查找
pwd 打印工作目录(print working directory)
pwd -P 实际路径(针对软链接)
cd /开头是绝对路径,否则是相对路径cd - 返回上一次工作目录cd ~ 或 cd 回到家目录cd .. 回到当前目录的上一级目录cd -P 跳转到实际物理路径,而非快捷方式路径
ls 列出目录内容(list) -a全部内容,-l列表显示,-al都显示,-lh显示文件大小
mkdir [相对/绝对路径] 创建文件夹 -p 若父目录不存在则自动创建
rmdir [相对/绝对路径] 删除文件夹 -p 若父目录为空则自动删除
touch 创建空文件
cp [选项] source dest
-r 递归复制整个文件夹
cp前加反斜杠,不提示是否覆盖(\cp [选项] source dest)
rm 删除
-r 递归删除目录中所有内容
-f 强制执行删除操作,而不提示进行确认
-v 显示指令的详细执行过程
mv source dest 移动
echo [选项] 输出内容到控制台
-e 支持反斜杠转义字符
echo $PATH $USER $HOSTNAME
> 覆盖写入 >> 追加写入 输出重定向,将信息输出到文件中
head -n<行数> 文件 查看文件头n行内容
tail -n<行数> 文件 查看文件末n行内容
tail -f 文件 实时追踪该文件的所有更新【Ctrl + S 暂停 Ctrl + Q 继续】
ln -s [原文件或目录] [软链接名] 给原文件创建一个软链接 link
删除软链接:rm -rf 软链接名
history 查看已经执行过的历史命令,+数字表示显示最近的几条记录
history -c 清除历史记录
ntpdate 更新最新时间
date 显示当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" 显示年月日时分秒
date -d '1 days ago' 显示前一天时间
date -s "2022-07-11 11:46:30" 设置系统当前时间
date +%s 生成时间戳
cal 日历
cal -3 近三个月
cal -m 周一为始
cal -y 查看当前年全年
cal 2021 查看整年
useradd 用户名 添加新用户
useradd -d 文件路径 用户名 指定用户名的home文件夹名称
useradd -g 组名 用户名
userdel 用户名 删除用户,不删用户文件夹
userdel -r 用户名 彻底删除用户,删除所有用户信息
passwd 用户名 更改用户的密码
id 用户名 查看用户信息,或验证用户是否存在
cat /etc/passwd 查看当前所有用户
su 用户名 切换当前用户(switch user)
who am i 查看最外层当前用户主机
whoami 查看目前会话用户
使用root管理员,vim /etc/sudoers 在100行添加允许授权的用户名
普通用户临时权限使用:sudo ls
groupadd 组名 新建空组
usermod -g 组名 修改用户所属组
groupmod -n 新组名 原组名 修改组名
groupdel 用户名 删除组内指定用户
gzip 文件名 压缩文件
gunzip 文件名.zip 解压文件
zip [选项] 打包名 要压缩的文件 压缩文件或目录 -r 压缩目录
unzip [选项] 文件名.zip 解压文件 -d [目录] 指定解压后文件的目录
tar [选项] XXX.tar.gz 要打包的目录 打包归档-zcvf 解包-zxvf
-c 产生.tar 打包文件
-v 显示详细信息
-f 制定压缩后的文件名
-z 打包同时压缩
-x 解包.tar 文件
-C 解压到指定目录
yum install tree 安装tree包
tree ./ 查看当前文件层级结构
du 目录/文件 查看当前目录下所有占有空间大小(disk usage)
-h 以人们较易阅读的GBytes、MBytes、Kbytes等格式自行显示
-a 不仅查看子目录大小,还要包括文件
-c 现实所有的文件和子目录大小后,显示总和
-s 只显示总和
--max-depth=n 指定统计子目录的深度为第 n 层
-ah 只显示总和和目录大小
df -h 查看磁盘使用情况(disk free)
-h 以人们较易阅读的GBytes、MBytes、Kbytes等格式自行显示
free -h 查看内存使用情况
lsblk -f 查看设备挂载情况
硬盘名字:IDE--hda SATA/SCSI--sda 虚拟化硬盘--vda
mount/umount 挂载/卸载
mount -o [loop当成硬盘挂载,ro只读,rw读写] 挂载设备名 挂载目录
vim /etc/fstab 进入手动设置开机自启挂载
fdisk -l 查看硬盘分区详情
ps aux 查看系统中所有进程
ps -ef 查看父子进程之间的关系
a 列出带有终端的所有用户的进程
x 列出当前用户的所有进程,包括没有终端的进程
u 面向用户友好的显示风格
-e 列出所有进程
-u 列出某个用户关联的所有进程
-f 显示完整格式的进程列表
USER:该进程是哪个用户产生的
PID:进程的ID号
PPID:父进程的ID ps -ef看
%CPU:该进程占用CPU资源的百分比
%MEM:该进程占用物理内存的百分比
VSZ:该进程占用虚拟内存的大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的。tty1是图形化终端,tty2-tty6是本地的字符页面终端。pts/0-255代表虚拟终端
STAT:进程状态。如:R运行状态;S睡眠状态;T暂停状态;Z僵尸状态;s包含子进程;l多线程;+前台显示;<高优先级;N低优先级
START:该进程的启动时间
TIME:占用CPU的运算时间
COMMAND / CMD :调用当前进程的命令
kill [选项] 进程号 通过进程号杀死进程 -9 表示强迫进程立即停止
killall 进程名称 通过进程名称杀死进程,支持通配符
1号进程 -> 启动sshd进程 -> 远程连接ssh -> bash控制台(Shell)
pstree 进程树 -p显示PID -u显示进程所属用户
-d 秒数 指定每隔几秒更新,默认是3
-i 使top不显示任何闲置或者僵死进程
-p 通过指定监控进程PID来仅仅监控某个进程的状态
默认按照%CPU排序(shift+P)
以%MEM内存占用大小排序(shift+M)
以PID排序(shift+N)
按u,选择指定用户
按k,杀死指定PID
netstat -anp | grep 进程号 查看该进程网络信息
netstat -nlp | grep 端口号 查看网络端口号占用情况
-a 显示所有正在监听listen和未监听的套接字socket
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出在监听的服务状态(listen)
-p 表示显示哪个进程在调用
d 目录文件 l链接 c字符设备文件 b块设备文件
ll:文件类型和权限 硬链接数 文件属主 文件属组 文件大小 建立或最近修改时间 文件名
chmod [{u/g/o/a} {+/-/=}{r/w/x}] [文件或目录] 修改文件权限
chmod [421] [文件或目录] r=4 w=2 x=1 rwx=4+2+1=7
例:chmod 644 xxx.sh (rwxr--r--)
chmod -R 644 xxx/ 修改整个文件夹里面所有文件的权限
chown [选项] [用户] [文件或目录] 改变文件或目录的所有者 -R进行递归
chgrp [选项] [用户] [文件或目录] 改变文件或目录的所属组
find [搜索范围] [选项] 查找文件或目录
-name <查询方式> -user <用户名> -size [+ / -] <文件大小>
locate [搜索文件] 快速定位文件路径
updatedb 更新数据库
which/whereis [命令] 查看命令说明
grep -n 过滤 显示对应行号
wc 看文件或目录情况
一般模式(删除、复制、粘贴)、插入模式(按 i 进入,ESC退出)、命令模式(按 : 直接命令,如 :wq :q :q!)
:w 保存
:q 退出
:set nu 显示行号
:set nonu 不显示行号
y复制、x剪切、p粘贴、u撤销、d删除、w单词、r替换
语法 |
功能描述 |
^ |
移动到行头 |
$ |
移动到行尾 |
w |
移动到下一个词头位置 |
b |
移动到上一个词头位置 |
e |
移动到当前词尾 |
gg |
页首部 |
H |
当前页首 |
G |
页底部 |
L |
当前页尾 |
数字+G |
移动到指定行 |
数字N+G |
移动到目标行 |
x |
剪切当前字符,相当于del删除 |
X |
剪切前一个字符,相当于Backspace后退 |
u |
撤销,相当于 Ctrl + Z |
r |
更改光标当前字符 |
R |
替换模式(Insert模式) |
yy |
复制当前行 |
y数字y / 数字yy |
复制一段(从光标当前行到后n行) |
yw |
复制一个词 |
y^ |
复制从光标位置到本行首 |
y$ |
复制从光标位置到当前行结束 |
p |
粘贴目的行 |
数字p |
重复粘贴多少次 |
dd |
删除当前行 |
d数字d / 数字dd |
删除光标(含)后多少行 |
dw |
删除一个词 |
d^ |
删除从光标位置到本行首 |
d$ |
删除从光标位置到当前行结束 |
按键 |
功能(进入编辑模式的光标位置) |
i |
光标前 |
a |
光标后 |
o |
光标的下一行 |
I |
行头 |
A |
行尾 |
O |
当前光标的上一行 |
:w 保存
:q 退出
:wq 保存并退出
:q! 不保存强制退出
/要找的词 n查找下一个,N查找上一个
:noh 取消高亮显示
:set nu 显示行号
:set nonu 关闭行号
:s/old/new 使用 new 替换当前行匹配到的第一个 old
:s/old/new/g 将当前行所有old改为new
:%s/old/new 替换文档中每一个匹配到的第一个old为new
:%s/old/new/g 将所有old改为new
远程登录:ssh [email protected]
ifconfig 查看网络接口配置
vim /etc/hosts 查看hosts文件(IP地址-主机名 通讯录)
添加后可直接ping主机名
hostname 查看主机名 hostnamectl 主机具体信息
vim /etc/hostname 编辑设置主机名
hostnamectl set-hostname xxx 实时更改主机名
vim /etc/sysconfig/network-scripts/ifcfg-ens33 更改网络配置文件
将文件第四行BOOTPROTO="dhcp"改为"static"即修改为静态IP,同时添加以下内容:
#IP地址
IPADDR=192.168.111.100
#网关
GATEWAY=192.168.111.2
#域名解析器
DNS1=192.168.111.2
子网掩码(默认为255.255.255.0)
重启网络服务:service network restart
桥接模式:虚拟机直接连接外部物理网络,主机起到了网桥的作用。这种模式下,虚拟机可以直接访问外部网络,并且对外部网络是可见的。
NAT模式:虚拟机和主机构建一个专有网络,通过虚拟网络地址转换(NAT-Network Address Translation)设备对IP进行转换。虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机。
仅主机模式:虚拟机只与主机共享一个专有网络,与外部网络无法通信。
进程process:一个正在执行的程序或命令 PID进程识别码
服务service:启动后一直存在、常驻内存的进程
守护进程daemon:具体执行系统服务的进程
查看服务:ls usr/lib/systemd/system centOS 6 :/etc/init.d/
systemctl 主要用于管理所有服务,启动或停止当前服务,设置开机自启动状态
设置服务:systemctl start | stop | restart | status |enable/disable 服务名
列出服务:chkconfig -- list
设置指定运行级别on/off某服务:chkconfig -- level 3 network on
systemctl status firewalld 查看防火墙
systemctl stop firewalld.service 关闭防火墙
systemctl disable firewalld.service 关闭开机自启动
systemctl get-default 查看当前运行级别
Ctrl + Alt + F1 / init 5 切换到运行级别5
Ctrl + Alt + F2~6 / init 3 切换到运行级别3
开机 -> BIOS -> /boot -> init进程 -> 运行级别 -> 运行级对应的服务
CentOS7运行级别简化为:
multi-user.target 等价于原运行级别3(多用户有网,无图形界面)
graphical.target 等价于原运行级别5(多用户有网,有图形界面)
shutdown 关机(默认1min后执行)
shutdown -c 取消关机
shutdown now 立即关机
shutdown 数字 几分钟后关机
shutdown 15:28 定时关机
预读迟写(buffer缓冲区实现)
sync 将数据由内存同步到硬盘中(手动存盘)
halt 停机,关闭系统,但不断电
poweroff 关机,断电
rebot 重启,等同于 shutdown -r now
shutdown [选项] 时间
-H 相当于 halt,停机
-h 相当于poweroff,关机
-r 相当于rebot,重启
systemctl restart crond 重新启动 crond 服务
crontab [选项]
-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的 crontab 任务
编辑crontab任务界面
第几分钟 0-59
第几小时 0-23
第几天 1-31
第几月 1-12
一周当中的星期几 0-7
*表示任何时间 ,表示不连续的时间 -代表连续 */n代表多久执行一次
RPM(RedHat Package Manager),RedHat软件包管理工具,是Linux系统操作里面的打包安装工具。类似windows里面的setup.exe
rpm -qa 查询所安装的所有rpm软件包
rpm -qi 软件名 查询指定软件安装的详细信息
rpm -e 软件包 卸载软件包
rpm -e --nodeps 软件包 不检查依赖卸载软件包
rpm -ivh 软件包
-i 安装install
-v 显示详细信息--verbose
-h 进度条--hash
--nodeps 安装前不检查依赖
YUM(Yellow Dog Updater, Modified) 可以自动处理依赖性关系,一次安装所有依赖的软件包
yum [选项] [参数]
-y 所有的提问都回答yes
参数:install安装,update更新,check-update检查更新,remove删除,list显示软件包信息,clean清理yum过期缓存,deplist显示所有依赖关系
脚本格式
#!/bin/bash 开头(表示指定解析器)
脚本执行方式
使用bash或sh 直接解析脚本 新生成子Shell执行
打开可执行权限,直接用路径跑 新生成子Shell执行
在脚本路径前加上 “.” 或者 source 直接在当前Shell执行
常用系统变量:$HOME、$PWD、$SHELL、$USER等
env 当前所有环境变量
printenv 变量名 打印环境变量信息
set 当前定义的所有变量
定义变量:变量名=变量值
转为全局变量:export 变量名 注意父子Shell值传递问题
声明静态变量(只读):readonly 变量
撤销变量:unset 变量名
$(xxxx) 或 `xxxx` 命令替换
$n n为数字,$0代表该脚本名称,$1-9代表第一到地九个参数,十以上需要大括号${10}
$# 输入参数个数
$* 获取所有输入参数,看成一个整体
$@ 获取所有输入参数,把每个参数分区对待
$? 最后一次执行命令的返回状态
a=$[1+2] 或 a=$((1+2)) 将计算式放在中括号或双小括号中即可
expr 1 + 2 expr 5 /* 2
test 条件 或 [ 条件 ](注意方括号内首尾有空格) 条件之间也要加空格
用 $? 查看判断结果,0表示正确,1表示错误
若方括号中只有一个值,结果为0;若为空值,则结果为1
-a 逻辑与(and)
-o 逻辑或(or)
两个整数之间比较
-eq 等于(equal)
-ne 不等于(not equal)
-lt 小于(less than)
-le 小于等于(less equal)
-gt 大于(greater than)
-ge 大于等于(greater equal)
如果是字符串之间的比较,用等号“=”判断相等,用“!=”判断不等。
按照文件权限进行判断
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
按照文件类型进行判断
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)
[ xxx ] && echo OK || echo notOK
如果第一条语句为真,则执行第二条。如果为假,则执行第三条
单分支
if [ 条件 ]; then xxx; fi
if [ 条件判断式 ];then 程序 fi
或:
if [ 条件判断式 ] then 程序 fi
多分支
if [ 条件 ]; then xxx; elif [ 条件 ]; then xxx; fi
if [ 条件判断式 ] then 程序 elif [ 程序判断式 ] then 程序 else 程序 fi
;; 相当于break *)相当于default
case $变量名 in "值1") 程序1 ;; "值2") 程序2 ;; *) 最终其他程序 ;; esac
for (( 初始值; 循环控制条件; 变量变化 ))do 程序 done
foreach循环:
for 变量 in 值1 值2 值3…do 程序 done
while [ 条件判断式 ]do 程序 done
read [选项] [参数]
-p 指定读取值时的提示符 -t 指定读取时等待的时间(秒)
生成带时间戳的变量名
#!bin/bash filename="$1"_log_$( date +%s ) echo $filename
basename [string / pathname] [suffix]
取路径里的文件名称 suffix去掉指定后缀
dirname 文件绝对路径
$(cd $(dirname $0); pwd)
function funname ( ) { 程序; [return int;] }
^ 以xx开头,如:^a,表示axx,axxx
$ 以xx结尾,如:t$,表示xxt,xxxt ^$匹配出空行
. 匹配一个任意字符,如r..t,表示rabt,root…
* 匹配多个上一字符,如ro*t,表示rt,root,rooot,roooot… .*匹配出任意字符
+ 出现1次或多次 ? 出现0次或1次
[ ] 字符区间 , - *
\ 转移字符,必须单引号引起来
{ } 重复出现几次 使用-E 扩展才有用
cut [选项] filename 默认分隔符是制表符
-f 列号,提取第几列 -d 分隔符,按指定分隔符分割列,默认是制表符“/t” -c 按字符进行切割,后加加n表示取第几列,比如 -c l
awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}…’ filename
pattern:表示awk在数据中查找的内容,就是匹配模式 action:在找到匹配内容时所执行的一系列命令
-F 指定文件分隔符 -v 赋值一个用户定义变量(引入变量) FILENAME 文件名 NR 已读的记录数(行号) NF 浏览记录的域的个数(切割后,列的个数)
/bin:Binary的缩写,最经常使用的命令
/sbin:System Binary的缩写,系统管理员使用的系统管理程序
/lib:库目录,重要
/usr:user用户
/boot:核心镜像文件,单独挂载了1G硬盘空间,类似于Win中System32
/dev:设备
/etc:配置文件
/home:普通用户的主文件夹
/root:超级管理员主文件夹
/opt:可选目录,存放第三方软件
/media:可移动媒体设备
/mnt:外部存储,类似于media
/proc:process进程目录
/run:运行目录,当前所有运行信息
/srv:serice系统服务
/sys:系统硬件相关信息
/tmp:临时目录
/var:变量,可变目录。一般存放日志