########################## SHEEL 命令 #######################
#查看
#查看目录 [DIR] 缺省默认为查看当前目录
ls [DTR] #查看目录中的内容简单列表
ll [DIR] #查看详情列表
ls -la [DIR] #查看所有内容
#查看文件 输出至控制台=>标准输出
cat FILE_PATH #查看文件中的所有内容
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 1>>info.log 2>>error.log #正常信息和异常信息分别输出到不同文件
COMMAND 1>>info.log 2>>&1 #正常信息和异常信息输出到相同文件
#权限
#权限 目录层级 所有者 所属组 资源大小 创建时间 资源名称
-rw-r--r--. 1 root root 16 May 24 15:58 adjtime
- --- --- ---
#第一部分
# - 文件
# 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/…
#创建目录【支持多并列】
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命令集类型
renfeifan : x : 1000 : 1000 : renfeifan : /home/renfeifan : /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 组内用户
renfeifan : x : 1000 : renfeifan
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>
#编程
#设置shell制表位:
vim /etc/vimrc
----------------
set tabstop=4
----------------
#保存退出后重启连接客户端即可
#可执行文件
#创建并编辑脚本
touch cha01.sh
chmod u+x cha01.sh
vim cha01.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++)) #自增
#分支
#单分支
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 [ $VAR ] #是否存在变量 VAR true->表示存在,
false->不存在
[ ]在判断空字符串的时候需要加" "
[[ ]]在判断空字符串的时候不加" "也可以
用逻辑运算符&&或者|| 连接两个表达式的时候,一个[ ]不可以,但是[[ ]]就可以
#循环
#数组
ARR=(henry pola ariel) #创建数组
${ARR[@]} ${ARR[*]} #将数组转化为列表后返回,*整体,@个体
${ARR[INDEX]} #获取数组指定下标的元素
${#ARR[@]} #获取数组的长度,#取字符串长度
#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
#删除文件内容
sed -in '1,$d' start.cnf
#选项参数
-n #编辑结果不做输出
-r #支持正则匹配
-e #支持多条有分号隔开的sed命令
sed -n -r -e 's/usrUSER/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
#常用字符串
#字符串函数 str=“aa,bb,cc,dd”
#非空
[[
s
t
r
]
]
[
−
n
"
str ]] [ -n "
str]][−n"str" ] #true if not empty
[ -z “$str” ] #true if empty
#自定义函数
[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 右边界
#进制转换
$[10#VALUE] 08
#查看历史记录
history
#查看当前目录
pwd
#回到上一次目录
cd ./
#回到上一级目录
cd …/
cd / 根目录,root的上一层目录
cd ~ /root,root目录
#word count 统计单词,字母
wc