一、基础命令
1.1 查看
ls
:查看当前目录信息
-l:以列表方式显示
-h:文件大小单位显示,默认是字节
-a:显示隐藏文件和隐藏目录
tree
:以树状方式显示目录信息
pwd
:查看当前目录路径
clear
:清除终端内容
1.2 切换目录
cd 目录
:切换到指定目录
cd ~
:切换到当前用户的主目录
cd ..
:切换到上一级目录
cd .
:切换到当前目录
cd -
:切换到上一次目录
1.3 创建删除目录
touch 文件名
:创建指定文件
mkdir 目录名
:创建目录(文件夹)
-p:创建所依赖的文件夹
rm 文件名或者目录名
:删除指定文件或者目录
-i:交互式提示
-r:递归删除目录及其内容
-f:强制删除,忽略不存在的文件,无需提示
-d:删除空目录
-r:递归删除目录及其内容
rmdir 目录名
:删除空目录
1.4 复制
cp
:拷贝文件、拷贝目录
-i:交互式提示
-r:递归拷贝目录及其内容
-v:显示拷贝后的路径描述
-a:保留文件的原有权限
mv
:移动文件、移动目录、重命名
-i:交互式提示
-v:显示移动后的路径描述
1.5 重定向
>
:如果文件存在会覆盖原有文件内容,相当于文件操作中的‘w’模式
>>
:如果文件存在会追加写入文件末尾,相当于文件操作中的‘a’ 模式
命令 &> /dev/null
:将命令的结果重定向至垃圾桶(无论执行成功与否,屏幕都不会输出任何东西)
命令 0> /dev/null
:将命令的成功结果重定向至垃圾桶
命令 1> /dev/null
:将命令的失败结果重定向至垃圾桶
二、文件操作
2.1 查看文件内容
cat
:查看小型文件
more
:分屏查看大型文件
空格:显示下一屏信息
回车:显示下一行信息
b:显示上一屏信息
f:显示下一屏信息
q:退出
2.2 软链接硬链接
ln -s
:创建软链接(类似于Windows下的快捷方式)
ln
:创建硬链接(两个文件指向同一块数据)
2.3 查找
grep 搜索内容 文件名
:文本搜索
-i:忽略大小写
-n:显示匹配行号
-v:显示不包含匹配文本的所有行
find 目录 -name 文件名
:在指定目录下查找文件(包括目录)
2.4 压缩
tar
:压缩和解压缩命令
-c:创建打包文件
-v:显示打包或者解包的详细信息
-f:指定文件名称, 必须放到所有选项后面
-z:压缩或解压缩(.gz)
-j:压缩或解压缩(.bz2)
-x:解包
-C:解压缩到指定目录
ex:tar -zcvf test.tar.gz *.txt
:将当前目录的txt文件压缩为test.tar.gz
tar -jcvf test.bz2 *.txt
:将当前目录的txt文件压缩为test.bz2
zip
:压缩成.zip格式文件
unzip
:解压缩.zip格式文件
-d:解压缩到指定目录
2.5 权限
chmod
:修改文件权限
角色
u:user, 表示该文件的所有者
g:group, 表示用户组
o:other, 表示其他用户
a:all, 表示所有用户
操作符
+:增加权限
-:撤销权限
=:设置权限
权限
r:可读
w:可写
x:可执行
-:无任何权限
ex:chmod u+x 1.txt
:给该文件的所有者赋予1.txt的可执行权限
chmod u=r,g=-,o=rw 1.txt
:设置多个角色的权限
sudo -s
:切换到root用户,获取管理员权限(慎用)
sudo
:某个命令的执行需要获取管理员权限可以在执行命令前面加上sudo
whoami
:查看当前用户限
exit
:退出登录用户
who
:查看所有的登录用户
passwd
:修改用户密码,不指定用户默认修改当前登录用户密码
which
:查看命令位置
shutdown –h now
:立刻关机
reboot
:重启
2.6 用户
useradd
:创建(添加)用户
-m:自动创建用户主目录,主目录的名字就是用户名
-g:指定用户所属的用户组,默认不指定会自动创建一个同名的用户组
- 查看用户是否创建成功,可以查看/etc/passwd这个文件
- 查看用户组是否创建成功,可以查看/etc/group这个文件
passwd文件中的每项信息说明,以root:x:0:0:root:/root:/bin/bash
为例:
- 第一个:用户名
- 第二个:密码占位符
- 第三个:uid, 用户id
- 第四个:gid, 用户所在组id
- 第五个:用户描述, 可选,
- 第六个:用户的主目录所在位置
- 第七个:用户所用 shell 的类型,一般由bash或者sh,默认不设置是sh类型
group文件中的每项信息说明, 以laowang:x:1001:
为例:
- 第一个:用户组名
- 第二个:用户组密码占位符,一般Linux系统的用户组都没有密码的
- 第三个:组id
id
:查看用户信息
每项信息说明uid=1001(laowang) gid=1001(laowang) 组=1001(laowang)
:
- 第一个: uid 表示用户id
- 第二个: gid 表示用户组id
- 第三个: 组 表示用户所在的用户组
sudo passwd 用户名
:给其他用户设置密码
su - 用户名
:切换用户
usermod
:修改用户信息
-G:设置一个附加组
-g:修改用户组
ex:sudo usermod -G sudo laowang
:给laownag添加sudo组权限
gpasswd
:添加和删除附加组信息
-a 用户名:给用户添加附加组
-d 用户名:给用户删除附加组
userdel
:删除用户
-r 用户名:删除用户主目录,必须要设置,否则用户主目录不会删除
groupadd
:创建(添加)用户组
groupdel
:删除用户组(用户组下不能有用户)
2.7 cat(打印行数)
cat -n 文件名:打印带行数的文件
2.8 head(打印前n行)
head:默认打印文件的前十行
head -n 5 文件名(head -5 文件名):打印文件的前5行
2.9 tail(打印后n行)
tail:默认打印文件的最后十行
tail -n 5 文件名(tail -5 文件名):打印文件的后5行
2.9.1 扩展:打印第6-12行
head -12 文件名 | tail -7:取出文件的6-12行
2.10 cut(按列取数据)
cut -f1 文件名:取出第一列的数据(按空格或tab分割)
cut -d: -f1,3 文件名:取出第一列和第三列的数据(按:分割)
2.11 sort(排序)
sort 文件名:将文件进行排序(升序)
head -5 文件名 | sort:将文件前五行排序
head -5 文件名 | sort -r:将文件前五行排序(降序)
head -5 文件名 | sort -t: -k3:将文件前五行根据第三列排序
sort -t: -k4 -n 文件名:将文件根据第4列排序(数字类型排序)
2.12 uniq(去重)
uniq:去重(只能对有序的数据去重)
sort -n 文件名 | uniq:对排序后的文件去重
sort -n 文件名 | uniq -d:打印文件重复的数据
sort -n 文件名 | uniq -c:打印文件每个数据出现的次数
2.13 wc
wc -c 文件名:打印出文件字节数
wc -w 文件名:打印出文件单词数量
wc -l 文件名:打印出文件行数
wc -L 文件名:打印出文件最长的一行的字节数
三、变量
3.1 局部变量(不支持打印文件中的变量)
3.1.1 方式一
变量名=变量值
注意:中间不能有空格和特殊字符
3.1.2 方式二
变量名=‘变量值’
3.1.3 方式三
变量名=“变量值”
与方式二的区别:方式二引号里是什么变量就是什么,方式三中引号里有变量的引用可以打印出对应的变量值
3.1.4 方式四
变量名=$(linux命令)
将命令的结果赋值给变量
3.1.5 方式五
变量名=`linux命令`
3.2 临时全局变量(只在当前终端可调用)
3.2.1 方式一
export 变量名
3.2.2 方式二
export 变量名=值
3.3 全局变量
全局变量需要在家目录的.bashrc或家目录的.bash_profile或etc/profilele文件中定义
打开文件,写入export 变量名=值
,保存文件,输入命令source 文件名
激活变量。
3.4 打印变量
3.4.1 方式一:
echo $变量名
3.4.2 方式二:
echo “$变量名”
3.4.3 方式三:
echo “${变量名}”
变量中有空格的时候最好使用方式二或方式三
如果想在echo中打印出换行符或制表符,需要加-e进行转义
echo -e “one\ntwo\tthree”
想要两个echo命令之间不换行,需要加-n
echo -n "one two";echo -n 333
给输出的字符加颜色,\e[032m需要加颜色的字符\e[0m
echo -e “\e[032mYES\e[0m”
3.5 内置变量
$0
:获取当前执行的shell脚本文件名,包括脚本路径
$n
:获取当前执行的shell脚本的第n个参数值,n=1…9,如果n大于9就要用大括号括起来${10}
$#
:获取当前shell命令行中参数的总个数
$?
:获取执行上一个指令的返回值(0为成功,非0为失败)
四、数值运算
4.1 支持的运算
±*/%
< <= > >=
= !=
4.2 方式一
$((算术表达式))
变量可以不加$
4.3 方式二
expr 算术表达式
算术表达式中出现<或>时,需要使用\转义
4.4 方式三
echo "scale=3; 10/3" | bc
把算数式传给bc去做运算。scale为保留小数位数的设置。
五、条件表达式
5.1 返回值
0代表成功
1代表失败
5.2 文件表达式
test -f 路径
:判断当前路径是否是文件
test -d 路径
:判断当前路径是否是目录
test -e 路径
:判断当前路径是否存在
test -r 路径
:判断当前文件是否可读
test -w 路径
:判断当前文件是否可写
test -x 命令
:判断当前命令是否可执行
上面的test可换成[ ],举个栗子:
[ -f 路径 ]
- 注意:"[“后面和”]"前面都要有空格
[ -z 变量 ]
:判断变量是否为空
[ -n 变量 ]
:判断变量是否不为空
5.3 数值操作符
[ int1 -eq int2 ]
:判断两个数字是否相等
[ int1 -nq int2 ]
:判断两个数字是否不相等
[ int1 -ge int2 ]
:判断int1是否大于等于int2
[ int1 -gt int2 ]
:判断int1是否大于int2
[ int1 -le int2 ]
:判断int1是否小于等于int2
[ int1 -lt int2 ]
:判断int1是否大于int2
5.4 字符串比较
[ str1 = str2 ]
:判断两个字符串是否相等
[ str1 != str2 ]
:判断两个字符串是否不相等
5.5 逻辑表达式
&& 和 ||
-a
-o
[ 条件1 ] && [ 条件2 ]
可以写成[ 条件1 -a 条件2 ]
[ 条件1 ] || [ 条件2 ]
可以写成[ 条件1 -o 条件2 ]
[ 条件 ] && 语句1 || 语句2
如果条件成立执行语句1,条件不成立执行语句2
六、shell脚本
6.1 格式要求
- 在文件首行指定执行shell的程序以及相关说明
#!/bin/bash
#Author:Aaron
#Date:2021-04-01
:<<!
这是多行注释
!
- shell脚本文件后缀建议为.sh
- 脚本执行失败时,使用exit返回非零值,来退出程序
- 默认缩进4个空格
6.2 执行脚本
bash 脚本相对或绝对路径
给脚本加上可执行权限
chmod +x 脚本相对或绝对路径
加了可执行权限的脚本可以这样执行:
./脚本相对或绝对路径
以调试的方式执行脚本:
bash -x 脚本相对或绝对路径
七、函数
7.1 格式一
函数名()
{
echo "当前日期为:$(date)"
}
# 在函数定义的下方,使用函数名去调用函数
函数名
7.2 格式二
function 函数名
{
echo "当前日期为:$(date)"
}
函数名
7.3 格式三(带参数)
function 函数名
{
echo -e "早上好!$1 $2 $3 $#"
}
# 在函数定义的下方,使用函数名去调用函数(这里的$1-$3是命令行的三个参数)
函数名 $1 $3 $2
# 此时在命令行传参为:a b c,但是调用脚本输出的为:早上好!a c b 3
八、流程控制
8.1 if
8.1.1 方式一
if [ 条件1 ]
then
语句1
elif [ 条件2 ]
then
语句2
else
语句3
fi
8.1.2 方式二
if [ 条件1 ]; then
语句1
elif [ 条件2 ]; then
语句2
else
语句3
fi
8.2 for
8.2.1 方式一
for ((i=1; i<=10; i++))
do
语句
done
8.2.2 方式二
for i in $dir
do
echo "$i"
done
8.2.3 while
while [ 条件 ]; do
语句
done
8.2.4 case
case 变量 in
"1")
语句1
;;
"2")
语句2
;;
*)
语句3
;;
esac