1、常用命令
ssh -p 端口号 用户名@主机ip 远程连接(-p可选)
ls 查看当前文件夹文件(不包含隐藏等文件)
ls -l = ll 查看文件夹文件(包含详细信息)
ls -a 查看所有文件(包含隐藏文件)
ls -R 递归查看所有文件
pwd 查看当前目录
cd 切换文件夹
cd ~ 或 直接cd 快速返回家目录
cd - 返回上一次目录
mkdir +文件夹名 新建文件夹
mkdir -p 创建多层文件夹
history 查看使用的历史命令
cat 查看文件内容
cut 截取文本。-d '分隔符' 按分隔符截取。 -f 列数1,列数2....... 获取截取的列数
rm 删除文件
useradd +用户名 创建用户 passwd 设置密码
userdel +用户名 删除用户
usermod +选项 +用户名 修改用户信息
home目录下保存用户信息
echo相当于print echo +数据 > 文件名 可将数据写入文件(一个大于>是覆盖写,两个大于>>是追加写)
printf 除去不同变量间用空格隔开,同c语言(推荐)
r w x(可执行) 权限顺序:user用户 --> 用户组 --> 其他用户
chmod 二进制 文件名. chmod u/g/o+-r/w/x +文件名 改权限。查看文件可能需要读和执行两个权限
chown +user:group +文件 改变文件的拥有者和组
| grep 过滤
passwd目录保存用户信息
groupadd 增加用户组
groupdel 删除用户组
groupmod +选项 +用户组 修改用户组
dir 同ls ,但无文件颜色显示
mv 移动文件或重命名文件,存在修改的目录则是移动,不存在就是重命名
tac 从最后一行向上读
cat f1 f2 > f3 将f,f2合并到f3,不删除f1,f2
cat -b 带行号查看
more/less 分屏查看 (more下一行按回车,less下一页按空格、b上一页、q退出)
tail +选项 +文件 查看文件的最后几行 -f 动态查看,一直监听 -n 限制查看行数
du 查看文件大小
df -h 查看磁盘空间占用情况
lsblk 查看硬盘设备挂载情况
ps -aux查看进程 ps -df 使用标准语法(Unix风格)查看系统上的每个进程
kill -9 杀死进程(kill -9 进程id)
pstree 查看进行树(需要安装)
top 实时监控内存进程
netstat -anp 查看进程网络信息(需要安装net-tools)
netstat -nlp 查看网络端口号占用情况和套接字信息
netstat -tunlp 仅查看网络端口号占用情况
crontab 系统定时任务 -e编辑定时任务 -l 查询任务 -r 删除当前用户的所有任务
find [路径] [选项] [文件名]. 查找 /etc 目录下以 conf 结尾的文件,文件名区分大小写,例如:find /etc -name '*.conf'
diff 逐行比较两个文件差异。 -i 不检查大小写
ln -s 文件路径名 连接名 创建软连接
vim :set nu显示行号;:set nonu取消显示行号 /xxx搜索xxx,n/N跳转下一个/上一个搜索结果;:noh取消高亮;
:s/old/new/g光标所在行old替换为new; :%s/old/new/g替换全部; :1,5s/abc/xyz/g替换1-5行
yum 下载并安装
wget 下载
curl url地址 获取网络请求或下载 -O下载文件
rpm [参数] 软件包. -i安装软件包;-e卸载软件包;-qa查询已安装的所有软件包;-ql查询某个软件的安装路径
如:rpm -ivh xxx 安装软件包。-v显示命令执行过程;-h安装软件包时列出标记
2、文件权限![](https://i-blog.csdnimg.cn/blog_migrate/3d6ef5a89760abecc3cb22a8dd68f99a.png)
权限以三位为一组,依次为user,user组,其他用户权限
File Type:
l 代表软连接
d 表示文件夹
— 表示普通文件
3、shell基础命令
1、注释
1、单行注释#
2、多行注释:
:<<xxx
注释内容
xxx (注:xxx可自定义,推荐EOF)
2、获取变量值
变量的声明,修改,调用(${}),删除(unset)
变量命名用下划线连接
#!/bin/sh
echo "hello world"
a=1
b=2
echo ${a},${b}
echo '${a},${b}' #单引号仅当作字符串,不考虑特殊含义
echo "${a},${b}" #双引号考虑
3、将命令结果赋值给变量的两种情况``和$()
c=`echo ${a}`
d=$(echo ${b})
echo "c=${c},d=${d}"
4、local 定义局部变量
多使用在函数内部,定义局部变量。shell 默认定义的是全局变量,即使在函数内部。
5、env查看所有环境变量
6、set查看所有变量
7、readonly 只读
readonly e=5
#e=2 #报错
echo e=${e}
8、unset删除变量(不可删除只读变量)
unset a
echo a=${a} #a被删除,无值
9、$0...$n 表示运行命令后添加的参数,0是文件名 ,1是第一个参数...
echo "文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
echo "参数总个数: $#" # $#表示传入的参数总个数
echo "参数分别是:$*" # $*显示所有传入的参数
echo "当前脚本ID:$$" # $$当前脚本的ID
echo "后台最后一个进程ID: $!" # $!显示后台最后一个进程ID
echo "$@" # 同$#
echo \$\_: "$_"
echo "程序返回:$?" #返回0表示程序无错误,其他值表示有错误
10、字符串的拼接(直接拼,+都不用)
# shell 默认只有字符串一种数据类型,没有int double等
key=abc
value=def
str1=$key$value #直接拼接为abcdef
echo str=$str1
str2=${str1}ghi #可以变量与字符拼接等各种拼接方法
echo $str2
11、获取字符串的长度 在字符串前面加#
echo "str1的长度:${#str1}"
echo "str2的长度:${#str2}"
12、字符串的截取
1、从指定索引位置截取
${字符串:开始位置:截取长度}
str3="abcdefghijklmn"
echo ${str3:3:5} #字符串只能是接收值的变量,不能是字符串
echo ${str3:3} #没有截取长度默认截取到末尾
echo ${str3:0-5:3} #从右边开始计数,从左边开始计数索引从0开始,从右边
索引从1开始
2、从指定字符开始截取
echo ${str3#*def} #截取后面的字符串
echo ${str3#abc} #最靠近左边的不用*
echo ${str3##*g} #两个##表示从右边开始截取,遇到符合的就退出
echo ${str3%def*} #%与#作用相反,保留左侧的字符串,但用法相同也有%%
13、数组
#创建数组(用空格隔开)
array1=(a b c d)
echo ${array1} #不带索引输出数组,默认值输出0号索引的值
echo ${array1[0]}
echo ${array1[1]}
echo ${array1[2]}
14、关联数组(键值对) declare -A ...
declare -A array2=(["a"]="1" ["b"]="2")
array2["c"]="3"
array2["d"]="4"
echo ${array2["a"]} #通过key获取值
echo ${array2["b"]}
echo ${array2["c"]}
echo ${array2["d"]}
echo ${array2[*]} #使用*和@获取所有值
echo ${array2[@]}
15、获取数组中的所有元素
echo ${array_name[@]} //使用 @ 符号可以获取数组中的所有元素
16、获取数组长度的方法
echo ${#array1[*]} //*
echo ${#array2[@]} //@
17、运算符
1、算数运算符 + - * / % = == !=
echo `expr 1 + 1` #`expr x + x`形式,要注意格式
echo `expr 2 \* 2` #乘号比较特殊,是特殊符号,需要转义
echo $((2+3)) #$(())形式,把表达式用两个小括号包裹起来(推荐)
2、关系运算符
# -eq 两值是否相等
a=10
b=20
if [ "${a}" -eq "${b}" ];
then
echo "a=b"
else
echo "a!=b"
fi
# -ne 两数是否不相等, -gt 左值>右值, -lt 左<右, -ge >=, -le <=
# 多用在if判断条件,while判断条件中
18、read 输入函数
-p加提示,-t设置超时时间,-a xxx 把读取的数据赋值给>数组xxx
read -p "请输入姓名和年龄:" name age #多个值用空格隔开
read -p "请输入值存入数组:" -a array1
echo "name=${name}"
echo "age=${age}"
echo ${array1[0]}
echo ${array1[1]}
echo ${array1[2]}
19、echo -e开启转义,\c不换行
echo -e "abc\c"
echo "def"
#printf 同c语言printf
printf "%4.2f\n" 12345678.1234567
printf "%5.2f\n" 12.1
20、if判断语句
if [ $a == $b ] #注意格式
then # 表达式包裹在then和fi中
echo a=b
else
echo a!=b
fi
if两种判断条件格式
#read -ep "请输入比较值:" e
e=10
#1、[] 需要用字母做比较符
if [ $e -gt '10' ]
then
echo 'e>10'
elif [ $e -gt 5 ]
then # elif后也要加一个then
echo 'e>5'
else
echo 'e<=5'
fi
2、(()) 需要用符号作比较符(推荐)
if (($e > '10'))
then
echo 'e>10'
elif (($e > '5'))
then
echo 'e>5'
else
echo 'e<=5'
fi
3、[[ 条件 ]] 用法和作用同[],但支持正则,写法:[[ xxx =~ 正则表达式 ]]
21、let(常用于赋值语句)
let a++; #自增
22、for循环
1、逐个列出循环值
for i in 1 2 3 4 5 6
do #for循环语句要包裹在do...done中
echo $i
done
2、指定范围用{}大括号
for j in {1..10}
do
echo $j
done
3、除do...done以及两层括号外,其余和c语言一样。(推荐)
for((i = 0; i<10; i++))
do
echo $i
done
23、while循环
x=0
while (( $x<5 ))
do #循环语句包裹在do...done中
echo ${x}
let "x++" #自增
done
24、until循环
与while相反,条件为false循环,为true退出循环
25、case...esac选择分支结构
echo "输入你的分数(1-10):"
read score
case $score in
1|2|3|4|5) echo "不及格" #匹配条件写出 x1|x2|x3) 格式
;; #两个分号表示该句结束
6|7|8) echo "及格"
;;
9|10) echo "优秀"
;;
esac # 结束标志,就是case反过来写
26、select选择分支结构(了解)
27、跳出循环 break continue 同java
略
28、函数
function printInfo()
{
echo "hello world"
}
printInfo
带返回值函数(return)和带参数函数
sum()
{
echo $[${1}+${2}] #最好带上大括号${n},代表传入的第n个值
}
sum 2 5
$0 获取运行文件名
$# 获取传入参数个数
$* 和 $@ 获取所有函数。用引号括起来时,* 把所有参数拼接成一个整体。@不会
$? 获取最后一句命令的返回值。为0代表正常执行;其他都是依异常(shell默认所有数都为字符串,所以没有泛型的概念)
29、shell中系统任务设置(定时任务)
定时任务存放在 /etc/crontab 文件中。
格式为:* * * * * 命令
如:每一分钟执行一次/usr/local/shell/test.sh
*/1 * * * * /usr/local/shell/test.sh
修改crontab的配置后需要重启crontab,使配置生效
/bin/systemctl restart crond.service