Linux
1.vim命令
1.1 一般模式
- yy 复制光标当前一行
- 数字yy 复制一段(从第几行到第几行)
- p 粘贴
- u 撤销上一步
- o 往下一行插入数据
- w 切换到下一个词
- dd 删除光标当前行
- shirt+d 删除当前光标行
- 数字dd 删除包含光标后多少行
- x 剪切一个字母 相当于del
- X 剪切一个字母 相当于Backspace
- yw 复制一个词
- dw 删除一个词
- shirt+4 移动到行尾
- shirt+6 移动到行头
- 数字+shirt+g 移动到目标行
1.2 编辑模式
- i 当前光标前
- a 当前光标后
- o 当前光标行的下一行
- I 光标所在行最前
- A 光标所在行最后
- O 当前光标行的上一行
1.3 命令模式
- :w 保存
- :q 退出
- :! 强制退出
- /要查找的词 n查询下一个 N往上查找
- :noh 取消高亮显示
- :set nu 显示行号
- :set nonu 关闭行号
- :%s/old/new/g 替换内容 /g 替换匹配到的所有内存
2.文件目录篇
-
pwd 查询当前文件的绝对路径
-
ls 查看当前目录下所有的文件和文件夹
-
cd - 返回上一次操作的路径
-
ls-l 查询当前目录文件的权限
-
mkdir-p 创建多级文件夹
-
rmdir-p 删除多级文件夹
-
rm -rf /* 删除跑路
-
touch 创建文件
-
cp -r 递归复制整个文件夹
-
mv 移动文件位置(可以重命名)
-
cat 查看文件内容
-
less 分屏显示文件内容
-
echo[内容] >> 文件 将内容写入文件
-
tail -n [行数] 查看文件末尾多少行
-
tail -f 实现监控文件
-
ln -s [原文件] [文件名] 软连接 类似于windows中的快捷方式
-
cal -y 查看今年日历
-
date +“%Y-%m-%d %H:%M:%S” 获取时间 年月日时分秒的格式
3.用户管理篇
-
useradd -g [组名] [用户名] 添加用户到哪个组
-
sudo 设置普通用户具有root权限
-
chown -R 777 [文件] 修改文件读写执行权限
-
chown -R 用户 文件或目录 修改所有者
-
chgrp -R 组 文件或目录 修改所属组
4.搜索查找类
-
find [搜索范围] -name [文件名] 查找文件或者目录
-
locate [文件] 快速定位文件路径
5.压缩
- tar -zcvf [文件名tar.gz] [文件名] 压缩多个文件
- tar -zxvf -C [路径] 解压
6.磁盘管理篇
-
du --max-depth=1 -ah 查看文件和目录占用磁盘空间
-
df -h 查看磁盘空间使用情况
7.进程管理类
- ps -ef 查看当前系统进程信息
- systemctl status [进程] 查看进程状态
- kill [pid] 杀死进程
- pstree 查看进程树
- top 实时查看进程信息
- netstat -anp | grep [进程号] 查看网络进程信息
- netstat -nlp | grep [端口号] 查看网络端口占用情况
- crontab -e 系统定位任务
8.shell脚本
1.入门
1.创建helloworld.sh 文件
2.编辑文件
#!/bin/zsh
echo "hello world"
3.运行
./helloworld.sh
2.变量
1.声明局部变量
liubo@lb scripts % new_var=HelloWorld
liubo@lb scripts % echo $new_var
2. 将局部变量改为系统变量
liubo@lb scripts % export new_var
3. helloworld.sh引用变量
echo $new_var
3.特殊变量
3.1 $0
# $0为脚本名称 $1-$9为传参
#!/bin/zsh
echo '=====$n======'
echo sricptname: $0
echo parameter: $1
echo parameter: $2
3.2 $#
# 获取输入参数个数
echo parametercount: $#
3.3 $* $@
# 获取参数 *把参数看成一个整体 @把每个参数区分对待 循环遍历使用
echo $*
echo $@
echo '========$*=========='
for par in "$*"
do
echo $par
done
echo '========$@========='
for par in "$@"
do
echo $par
done
# 结果
========$*==========
a b c d e f g
========$@=========
a
b
c
d
e
f
g
3.4 $?
# 最后一次命令返回的状态 如果返回0证明上一个命令执行成功
liubo@lb scripts % echo $?
4.运算符
# 括号里面做运算
echo $[]
5.条件判断
[ 'hello' = 'hello' ]
# 前后需要有空格
# 整形用lt gt le ge
[ 20 -lt 30 ]
6.流程控制
# if
if [条件式]
then
程序
elif [条件式]
then
程序
fi
#case
case $变量名 in
"值1")
程序
;;
"值2")
程序2
;;
*) # default
程序3
;;
esac
# for1
for 变量 in 值1 值2
do
程序
done
#for2
for((初始值;循环控制条件;变量变化))
do
程序
done
liubo@lb scripts % for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
#while
while [条件控制]
do
程序
done
a=1
while [ $a -le $1 ]
do
sum=$[ $sum + $a ]
a=$[ $a + 1 ]
# let sum+=a
# let a++
done
echo $sum
7.读取控制台输入
read -t 10 -p "请输入您的大名:" name
echo $name
8.函数
8.1系统函数
#basename 获取脚本名
# helloworld.sh 最后得到helloworld
echo sricptname: $(basename $0 .sh)
#dirname 获取脚本路径名
echo sricptname: $(cd $(dirname $0); pwd )
8.2 自定义函数
#!/bin/zsh
funtion aa(){
s=$[ $1 + $2 ]
echo $s
}
read -p "请输入第一个值:" a
read -p "请输入第二个值:" b
sum=$(add $a $b)
echo "和为:" $sum
echo "和的平方:" $sum * $sum
# 小案例 日志归档
#!/bin/bash
# 首先判断输入参数个数是否为1
if [ $# -ne 1 ]
then
echo "参数个数错误!应该输入一个参数,作为归档目录名"
exit
fi
# 从参数中获取目录名称
if [ -d $1 ]
then
echo
else
echo
echo "目录不存在!"
echo
exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)
# 获取当前日期
DATE=$(date +%y%m%d)
# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
# 开始归档目录文件
echo "开始归档..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
echo
echo "归档成功!"
echo "归档文件为:$DEST"
echo
else
echo "归档出现问题!"
echo
fi
exit
9.正则匹配
# ^:以什么开头
cat log | grep ^a
# $:以什么结尾
cat log | grep t$
# .:匹配任意一个字符
cat log | grep r..t
# *:匹配上一个字符0次或者n次
cat log | grep ro*t
# [] : 表示匹配某个范围内的字符
# \ : 转义,匹配某一特殊字符
cat log | grep 'a\$b' #需要用‘’将表达式引起来