VIM(文本编辑器)
一般模式
主要用于删除复制粘贴操作
yy:复制本行 y$:从当前光标到本行结束复制 y^:从光标往前到本行开始复制 yw:复制当前单词
dd:删除本行,其余同复制,d$ d^ dw
p:粘贴 u:撤回 x:剪切
shift+x:退格,删除 shift+R 替换模式
shift+$ 行尾 shift+^:一行开头
复制粘贴前面带数字可以选择几行
编辑模式
aio进入
shfit+o跳转到上一行插入
shift+i跳转到行头插入
shift+A跳转到行尾插入
命令模式
输入:进入,主要用于保存,回滚,退出等
set nu:显示行数
set nonu:关闭行数
q:退出 q!:退出不保存 wq:退出保存 w:保存
s/old/new 替换当前行匹配的第一个old为new
s/old/new/g 替换当前行匹配的所有old为new
%s/old/new/g 全文替换old为new
系统操作
setup,更改启动项
sync,手动保存数据,一般在关机前操作
shutdown,关机,定时关机,后面可跟参数,使用shutdown -c取消关机
poweroff,断电
halt,停机但不断电,可用作维护等
reboot,重启
man ls 指令手册
man 后面跟外部指令可以看到指令的详情描述
man -f 跟内部指令,可以看到指令介绍目录,自行进入观看
help+内部命令可以看到帮助,外部命令+ --help可以看到帮助
ctrl+l推界面,不是清屏 clear 同理,reset清屏
which,查看指令在什么路径下
type查看指令类型
文件目录类
查看,创建,删除,复制文件或目录等
pwd,显示当前工作目录的绝对路径
cd,切换工作目录 cd- 切换到上一个路径 cd…/ 切换到同一目录下的同级路径
ls,列举出当前目录下的所有内容 ls-a 显示全部文件包括隐藏文件
ls-l显示文件的详细信息
mkdir 创建文件夹(目录) rmdir,删除文件夹(目录)
mkdir-p 连着目录一块创建,比如a/b/c,创建3个
删除要嵌套删除,比如要删除a/b/c,就要 a/b/c a/b a/ 或者rmdir-p a/b/c 直接删除全部
touch创建一个空文件,vim也能创建,不过vim如果没有内容并且不保存退出变不会存为文件
cp复制 cp a /home/feavzd/ 把A复制到fevzd目录下
复制整个文件夹要用cp -r,递归复制整个文件夹
rm删除文件 rm-f 强制删除,不询问, rm-r 递归删除整个文件夹
删除当前目录下所有内容 rm ./*
mv移动文件 和cp用法相同。后面加上文件名可以做到重命名,也可以直接重命名,不移动 mv a b
查看文件,输出,显示内容
cat 查看文件, -n显示行号 一般查看比较小的文件
more 分屏显示文件内容
less,跟more类似,但功能更强大,可以翻页。搜索,用/向下搜索,?向上搜索,Q退出。搜索结果多个可以按n向下切换,shift+N向上切换
echo,输出内容到控制台 -e 支持反斜杠转译字符比如/n换行
输入内容到文件 >> 和 > 两个是追加,一个是覆盖
head 显示当前文件头部内容 默认是前十行,head -n 5,显示前5行,5可以更改为随意数字
tail 显示当前文件尾部的内容,和head用法相同
tail -f实时追踪该文档的所有更新,可以用来查看日志的更新,适合使用在不断增长的文件上
ln软连接,相当于windows的快捷方式, ln -s 后面加目录
删除软连接可以用rm,不会影响真实链接,但如果使用rm-rf 软连接名/删除,就会直接删除真实地址
ln不加-s便是直接创建硬链接
history,用来查看以及执行过的历史命令,history -c可以清楚历史记录
日期时间类
date显示当前系统时间
date +%Y显示当前年份
date +%m显示当前月份
date +%d显示当前是那一天
date “+%Y-%m-%d-%H:%M:%S” 显示当前年月日,时分秒
date -d’ 1 days ago’ 代表当前日期一天前,数字可以随意更改,附属就是未来的时间
date -s 重新设置当前系统时间 格式"2000-01-01 00:00:00"
cal 显示本月日历 后面加年份会显示那一年的日历
用户管理命令
用户相关操作
su,切换用户,如果切换root需要输入密码
useradd 用户名 新增用户,useradd -g 组名 用户名,添加新用户到某个组
更改密码,passwd 用户名
cat /etc/passwd 查看当前有多少用户
su 切换其他用户
sudo 临时赋予超级权限 etc/sudoers查看超级用户权限
userdel 用户名 删除用户
组相关操作
usermod -g 组名 用户名, 把某个用户移到某个组
groupadd,创建组,cat /etc/group 查看组
-g 手动指定组id,不手动指定则会自增1
groupdel 删除组 groupmop为修改组 -n为重命名组
groupmod -n 新组名 旧组名 重命名组名
比如groupmod -g 7777 -n feavzd destiny,这句就是修改feavzd用户的组id为7777,并把组名修改为destiny
newgrp切换组
文件管理类
文件属性,权限,所有者
文件属性drwxr-xr-x 第一位d代表文件类型,1-3位代表属主权限,分别为读写执行,rwx,4-6位代表属组权限,分别为读写执行,7-9代表其他用户权限,分别为读写执行,如果没有权限就是一个减号-ugoa
chmod改变文件权限 cbmod (ugoa) (±=) (rwx) 目录或者文件名
chown改变文件的所有者 -R递归更改目录下的所有者,chgrp,改变文件的所属组
寻找,定位,过滤,统计文件,管道符
find 查找文件或目录,-name 可以搜索指定名称的文件
-size 指定大小,+10M就是大于10MB的文件
locate定位,使用之前需要更新数据库,updatedb
grep,查找过滤,可以查找文件内的内容,比如
grep -n boot 文件名 就是查找这个文件内带有boot的那一行,一般和管道符配合使用
| 管道符 可以两个命令组合使用,比如ls | grep .cfg 就是把当前目录下带有.cfg后缀的文件显示出来
wc 统计文件,第一个是行数,第二个是单词数量,第三个是所有字节大小
文件的解压和压缩
gzip,压缩文件命令 gzip+文件名
gunzip,解压缩文件命令 gunzip + 文件名.gz
zip 压缩,unzip 解压缩,跟上一个相同,但zip可以保留原文件,并且可以包括目录递归压缩,兼具了打包和压缩的功能 -d为指定解压地点
tar,打包,不做压缩 tar 选项 XXX.tar.gz -c 打包归档,-x解包 -v显示详细信息 -z打包同时压缩,-C解压到指定目录 f指定名称
可以同时使用多个
磁盘和分区类
tree 加目录可以查看目录下的文件,更详细,查看的更多
du 查看文件和目录占用磁盘的情况 -h,以kb,mb,gb单位显示
-a 不仅查看子目录,还要包括文件 -c 显示所有文件和子目录之和后显示总和,-s只显示总和 -sh 查看该路径的总大小
df 查看磁盘剩余空间大小 -h 详细查看
free 查看剩余空间,-h查看详细
lsblk 查看设备挂载情况 -f显示文件系统的相关信息
mount/umount 挂载,卸载
fdisk分区 fdisk -l 查看磁盘分区详情
fdisk 硬盘设备名,对新增硬盘进行分区操作 只能在root用户下使用
进程管理类
查看进程状态
linux进程分为前台显示的进程和后台看不见的正在运行的进程
ps 查看当前进程状态
ps aux | grep xx 查看系统中所有的进程
ps -ef | grep xx 可以查看子父进程的关系
选项
a 列出带有终端的所有用户的进程
x列出当前用户的所有进程,包括没有终端的
u 面向用户的显示风格
-e 列出所有进程
-f显示完整格式的进程列表
-u 列出某个用户关联的所有进程
aux列出来的信息具体
user:该进程由哪个用户产生
pid:进程的id号
%cpu该进程占用cpu资源的百分比, %mem该进程占用内存的百分比 stat,进程状态,常见:R运行,S睡眠,T暂停,Z僵尸
s包含子进程,l 多线程 start该进程的启动时间 command,产生此进程的命令名
systemctl + start/stop/restart/staus 服务名
kill 选项 进程号 通过进程号杀死进程 killall 进程名 通过进程名终止进程 -9表示强迫进程立刻停止
pstree 查看进程树 -p显示进程的pid -u显示进程的所属用户
top实时监控系统进程的状态 -d 描述,指定top每隔几秒更新,默认是3秒 -i使top不显示任何闲置或者僵死的进程 -p 通过指定监控进程id来监控某个进程的状态
netstat 显示网络状态和端口占用信息
netstat -anp | grep 进程号 查看该进程的网络信息
netstat -nlp | grep 端口号 查看网络端口号的占用情况
-a 显示所有正在监听和未监听的套接字socket
-n拒绝显示别名,能显示数字的全部转化为数字
-l仅列出在监听的服务状态 -p表示显示哪个进程在调用
crontab 系统定时任务
-e编辑定时任务 -l 查询定时任务 -r删除当前用户的所有crontab任务 首先要启动crond
crontab -e 进入 编辑
有五个* 第一个是分钟,0-59 第二个是小时,0-23 第三个是天 1-31 第四个是月1-12 第五个星期几 0-7 0和7都代表周末
比如一个 * 就代表每分钟都要执行一次 逗号,代表不连续的时间,比如0 9,10,12 * * * * 就代表在每天的9 10 12的0分都要执行一次
-代表连续的时间范围,比如 0 5 * * 1-6就代表在周一到周六的凌晨5点整执行命令
*/n代表每隔多久执行一次 比如 */10 * * * *代表每隔10分钟执行一次
比如
*/1 * * * * echo "hello world" >> /root/hello
就是每隔一分钟吧helloworld写入到root下的hello文件里
RPM软件管理工具
rpm-qa 查询所有已安装的rpm软件包 ,一般都是使用rpm-qa |grep rpm 比如要查询火狐浏览器 rpm -qa | grep firefox
rpm -qi 查询安装软件详细信息 rpm -e 卸载安装包 rpm --nodeps,不检查依赖便卸载软件包 一般不推荐使用
rpm -ivh rpm包全名 -i install 安装功能 -v 显示详细信息 -h 进度条 --nodeps 安装前不检查依赖,不推荐
yum软件包管理器
yum,基于rpm的软件包管理器,可以自动处理依赖关系,一次安装所有依赖的软件包,不用一次次的下载
yum 选项 参数 -y对所有提问都回答yes
install 安装rpm软件包 update更新软件包 check-update检查是否有可用的更新 remove移除指定的软件包 list 显示所有软件包信息 clean清理yum过期的缓存 deplist 显示yum软件包的所有依赖关系
Shell脚本
shell是一个命令行解释器,接收用户和程序的命令,然后调用操作系统内核
可以先创建一个以.sh结尾的文件,然后vim编辑,输入#!/bin/bash 之后输入命令
保存退出后使用sh或者bash +文件相对或者绝对路径打开
比如 sh ./info.sh 或者 bash /home/用户名/info.sh
也可以直接输入绝对路径执行脚本,但要给执行权限
变量
系统预定义变量:$HOME $PWD $USER $SHELL等
自定义变量 例如 info=a 注意中间没有空格,如果要输入带空格的内容可以带引号"" 之后可以echo 加$ 加变量名查看
自定义变量可以由字母数字下户线组成,不能以数字开头,环境变量名建议大写,等号两侧不能有空格
export 变量名升级为全局变量
在脚本里输入echo变量可以输出
变量赋值默认是字符串,如果想要进行计算需要加 符 号 和 两 个 小 括 号 ( ( ) ) 或 者 符号和两个小括号(())或者 符号和两个小括号(())或者加一对中括号[]
readonly a=10则定义该变量为只读变量,不能更改
特殊变量
$n n代表数字,比如$1就代表第一个参数 0 代 表 该 脚 本 名 称 , 10 以 上 的 参 数 需 要 用 大 括 号 , 比 如 0代表该脚本名称,10以上的参数需要用大括号,比如 0代表该脚本名称,10以上的参数需要用大括号,比如{10},主要在脚本里编写,然后在用命令启动脚本时后面跟上参数
$#获取输入参数的个数,常用于循环判断参数的个数是否正确以及加强脚本的健壮性
$* 代表命令行中所有的参数,*把所有的参数看成一个整体
$@ 也代表命令行中所有的参数,不过@把每个参数区分对待
$? 最后一次执行的命令的返回状态,如果这个变量为0,证明上一个命令正确执行,如果这个变量不是0,则证明上一个命令执行不正确,具体返回数字由命令自己决定
expr 计算 要在计算符两边加空格 如果是乘号需要 \ *
直接使用 ( ( ) ) 或 者 (())或者 (())或者[] 即可 例如在shell脚本里输入
#!/bin/bash
echo Num:$[$1*$2] 然后在外面输入两个数字就能计算出他们的结果
语法条件判断
一般用test condition 加echo $?查看,前者用于查看条件判断,后者用于查看结果,如果是0则正确执行 比如a=100,test $a=100 echo $? 最后结果就是0
或者直接使用中括号[ condition ] 注意括号两边要有空格。这个条件非空即true,如果里面随便写东西也是true,不写东西才是false
常用判断条件
-eq 等于 -ne 不等于 -lt 小于 -le 小于等于 -gt 大于 -ge 大于等于
如果是字符串比较,=判断,!=不等于
按文件权限判断
-r 有读的权限,-w 有写的权限 -x有执行的权限
按文件类型
-e文件存在 -f 文件存在并且是个常规的文件(file) -d文件存在并且是一个目录(directory)
多条件判断,如果是要两个条件都满足可以使用&& 如果其中一个条件满足可以使用 || 比如 [ abc ] && echo ok || echo notok 结果就会输出ok [ ] && echo ok || echo notok 结果就会输出notok
流程控制
than 和分号;
单分支
if [条件判断式]
then
程序
fi
或者 if [条件判断式]; then echo ok; fi
用例1:
a=9
if [ $a -le 10 ]; then echo ok; fi
ok
用例2:
#!/bin/bash
if [ "$1"x = "feavzd"x ]
then
echo "welcome,feavzd"
fi
之后调用脚本并传入用户名便可,x是为了避免空字符串
多分支的话也可以用之前使用过的&&和 || 如果在一个括号内可以使用-a (and) 和-o (or) 和之前两个用法相同
比如
if [ $a -gt 18 ] && [ $a -lt 40]; then echo ok; fi
这样就是判断他是否大于18并且小于40
如果要用一个中括号完成也可以这样
if [ $a -gt 18 -a $a -lt 40]; then echo ok; fi
如果一条判断两个结果可以使用else
比如
if [ "$2"x -lt "18"x ]
then
echo "未成年人"
else
echo "成年人"
fi
判断传入的第二个参数是否小于18,是就是未成年人,否便是成年人
如果是多分支多判断结果可以使用elif,最后使用else
if [???]
then
echo ???
elif [???]
then
echo ???
else
echo ???
fi
case语句
case $变量 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
双分号相当于break
最后的 * 相当于是default
for循环
基本语法
for ((初始值;循环控制条件;变量变化))
do
程序
done
实例
for ((i=1; i<=$1; i++))
do
sum=$[ $sum+$i ]
done
echo $sum
比如输入的数字是10,则计算1+2+3一直加到10的和
基本语法2
for 变量 in 值1 值2 值3; do echo $变量名 done
会输出值123
比如
for a in aaa bbb ccc; do echo $a; done
也可以使用大括号加省略号
for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
while循环
while [条件判断式]
do
程序
done
实例
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
也是1-100的和
可以使用let,之后就可以使用java中常用的语言,比如i++,i+=这种
读取控制台输入
read 选项 参数 -p指定读取值时的提示符 -t 指定读取值等待的时间秒,如果不加-t表示一直等待
参数,指定读取值的变量名
read -t 10 -p "请输入姓名:" name
echo "welcome,$name"
自定义函数
函数就是一个轻量级的脚本
脚本就是复杂化的函数
调用函数的地方之前必须先声明,shell脚本是逐行运行,不会像其他语言一样先编译
函数返回值只能通过$?系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果,作为返回值,return后跟数值n(0-255) 0为成功,1-255表示执行错误
[function] 方法名()
{
action
[return int;]
}
实例
function sum(){
s=$[$1+$2]
echo "和为"$s 或者 直接echo $s
}
read -p "请输入第一个数字" a
read -p "请输入第二个数字" b
sum $a $b
或者
sum=$(sum $a $b)
echo "和为" $sum
文本处理工具
cut 选项参数 filename -f列号,提取第几行 -d 分隔符,默认是制表符\t -c 按字符进行切割,后加加n表示取第几列,比如-c 1
比如
cut -d "" -f 1 cut.txt 就是提取第一列
awk 可以把文件逐行读入,以空格为默认分隔符把每行切片,切开的部分再进行分析处理,可以同时处理行和列,功能比较强大
-f指定输入文件分隔符 -v赋值一个用户定义变量