一般模式主要操作包括:删除、复制、粘贴
复制
- 复制单行:光标移到所在行,按yy,然后按p复制,n p可以重复复制,例如 5 p重复复制五行
- 复制多行:n yy 复制n行,然后按p
- 复制一行中的部分:移动光标到指定位置,复制一行后面部分按y$,复制一行前面部分按y^,复制一个单词yw
删除
- 删除单行:dd
- 删除多行:n dd 删除n行
- 删除一行中的部分:dw,d$,d^
撤销:u
剪切单个字符:x向前剪切,X向后剪切
替换:单个字符替换r,多个字符替换R
移动:
- 移动到行首:shift+^
- 移动到行尾:shift+$
- 移动到一页开头:gg
- 移动到一页尾:G
- 移动到某一行:n+G
显示行号:命令模式set nu
关闭行号:set nonu
查看命令帮助:man 命令
man -f 命令 查看内置命令
例如查看cd命令
man -f cd
man 3tcl cd
help仅可以查看内置命令
命令 --help可以查看外部命令
- 打印工作目录的绝对路径:pwd
- 列出目录或文件:
- ls -a:列出包含隐藏文件
- ls -l:长数据串列出,包含文件属性和权限等,等价于ll
- ls:列出文件(不包含隐藏文件)
- 创建文件夹
- mkdir:创建单个目录
- mkdir -p:创建嵌套目录 mkdir -p a/b/c
- 移除目录
- rmdir 文件名1 文件名1:移除目录,需要保证是空目录
- rmdir -p 文件路径:一次移除多个 rmdir -p a/b/c
创建文件:
- touch file
- cp source dest
- \cp source dest 当存在相同文件,该复制没有提示
- cp -r source dest:递归复制
删除文件
- rm file:删除单个文件
- rm -f file:强制删除单个文件
- rm -r file:递归删除
- rm -r ./*:删除当前目录的所有文件
移动文件
- mv oldFile newFile:重命名
- mv /tmp /target:移动文件
查看文件
- cat [-n] file:查看文件内容,可选参数-n显示行号
- more file:分页查看
- 空格:向下翻页
- q:退出
- ctrl+F:向下滚动一屏
- ctrl+B:返回上一屏
- less:分屏显示
- 空白键 | F | PgDn:向下翻页
- B | PgUp:向上翻页
- shift+G:翻到最后
- g:翻到开头
- ?字串:向上搜寻的功能:n:向上查找;N:向下查找
- q退出
- echo:输出内容到控制台
- echo [-e] 内容:可选参数支持转义字符
- echo $name:输出环境变量,不知道环境变量名的情况下,echo $ ,然后输入tab
- 输入输出重定向
- cat > file :写入到file文件
- echo >> file:追加到文件末尾
- head [-n num ] file:查看文件前几行,可选参数-n指定查看前几行
- tail [-n num ] file:查看文件后几行,可选参数-n指定查看后几行,tail -f file可以实时跟踪内容的变化
- ln -s 链接目录/文件 软链接名:创建软链接(类似于快捷方式),ln -s /root/info myInfo,pwd -P 可以显示真正的路径
- rm -rf 链接名:只删除一个链接,不会影响链接的内容
- rm -rf 链接名/:会删除原文件
- ln 文件名 链接名:创建一个硬链接
- history [n]:查看历史命令,可选参数 n表示刚刚执行的前十条数据
- 重复执行:!数字
- 清空历史:history -c
- date:获取当前时间
- date+%Y
- date+%m
- date+%d
- date+"%Y-%m-%d %H:%M:%S"
- date+%s:时间戳,以秒计数
- date -d "1 days ago" 显示前一天
- date -d "-1 days ago" 显示明天时间
- date -s 字符串时间:设置系统当前时间
- cal:查看日历
- cal -n:查看n个月的日历
- useradd 用户名
- useradd -g 组名 用户名
- passwd 用户名:设置密码
- id 用户名:查看用户信息
- cat /etc/passwd:查看创建哪些用户
- 切换用户 su 用户名
- 查看最原始登录的用户:who am i,whoami查看当前用户
- usermod -g 组名 用户名:将用户添加到某个组
sudo设置普通用户root权限
删除用户
- userdel [-r] tony:可选参数r也会将/home目录下的文件删除
新增组
- groupadd 组名
- groupmod -n haircut meifa:修改组名
查看组:cat /etc/group
删除用户组:groupdel 组名
修改文件权限
- chmod [{ugoa}{+-=}{rwx}] 文件或目录,u:所有者,g:所有组,o:其他人,a:所有人
- chmod [mode=421] 文件或目录
- chmod -R 777 目录:开放该目录下所有文件的权限
修改文件所有者
- chown [-R] 用户名 文件名:可选参数R递归修改
修改所属组
- chgrp 组名 文件名
- find [搜索范围] [选项]
- find -name info :当前目录查找info文件
- find /root -name info:指定路径查找info文件
- find /root -name "*.cfg":通配符查找
- find /home -user tony:根据用户查找
- find /root -size +10M:查询root目录下大于等于10M的文件
locate快速定位文件路径
- 查询之前先执行updatedb更新数据库
- locate 文件名或目录名
- which 命令:查询命令
- whereis 命令:查询命令
grep查找
- grep [-n] 查找内容 源文件:-n显示匹配行及行号
- grep -n boot initial-setup-ks.cfg
- 管道查询:ls | grep .cfg
gzip/gunzip
- 压缩:gzip 文件,只能压缩文件
- 解压:gunzip 文件.gz
zip/unzip
- zip [-r] 文件:-r压缩目录,zip -r myLogs.zip logs
- unzip [-d] 文件:d指定压缩后存放的目录,unzip -d /tmp myLogs.zip
tar打包
- tar [选项] XXX.tar.gz 将要打包进去的内容
- -c :打包文件
- -C:解压到指定目录
- -v:显示详细信息
- -f:指定压缩后的文件名
- -z:打包同时压缩
- -x:解包.tar文件
- tar -zcvf temp.tar.gz initial-setup-ks.cfg biz.0.log test.txt 打包并压缩
- tar -zxvf temp.tar.gz -C /tmp 解压并指定目录
- 安装yum install tree
- tree 目录名
- du 查看文件和目录占用的磁盘空间
- du [选项] 目录/文件
- du -sh 查看当前目录占用的磁盘空间大小
df查询磁盘空间的使用情况:df -h
查询内存:free -h
查看设备挂载情况:lsblk -f
mount/umount 挂载/卸载
- mount /dev/cdrom /mnt/cdrom/
- umount /mnt/cdrom/
- 设置开机自动挂载
- vim /etc/fstab
磁盘分区
- fdisk -l 查询分区详情
- fdisk 硬盘设备名
(1)查看进程
- ps aux | grep xxx:查看系统中所有进程
VSZ:虚拟内存 RSS:物理内存 TTY:当前终端 STAT:状态 START:当前进程的启动时间
TIME:当前进程使用cpu的时间
- ps -ef | grep xxx:查看子父进程之间的关系
PPID:父进程
(2)终止进程
- kill -9 进程号:9表示强迫进程立即终止
- killall 进程名称:通过进程名称杀死进程,也支持通配符,谨慎使用
(3)查看进程树:pstree -p
(4)top实时查看当前进程状态
- top -d 秒数 :每个几秒刷新
- top -i:过滤闲着的进程
- top -p 进程id:查看某一个进程
PR:任务调度优先级,NI:用户指定的NI值优先级,VIRT:虚拟内存,RES:实际内存
SHR:共享内存 S:当前状态
top实时监控按k,可以杀死进程,按u可以栓选
(5)网络状态和端口监控
- netstat -anp | grep 进程号 :看该进程网络信息
- netstat -nlp | grep 端口号:看网络端口号占用情况
crontab
- -e 编辑crontab定时任务
- -l 查询crontab任务
- -r删除当前用户所有的crontab任务
查看安装的包:rpm -qa
- rpm -qa | grep firefox
- rpm -qi firefox 查询详细信息
卸载软件包
- rpm -e RPM软件包 :rpm -e firefox
- rpm -e --nodeps 软件包 :不检查依赖直接卸载
安装软件包
- rpm -ivh RPM包全名
注意:rpm存在依赖关系,会安装失败的
yum的使用
- yum - y install 软件包 :-y表示所有的提问都是yes
- yum update 软件包
- yum remove 软件包
- yum list 显示安装包
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
1)脚本格式:脚本以#!/bin/bash 开头(指定解析器)
2)执行脚本
- bash / sh + 脚本文件绝对位置或相对位置
- 直接输入脚本文件绝对位置或相对位置(需要文件具有可执行权限)
- . / source 脚本文件绝对位置或相对位置
(1)系统变量
- $HOME、$PWD、$SHELL
(2)自定义变量
- 定义变量:变量名=变量值,=两边不能有空格,默认是局部变量
- 提示变量为全局变量:export 变量名
- 在父shell定义的全局变量,子shell可以访问到,但是子shell对其修改不会影响父shell变量的值
- 定义只读变量:readonly 变量名=变量值,只读变量不能修改,不能unset
- 撤销变量:unset 变量名
(3)位置参数
- $n:n为数字,$0代表脚本名称,十以上要用大括号包含,如${10}
- ./helloworld.sh asda
(4)$# :获取所有输入参数个数,常用于循环
(5)获取输入的命令参数
- $*:把获取到参数当成一个整体,当"$*" 会当成一个整体输出
- $@:把获取到参数当成一个集合,当"$@"会一个一个输出
- 不加引号,$*和$@类似
(6)$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体是哪个数,由命令自己决定),证明上一个命令执行不正确了。
基本语法:$((运算式)) 或 $[运算式],双括号里面可以加数学符合,例如写> 、<
基本语法
- test condition:test $a = hello 中间要有空格
- [ condition ]:前后一定要有空格,[ $a = Hello ]
- 条件非空即为true,[ sda ]返回true ,[ ] 返回false
常用判断条件
[ -x add.sh ]
多条件判断 && 逻辑与 || 逻辑或
类似于三元运算符:[ $a -lt 20 ] && echo "$a < 20 " || echo " $a >= 20"
(1)if判断
单分支
if [ 条件判断式 ] ;then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
(2)case语句
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
*)
默认程序3
;;
esac
(3)for循环
for ((初始值;循环控制条件;变量变化))
do
程序
done
for 变量 in 值1 值2 值3 ...
do
程序
done
例如:for os in linux windows macos;do echo $os;done
例如:for i in {1..100};do sum=$[$sum+$i];done;echo $sum
(4)while循环
while [ 条件判断式 ]
do
程序
done
系统函数
- basename [string / pathname] [suffix]:basename命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。basename /root/scripts/parameter_for_test.sh .sh
- dirname 文件绝对路径:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分),取文件路径的绝对路径名称
- 脚本 $(命令) 系统函数调用
自定义函数
[ function ] funname[()]
{
Action;
[return int;]
}
注意:
- 必须在调用函数地方之前,先声明函数,shell是逐行运行。不会像其他语言一样先编译。
- 函数返回值,只能通过$?系统变量获得,可以显示加;return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
特殊字符
- ^匹配一行的开头:cat /etc/passwd | grep ^a
- $匹配一行的结束:cat /etc/passwd | grep bash$
- .匹配任意字符:cat daily_archive.sh | grep r..t
- *匹配0次或多次:cat daily_archive.sh | grep ro*t
- []字符区间:[0-9]匹配一个0-9的数字
- \转义字符
cut [选项参数] filename
- -f:列号,提取第几列
- -d:指定分隔符,默认是“\t”
- -c:按字符进行切割 后加n表示第几列
例子:cat /etc/passwd | grep bash$ | cut -d ":" -f 1,6,7
cat /etc/passwd | grep bash$ | cut -d ":" -f 1-4
cat /etc/passwd | grep bash$ | cut -d ":" -f 2-
awk
例子:cat /etc/passwd | awk -F ":" '/^root/ {print $7}'
cat /etc/passwd | awk -F ":" '/^root/ {print $6","$7}'
cat /etc/passwd | awk -F ":" 'BEGIN{print "user,shell"}{print $6","$7}END{print "end of file"}'
cat /etc/passwd | awk -F ":" '{print $3+1}'
awk -F ":" '{print "文件名:"FILENAME" 行号:"NR" 列数:"NF""}' /etc/passwd
因篇幅问题不能全部显示,请点此查看更多更全内容