文章目录
vim快捷键
命令 | 含义 |
---|---|
yy | 拷贝当前行 |
5yy | 拷贝当前向下的5行 |
dd | 删除当前行 |
5dd | 删除当前向下5行 |
命令行下:set nu | 设置文件的行号 |
set nonu | 取消行号 |
u | 撤销动作 |
20 shift+g | 将光标移动到20行 |
gg | 文首 |
G | 文末 |
命令行+/+关键字+回车 | 查找,输入n就是查找下一个 |
用户管理
命令 | 含义 |
---|---|
useradd | 添加用户 |
passwd 用户名 | 修改用户密码 |
userdel 用户名 | 删除用户,保留家目录 |
userdel -r 用户名 | 删除用户,不保留家目录 |
logout | 退出登录 |
su - 用户 | 切换到目标用户 |
exit/logout | 退出到原来的用户 |
groupadd | 添加用户组 |
useradd -g 用户组 用户名 | 添加用户到用户组 |
帮助指令
命令 | 含义 |
---|---|
man 指令 | 帮助指令 |
help 指令 | 帮助指令 |
文件指令
命令 | 含义 |
---|---|
ls | 显示当前目录的文件 |
pwd | 显示当前工作目录的绝对路径 |
cd | 切换目录 |
mkdir 文件名 | 创建目录(默认一级) |
mkdir -p file1/file2/file3 | 创建多级目录 |
rmdir [选项] 要删除的空目录 | 删除目录 |
rm -rf 要删除的目录 | 删除目录的所有内容 |
cp [选项] source dest | 拷贝文件到指定目录 |
cp -r source dest | 拷贝多级文件 |
/cp -r source dest | 拷贝多级文件且强制全部覆盖 |
rm [选项] 要删除的文件或者目录 | 删除目录 |
rm -r | 递归删除整个文件夹 |
rm -f | 强制删除不提示 |
mv oldNameFile newNameFile | 重命名 |
mv /temp/mouvefile /targetfile | 移动文件到目标目录 |
cat [选项] 要查看的文件 | 查看文件内容 |
cat -n 文件 | 查看文件内容,并且显示行号 |
cat 文件 |more | 管道命令,查看更多信息 |
less | 分屏查看文件内容 |
echo | 输出内容到控制台 |
head 文件 | 显示文件的开头部分内容,默认前10行 |
head -n 5 文件 | 查看文件头5行内容 |
tail 文件 | 查看文件尾10行内容 |
tail -f 文件 | 实时监控文件内容 |
ln -s [原文件或目录] [软链接名] | 给原文件创建一个软链接(删除软链接就是删除软链接的文件名) |
history | 查看已经执行过的历史命令 |
>指令和>>指令
命令 | 含义 |
---|---|
echo “内容” > 文件 | 将内容写入文件,覆盖原来的内容 |
echo “内容” >> 文件 | 将内容写入文件,追加到文件尾部 |
ls -l >文件 | 将列表的内容写入文件a.txt中(覆盖写) |
ls -al >> 文件 | 将列表的内容写入文件的末尾(如果文件不存在,自动创建) |
cat 文件1 > 文件2 | 将文件1的内容覆盖到文件2中 |
将/home目录下的文件列表写入到/home/info.txt中,覆盖写入
ls -l /home > /home/info.txt
时间日期类
命令 | 含义 |
---|---|
date | 显示当前日期 |
cal | 日历指令 |
排序sort
sort
- 对文本文件的行排序
-b 忽略排序字段或关键字中开头的空格
-c 检查是否指定文件已经排序好了,不排序.
-d 在关键字中只考虑[a-zA-Z0-9]字符.
-f 将关键字中的小写字母折合成大写字母.
-g 按照通常的数字值顺序作比较,暗含-b
-i 在关键字中只考虑[\040-\0176]字符.
-k POS1[,POS2]
从关键字POS1开始,*到*POS2结束.
字段数和字符偏移量都从1开始计数(与基于零的+POS格式作比较)
-l 按照当前环境排序.
-m 合并已经排序好的文件,不排序.
-M 按(未知的)<`JAN'<...<`DEC'的顺序比较,暗含-b
-n 按照字符串的数值顺序比较,暗含-b
-o FILE
将结果写入FILE而不是标准输出.
-r 颠倒比较的结果.
-s 通过屏蔽最后的再分类比较来稳定排序.
-t SEP 使用SEP来替代空格的转换non-.
-T DIRECTORY
使用DIRECTORY作为临时文件,而不是$TMPDIR或者/tmp
-u 如果有-c,则按严格的顺序进行检查;
如果有-m,则只输出相等顺序的第一个.
-z 以0字节结束行,而不是使用换行符,这是为了找到-print0
统计uniq
uniq
- 删除排序文件中的重复行
-c, --count
在 行首 显示 出现 的 数目
-d, --repeated
仅显示 重复行
-D, --all-repeated
显示 全部 重复行
-f, --skip-fields=N
不比较 起初的 N 栏
-i, --ignore-case
比较时 忽略 大小写
-s, --skip-chars=N
不比较 起初的 N 个 字符
-u, --unique
仅显示 无重复行
-w, --check-chars=N
每行中 比较 不超过 N 个 字符
-N 同 -f N
+N 同 -s N
搜索查找类
命令 | 含义 |
---|---|
find [搜索范围] [选项] | 搜索需要的文件或者目录 |
选项说明
-name
:按照指定的文件名查找模式查找文件-user
:查找属于指定用户名所有文件-size
:按照指定的文件大小查找文件(+n 大于 -n小于 n等于,单位有k,M,G)
命令 | 含义 |
---|---|
locate 搜索文件 | 快速定位文件路径 |
grep [选项] 查找内容 源文件 | 过滤查找 |
cut | 在文件的每一行中提取片段 |
awk | 提取片段,功能更强大 |
cut
-b, --bytes=LIST
输出 这些 字节
-c, --characters=LIST
输出 这些 字符
-d, --delimiter=DELIM
使用 DELIM 取代 TAB 做 字段(field) 分隔符
-f, --fields=LIST
输出 这些 字段
-n (忽略)
-s, --only-delimited
不显示 没有 分隔符 的 行
awk
-F "指定分隔符" 'print $n' #n表示分隔的第几个
grep可以和cat指令搭配使用
常用选项:
- -n 显示匹配行和行号
- -i 忽略字幕大小写
例如cat a.txt | grep "hello"
.
压缩与解压
命令 | 含义 |
---|---|
gzip | 压缩文件(只能压缩成.gz文件) |
gunzip | 解压文件 |
zip [选项] XXX.zip | 压缩文件为zip |
unzip [选项] XXX.zip | 解压文件 |
zip -r | 递归压缩,即压缩目录 |
unzip -d<目录> | 指定解压后文件的存放目录 |
tar [选项] XXX.tar.gz 打包的内容 | 打包指令 |
tar的选项:
- -c 产生.tar打包文件
- -v 显示详细信息
- -f 指定压缩后的文件名
- -z 打包同时压缩
- -x 解包.tar文件
文件组
组的默认位置:/etc/group
命令 | 含义 |
---|---|
ls -ahl | 查看文件的所有者 |
chown 用户名 文件名 | 修改文件所有者 |
chgrp 组名 文件名 | 修改文件组 |
usermod -g 组名 用户名 | 改变用户所在组 |
usermod -d 目录名 用户名 | 修改该用户登陆的初始目录,用户需要有进入到新目录的权限! |
权限
ls -l
中显示的内容如下:
-rwxrw-r– 1 root root 1213 Feb 2 09:39 abc
0-9为说明
- 第0位确定文件类型(d目录,l软链接,c字符设备,b块设备,-普通文件)
- 第1-3位确定所有者权限
- 第4-6位确定所属组权限
- 第7-9位确定其他用户权限
-
rwx作用到文件
- r:read 读权限,可以查看文件内容
- w:write 写权限,可以修改文件内容
- x:execute 执行权限,可以执行文件
-
rwx作用到目录
- r:read 读权限,可以查看目录内容
- w:write 写权限,可以修改目录内容
- x:execute 执行权限,可以进入目录
修改权限
chmod
指令,可以修改文件或者目录的权限.
- 利用+,-,=修改权限
u = user 用户
g = group 组
o = other 其他
a = all 所有
- chmod u=rwx,g=rx,o=x 文件/目录名
- chmod o+w 文件/目录名
- chmod a-x 文件/目录名
- 利用数字修改权限
r=4,w=2,x=1
-
chmod 755 文件/目录名
-
chmod u=rwx,g=rx,o=x 文件/目录名
-
chmod o+w 文件/目录名
-
chmod a-x 文件/目录名
命令 | 含义 |
---|---|
chown newowner 文件/目录 改变所有者 | 修改文件所有者 |
chgrp newgroup 文件/目录 改变所有者 | 修改文件所在组 |
crond任务调度
crontab [选项] | 进行定时任务的设置 |
---|
-e | 编辑crontab定时任务 |
---|---|
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
例如 * /1 * * * *
参数细节说明,前5个*的含义:
一小时当中的第几分钟,
一天当中的第几小时,
一个月当中的第几天,
一年当中的第几个月,
一周当中的星期几.
*/n | 每隔多久执行一次 |
---|
命令 | 含义 |
---|---|
crontab -r | 终止任务调度 |
crontab -l | 列出当前有哪些任务调度 |
service crond restart | 重启任务调度 |
每隔一分钟,就将当前的日期信息,追加到/tmp/mydate中
*/1 * * * * date>>/tmp/mydate
每隔1分钟,就将当前日期和日历都追加到/home/mycal中
- vim my.sh
- crontab -e
- */1 * * * */home/my.sh
查看进程
ps -ef | 查看所有进程 |
---|
ps -ef | grep atd 过滤结果
at定时任务
- at命令是一次性定时计划任务,at守护进程atd会以后台模式运行,检查作业队列来运行
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
at命令格式
at [选项] [时间]
时间
- 接受当天的hh:mm(小时:分钟)式的时间指定.假如该时间已经过去,那么就放在第二天执行.
- 使用midnight,nonn,teatime来指定
- 采用12小时,后面加上AM或者PM
- 指定命令执行的具体i起,指定格式为month day 或者mm/dd/yy 或者 dd.mm.yy
- 使用相对计时法,指定格式为:now+count time-unis
- 直接使用today,tomorrow指定
2天后的下午5点执行
at 5pm +2 days回车 /bin/ls /home(使用ctrl+D退出)
明天17点钟,输入时间到指定的文件夹内
at 5pm tomorrow回车 date > root/date100.log
atrm [id] | 删除指定的任务 |
---|
磁盘分区和挂载
原理
- Linux来说无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分.
- Linux采用了一种"载入"的处理方法,他的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来.这时要载入的一个分区将使他的存储空间在一个目录下获得.
挂载的案例
fdisk /dev/sdb | 对sdb硬盘进行分区 |
---|
命令 | 含义 |
---|---|
m | 显示命令列表 |
p | 显示磁盘分区 |
n | 新增分区 |
d | 删除分区 |
w | 写入并退出 |
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区.两次回车默认剩余全部空间.最后输入w写入分区并退出,若不保存退出输入q
格式化磁盘
mkfs -t ext4 /dev/sdb1 | ext4指的是分区类型 |
---|
挂载
将一个分区和目录联系起来
mount 设备名称 挂载目录 | 将一个分区和目录联系起来 |
---|
umount 设备名称 或者 挂载目录 | 卸载 |
---|
永久挂载
修改/etc/fstab实现挂载
磁盘情况查询
df -h | 查询系统整体磁盘使用情况 |
---|
du -h | 查询指定目录的磁盘占用情况,默认为当前 |
---|---|
-s | 指定目录占用大小汇总 |
-h | 带计量单位 |
-a | 含文件 |
–max-depth=1 | 子目录深度 |
-c | 列出明细的同时,增加汇总值. |
工作实用指令wc
- 统计/opt文件夹下文件的个数
ls -l /opt | grep “^-” | wc -l
- 统计/opt文件夹下文件的个数,包括子文件夹里的
ls -lR /opt | grep “^-” | wc -l
以树状显示目录结构tree目录
tree /opt
网络配置
设置主机名和host映射
通过主机名能够找到(ping)某个linux系统
- windows
在C:\Windows\System32\drivers\etc\host
- linux
在/etc/hosts文件指定即可
主机名解析机制分析(Hosts,DNS)
- 浏览器先检查浏览器缓存有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析
- 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录).如在cmd窗口中输入ipconfig/displaydns可以看到DNS域名解析缓存
- 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回
- 如果本地DNS解析器缓存和hosts文件中均没有找到对应IP,则到域名服务DNS进行解析域
进程管理
Linux中,每一个执行的程序都成为一个进程,每一个进程都分配一个ID号(pid,进程号)
每个进程都可能以两种方式存在,前台和后台,前台程序就是用户目前屏幕上可以进行操作的.后台进程则是实际在操作,但是由于屏幕上无法看到的进程,通常使用后天方式执行.
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中.直到关机才结束
显示系统执行的进程
命令 | 含义 |
---|---|
ps -a | 显示当前终端的所有信息 |
ps -u | 以用户的格式显示进程信息 |
ps -e | 显示所有进程 |
ps -f | 全格式显示 |
ps -l | 长格式显示 |
ps -T | 显示当前线程的层次结构 |
ps -x | 显示没有控制终端的进程 |
USER:进程执行用户
PID:进程号
VSZ:占用虚拟内存的情况
RSS:占用物理内存的情况
TTY:终端信息
STAT:当前运行状态,s表示休眠,r表示运行
START:进程开始时间
TIME:占用的CPU时间
COMMAND:启动进程的指令(进程名)
实例
以全格式显示当前所有的进程,查看进程的父进程
ps -ef|grep sshd
终止进程
命令 | 含义 |
---|---|
kill [选项] 进程号 | 通过进程号终止进程 |
killall 进程名称 | 通过进程名称杀死进程,也支持通配符 |
常用选项:
- -9:表示强迫进程立即停止
实例
- 终止远程登录服务sshd,在适当时候再次重启sshd缓存
kill sshd终止进程;systemctl start sshd.service
-
终止多个gedit
killall gedit
-
终止一个终端
ps -aux | grep bash查看终端
kill -9 终端进程号
pstree | 查看进程树 |
---|---|
-p | 显示进程的PID |
-u | 显示进程的所属用户 |
服务管理
服务本质就是进程,但是是运行在后台的,通常都在监听某个端口,等待其他程序的请求,比如mysqld,sshd,防火墙等等,因此我们也称为守护进程.
命令 | 含义 |
---|---|
service 服务名 [start|stop|restart|reload|status] | 管理指令 |
查看服务名:
-
/etc/init.d查看service指令管理的服务
-
使用setup
运行级别
命令 | 含义 |
---|---|
init 运行级别 | 修改运行级别 |
systemctl get-default | 获得当前级别 |
systemctl set-default TARGET.target | 修改默认运行级别 |
服务七种运行级别 runlevel
0 系统停机状态,为0不能正常启动
1 单用户工作状态,root权限 系统维护,禁止远程登录
2 多用户状态 无nfs 不支持网络
3 完全的多用户状态 用nfc 登录后进入控制台命令行模式 multi-user.target
4 系统未使用 保留
5 x11控制台 登录后进入gui模式 graphical.target
6 系统正常关闭并重启 默认运行级别不能是6,否则不能正常启动
chkconfig | 给服务的各个运行级别设置自 启动/关闭 |
---|
查看服务chkconfig --list[|grep 服务名]
修改服务级别的自启动/关闭
chkconfig --level 3 network off 对network服务在3运行级别,关闭自启动
chkconfig --level 3 network on 重新打开
需要重启reboot生效
systemctl管理指令
命令 | 含义 |
---|---|
systemctl list-unit-files[|grep 服务名] | 查看服务开机启动状态,grep可以过滤 |
systemctl enable 服务名 | 设置服务开机启动 |
systemctl disable 服务名 | 设置服务开机不启动 |
systemctl is-enabled 服务名 | 查询某个服务是否会自启动 |
systemctl [start|stop|restart|status] 服务名 |
防火墙
telnet 某个端口 | 测试某个端口 |
---|
命令 | 含义 |
---|---|
firewall-cmd --permanent --add-port=端口号/协议 | 打开端口 |
firewall-cmd --permanent -remove-port=端口号/协议 | 关闭端口 |
firewall-cmd --reload | 重新载入,才能生效 |
firewall-cmd --query-port=端口号/协议 | 查询端口是否开放 |
动态监控进程
top [选项] | 动态监控进程 |
---|---|
-d 5秒 | 指定top命令每隔几秒更新 |
-i | 使top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
交互操作
命令 | 含义 |
---|---|
P | 以CPU使用率排序,默认就是该选项 |
M | 以内存使用率排序 |
N | 以PID排序 |
q | 退出top |
应用案例
监视特定用户
top后输入u
回车,再输入用户名即可
终止指定的进程
top后输入k
回车,再输入要结束的进程ID号
监控网络状态
netstat | 查看系统网络情况 |
---|---|
-an | 按一定顺序排列输出 |
-p | 显示哪个进程在调用 |
rpm和yum
rpm介绍
rpm用于互联网下载包的打包以及安装工具,它包含在某些Linux分发版本中.它生成具有.RPM扩展名的文件.类似于windows中的setup.exe
rpm -qa|grep xx | 查询已经安装的rpm列表 |
---|---|
rpm -qi 软件包名 | 显示信息 |
rpm -qf 文件全路径名 | 显示文件所属的软件包 |
rpm -ql 软件包名 | 查询软件包中的文件 |
rpm -e RPM包的名称 | 卸载rpm包 |
---|
- 如果其他软件包依赖于要卸载的软件包,卸载是会产生错误信息
- 如果强制删除,增加参数 --nodeps
rpm -ivh RPM包全路径文件 | 安装rpm包 |
---|
i=install安装
v=verbose提示
h=hash 进度条
yum介绍
Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
命令 | 含义 |
---|---|
yum list|grep 软件列表 | 查询yum服务器是否有需要安装的软件 |
yum install *** | 下载安装 |
环境变量
$PATH 查看现在环境变量
vim /etc/profile 修改环境变量
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
Shell脚本
#!/bin/bash #要求以这个开头
echo "hello world~"
输入完后,脚本并没有执行权限,可以考虑加权限
chmod u+x hello.sh
如果不加权限.也可以通过sh
来执行:
sh hello.sh
Shell变量
- Linux Shell变量分为系统变量和用户自定义变量
- 系统变量: H O M E , HOME, HOME,PATH,$PWD…
- 显示当前shell中所有的变量:set
shell变量的定义
- 定义变量:变量名=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量,注意:不能unset!!
#!/bin/bash
A=100
echo A=$A
#撤销变量A
unset A
echo $A
#声明静态变量
readonly B=200
echo B=$B
shell变量定义的规则
- 变量名可以由字母,数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯大写
将命令的返回值赋给变量
A=`date`#反引号,运行里面的命令,并把结果返回给变量A
A=$(date)#等价于引号
多行注释
:<<! 内容 !
位置参数脚本
$n
(n为数字,$0代表命令本身,$1- 9 表示第一到第九个参数 , 十以上的参数需要用大括号包含 , 如 9表示第一到第九个参数,十以上的参数需要用大括号包含,如 9表示第一到第九个参数,十以上的参数需要用大括号包含,如{10})$*
(这个变量代表命令行中所有的参数,把所有参数看成一个整体)$@
(这个变量代表命令行中所有的参数,不过$@
把每个参数区分对待)$#
(命令行中所有参数的个数)
#!/bin/bash
echo "0=$0,1=$1"
ehco "$#"
预定义变量
$$
:当前进程的进程号$!
:后台运行的最后一个进程的进程号$?
:最后一次执行的命令的返回状态
运算符
$((运算式))
或者$[运算式]
或者expr m + n
#!/bin/bash
# 计算(2+3)×4的值
#第一种方式
Res1=$(((2+3)*4))
#第二种方式
Res2=$[(2+3)*4]
#第三种方式
Res3=`expr 2 + 3`
Res4=`expr $Res3 \* 4`
echo $Res4
条件判断
[ condition ]判断条件,注意括号两边需要有空格
#!/bin/bash
#判断"ok"是否等于"ok"
if [ "ok"="ok" ]
then
echo "equal"
fi
#判断23是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于"
fi
#判断/root/aaa.txt文件是否存在
if [ -f /root/aaa.txt ]
then
echo "存在"
fi
if [ condition ]
then
代码
elif [ condition ]
then
代码
fi
case语句
case $变量名 in
"值1")
代码
;;
"值2")
代码
;;
esac
for循环
for 变量 in val1 val2…
do
代码
done
```shell
for i in "$@"
do
echo "num is $i"
done
for((i=1;i<100;i++))
do
代码
done
### while循环
```shell
while [ condition ]
do
程序
done
read读取控制台输入
read(选项)(参数) | 读取控制台输入 |
---|---|
-p | 指定读取值时的提示符 |
-t | 指定读取值时等待的时间 |
read -t 10 -p "请输入一个数" NUM1
echo "$NUM1"
函数
系统函数
basename
返回完整路径最后/的部分,用于获取文件名
basename /home/aaa/test.txt txt
最后获得的结果是test
dirname
返回完整路径最后/前面的部分,用于返回路径部分
自定义函数
基本语法:
function funname()
{
Action;
}
案例
function getSum(){
SUM=$[$n1+$n2]
echo "$SUM"
}
read -p "输入一个数n1" n1
read -p "输入一个数n2" n2
getSum $n1 $n2
综合案例
- 需求分析
- 每天凌晨2:30备份数据库test到/data/backup/db
- 备份开始和结束都能够给出响应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式
- 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
#!/bin/bash
#备份目录
BAKEUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H:%M:%S)
echo $DATETIME
#数据库的地址
HOST=localhost
#数据库的用户名和密码
DB_USER=root
DB_PW=1234
#备份的数据库名
DATABASE=test
#创建备份目录,如果不存在,就创建
[ ! -d "${BAKEUP}/${DATETIME}$" ] && mkdir -p "${BAKEUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW=} -host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BAKEUP}/${DATETIME}/${DATETIME}.sql.gz
#将文件处理成tar.gz
cd ${BAKEUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BAKEUP}/${DATETIME}
#删除10天前的备份文件
find ${BAKEUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功"
crontab -e
30 2 * * * /usr/sbin/mysql_db_bakup.sh