#查看
#查看目录 [DIR] 缺省默认为查看当前目录
ls [DIR] #查看目录中的内容简单列表
ll [DIR] #查看详情列表
ls -la [DIR] #查看所有内容
#查看文件 输出至控制台=>标准输出
cat [-n] FILE_PATH #查看文件中的所有内容
head -n FILE_PATH #查看文件前n行的内容
tail -n FILE_PATH #查看文件后n行的内容
#查看/etc/profile文件的第6~10行的内容
head -10 /etc/profile>tmp.log
tail -5 tmp.log
rm -f tmp.log
grep 'CONTENT' FILE_PATH
#管道符 【允许多重管道】
cat /etc/profile|grep usr
#重定向
STD_CONSOLE_OUT>FILE_PATH
# > 覆盖模式
# >> 追加模式
COMMAND>>info.log 2>>error.log #正常信息和异常信息分别输出到不同文件
COMMAND>>info.log 2>>&1 #正常信息和异常信息输出到相同文件
#权限
#权限 层级 所有者 所属组 资源大小 创建时间 资源名称
drwxr-xr-x. 3 root root 19 May 25 07:43 script
- --- --- ---
# 第一部分
# - 文件
# d 目录
# l 链接 类似于windows快捷方式
# 后三个部分分别代表三个身份用户对该资源的权限
# 所有者
# 组内用户
# 组外用户
# 权限的构成 r=>read读 w=>write写 x=>execute执行
权限类型 二级制 十进制
--- 000 0
r-- 100 4
-w- 010 2
--x 001 1
rw- 110 6
r-x 101 5
-wx 011 3
rwx 111 7
#修改操作权限和所有权
chmod (U/G/O)(=/+/-)(rwx) SOURCE
chmod 777 SOURCE
chown USER_NAME:GROUP_NAME SOURCE
#目录 默认权限:755
#绝对与相对路径 PATH
#相对路径
./
PATH
#绝对路径
/PATH/...
#创建目录【支持多并列】
mkdir DIR_NAME[ DIR_NAME2 ...]
#创建多级目录
mkdir -p PATH/SUB_PATH/...
#删除目录
rm -d PATH #删除空目录
rm -rf PATH #递归删除目录指向的所有资源(包括目录)
#查看当前目录
pwd
#目录切换
cd PATH
cd ../ #退回上一级
cd ~ #退回当前目录的主目录
cd / #退回当前虚拟机的根目录
#文件 默认权限:644
#创建
touch FILE_PATH #创建空文件
vi[m] FILE_PATH #创建并操作、编辑文件
#默认进入命令行模式
shift+g #调至最后一行
/FIND_CNT #在当前文件中检索包含FIND_CNT内容的所有行
#=> 通过o/i切换至编译模式
#=> 通过esc返回命令行模式
# 退出
shift+z+z #快捷键:保存并退出
:x #快捷键:保存并退出
:wq! #:w :q !强制执行
#编辑
#删除
rm -f FILE_PATH
#移动
mv FILE_PATH DEST_DIR #移动
mv FILE_PATH DEST_FILE_PATH #[移动且]重命名
#拷贝
cp FILE_PATH DEST_DIR
#文件统计:行数,单词数,字符数
wc FILE_PATH
#用户
vim /etc/passwd
用户名 密码 用户ID 分组ID 组名 当前用户主目录 当前用户的shell命令集类型
henry : x : 1000 : 1000 : henry : /home/henry : /bin/bash
mysql : x : 27 : 27 : MySQL Server: /var/lib/mysql : /bin/false
#创建用户
useradd USER_NAME -g PRIMARY_GROUP -G SECONDARY_GROUP -d USER_PATH -p USER_PASSWORD
#删除组内用户
gpasswd -d USER_NAME GROUP_NAME
#删除用户【自动级联删除已绑定的分组用户列表中的用户】
userdel USER_NAME
#修改用户信息
usermod USER_NAME -G GROUP_NAME #追加次分组
#分组
vim /etc/group
组名 密码 组ID 组内用户
henry : x : 1000: henry
mysql : x : 27 :
#添加分组
groupadd GROUP_NAME
#删除分组
groupdel GROUP_NAME
#进程操作
kill -9 PROCESS_ID
#执行命令
#原始命令
ls -la /etc/profile.d|grep vim
#特殊方式
#将命令执行的结果存入文件
ls -la /etc/profile.d|grep vim>rst.log
#编程
#设置shell制表位:默认为8,修改为4
vim /etc/vimrc
--------------
set tabstop=4
--------------
#保存退出后重新连接客户端即可
#可执行文件
#创建并编辑脚本
touch cha01.sh
chmod u+x char01.sh
vim char01.sh
--------------------
#!/bin/bash
...
--------------------
#执行脚本并可根据需要传参
./PATH/cha01.sh PARAM1 [PARAM2 ... PARAMN]
#脚本中如何解析参数
$# #表示参数的数量
$n #表示第n个参数的值
#变量
VAR_NAME=VALUE #声明并赋值,等号右边的值决定了左边变量的数据类型
unset VAR_NAME #取消变量
echo $VAR_NAME #使用变量需要加 $
#将命令执行结果存入变量
RST=`ls /etc/profile.d` #【反引号执行命令有阻塞功能】
RST=$(ls /etc/profile.d)
#当命令中出现变量导致不能正常执行
#解决方案一:先将命令字符串拼接完成,再以命令的方式执行
RST="mv $SOFTWARE_DIR$RST $SOFTWARE_DIR$jdk"
RST=$RST
#解决方案二:用eval表达式完成拼接和命令转换执行的过程
eval mv $SOFTWARE_DIR$RST $SOFTWARE_DIR$jdk
#算术表达式 ((ARITHMETIC_EXPRESSION))
VAR=$((NUM+NUM2))
((VAR++)) #自增
VAR=`expr 1 + 5`
#分支
# 单分支
if []
then
...
fi
# 双分支
if []
then
...
else
...
fi
# 多分支
if []
then
...
else if []
then
...
else
...
fi
#条件表达式书写规范
if [ $VAR -gt/ge/lt/le/eq/ne $VAR2/CONST -a/-o CONDITION2 ]
if (($VAR>=CONST && $VAR<TOP))
if [[ $STR=~REGEX ]] # =~ 支持正则 【=~前后不加空格】
if [[ $STR == *"REGEX" ]] # == 支持通配符
if [ $VAR ] # 是否存在变量 VAR
str="MY long string"
case $str in
*release*)
...
;;
*server*)
...
;;
*libs*)
...
;;
*) #default
...
;;
esac
#循环
#数组
arr=(henry pola ariel) #创建数组
${arr[@]} ${arr[*]} #将数组转化为列表后返回
${arr[INDEX]} #获取数组执行下标元素
${#arr[@]} #获取数组长度
for item in arrStr / ${arr[@/*]} / {1..10} / seq(...)
do
...
done
i=0
while ((i<=10))
do
...
((i++))
done
#常用函数
#字符串函数 str="aa,bb,cc,dd"
#非空
[[ $str ]] [ -n "$str" ] #true if not empty
[ -z "$str" ] #true if empty
#获取字符串长度
${#str} # 11
#数组:空格隔开的字符串
arr=(${str//,/ })
#[*][@]将空格隔开的字符串展开成列表
${str[*]} # array("aa","bb","cc","dd")
${str[@]}
#获取数组长度
${#str[@]} # 4
#截取字符串 str=aabbbbcccc_def_zdef_.ghi_abcjkl.zip
#左下标截取 0:startIndex 4:length
${str:0:4} # aabb
#右下标截取 0-4:startIndex 4:length
${str:0-4:4} # aabb
#左最小匹配删除或截取左最小匹配右侧内容
${str#a*c} # ccc_def_def_.ghi_abcjkl.zip
#左最大匹配删除或截取左最大匹配右侧内容
${str##a*c} # jkl.zip
#右最小匹配删除或截取右最小匹配左侧内容
${str%z*p} # aabbbbcccc_def_zdef_.ghi_abcjkl.
#右最大匹配删除或截取右最大匹配左侧内容
${str%%z*p} # aabbbbcccc_def_
#字符串替换 str=apple_banana_apple_phone
#左一替换
${str/apple/APPLE} # APPLE_banana_apple_phone
#左全替换
${str//apple/APPLE} # APPLE_banana_apple_phone
#以什么开始替换
${str/#apple/APPLE} # APPLE_banana_apple_phone
#以什么结束替换
${str/%phone/APPLE} # APPLE_banana_apple_phone
#grep 【文本查找】
#获取文件路径
dirname FILE_PATH;
#获取文件名
basename FILE_PATH;
#资源检索
find PATH [option] SOURCE_NAME
find / -name mysql
--------------------------
/etc/selinux/targeted/active/modules/100/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/share/mysql
--------------------------
#sed
#非交互流式文本【编辑】器
#对文本文件进行增、删、改、查等操作
#支持按行、字段、正则匹配文本内容
#基本语法
sed [-opts] 'COMMAND' FILE_PATH
#选项参数
-n #编辑结果不做输出
-r #支持正则匹配
-e #支持多条有分号隔开的sed命令
sed -n -r -e 's/usr/USER/g;s/profile/PROFILE/g' profile
-f #将命令封装在文件中使用
vim opr.sed
---------------------
s/usr/USER/g;
s/profile/PROFILE/g;
---------------------
sed -f opr.sed profile
-i #无-i只输出预览,可以重定向到新文件或覆盖原文件,有-i直接修改源文件
sed -i -f opr.sed profile
#动作说明
i #插入
#"unset i"上一行插入AABBCC
sed -i '/unset i/i AABBCC' profile
a #新增
#"unset i"下一行插入AABBCC
sed -i '/unset i/a AABBCC' profile
#最后一行后插入AABBCC
sed -i '$a AABBCC' profile
d #删除
#删除所有内容为AABBCC行
sed -i '/AABBCC/d' profile
#删除以# 开始的行或空白行
sed -i -e '/^# /d;/^ *$/d' profile
p #输出
#从第30行输出到最后一行
sed -n '30,$p' profile
s #替换
sed -n -r -e 's/usr/USER/g;s/profile/PROFILE/g' profile
#awk
#数据分析生成报告
#按【行】读入文件,【以空格默认切割】,对分割开的内容进行分析处理
#awk有自己的编程语言,称之为样式扫描处理语言
#基本语法:先正则抽取,然后操作
awk '{\PATTERN\ + ACTION}' {FILE_PATH}
#三种调用方式
awk [-F SEPERATOR] 'COMMAND' FILE(S)
#!/bin/bin 首行为awk命令 或 #!/bin/awk
awk -f awk-script-file FILES(S)
#自定义函数
[function] funcName[()]{
...
echo "RETURN_VALUES"
}
rst=`funcName arg1 arg2 ... argn`
echo $rst
#数学函数
#生成序列
seq -s 'SEPERATOR' -w|-f "B%0NgE" 【begin】 step 【end】
-s ',' # 指定分隔符
-w # 高位自动补零
-f "B%0NgE" # B 常量前缀字符串【可选】
#%0Ng
# % 左边界
# 0 意味着高位需要补零
# N 表示宽度(数值位数)
# g 右边界
# E 常量后缀字符串【可选】
#进制转换
$[10#VALUE] 08
#日期函数
# 2021-05-29 年-月-日
date +%F
# 1622287195 时间戳
date +%s
# 2021-05-29 19:12:51 年-月-日 时:分:秒
date +'%Y-%m-%d %H:%M:%S'
# date -d "date_str/@timestamp ±n day/month/year" +%F
# 2021-05-28
date -d yesterday +'%Y-%m-%d'
# 2021-05-30
date -d tomorrow +'%Y-%m-%d'
# 2020-12-31
date -d "2021-1-1 -1 day" +%F
# 2021 年
date +%Y
# 2 季度
$((($(date +%m)-1)/3+1))
# 05 月
date +%m
# 149 年日
date +%j
# 29 月日
date +%d
# 6 周日
date +%w
# 21 年周
date +%W
# 月周
#需要自定义函数
# 19 时
date +%H
# 12 分
date +%M
# 51 秒
date +%S
2481

被折叠的 条评论
为什么被折叠?



