文章目录
shell相关
常见的几种Shell:
1.Bourne shell (sh)是一个快捷方式,已经被/bin/bash所取代
2.Korn shell (ksh)语法与Bourne shell相同,同时具备了C shell的易用特点
3.C shell (csh)使用的是“类C”语法,csh是具有C语言风格的一种shell
4.Bourne-again shell (bash)大多数Linux系统默认使用的Shell,是Bourne shell 的一个免费版本,它是最早的Unix Shell
查看用户默认使用的shell:echo $SHELL
查看用户当前使用的shell: ps
路径相关
系统中的路径可以分为俩种,绝对路径和相对路径。
- 绝对路径
Linux系统中,以系统中根目录开头的路径,都是绝对路径
例如:/bin 、/home/briup、/opt等
例如,查看/home/briup目录中的hello.txt文件
cat /home/briup/hello.txt
- 相对路径
在当前路径下,去描述另一个路径,就可以使用相对路径,它表示的俩个路径的相对位置。
当前路径,就是当前输入执行命令的路径,在当前路径下,去表示另一个路径的相对位置。
例如,当前路径在/home/briup下,查看另一个/home/test目录中的hello.txt文件
cat ../test/hello.txt
其中,1..
表示当前目录,如果一个文件名是以.
开头,就说明这个文件是隐藏文件:
(ls -a)显示所有文件,包括隐藏文件。
2. ..
是上一级目录,表示一个目录的路径,且以.
开头,所以是一个隐藏目录:
用户相关
useradd
非交互式命令,通过选项一次性提供该命令所需的参数,直接执行;
useradd:
-m 在创建用户时创建家目录
-d 指定家目录的位置,默认是/home/用户名
-s 指定创建的用户所能使用的默认的shell程序
adduser
交互式命令,在命令执行的过程中,通过提示,提供相应的参数即可;在创建用户时需要提供创建的用户的密码;
非交互式创建新用户zhangsan:
sudo useradd -m zhangsan
为zhangsan设置密码:
sudo passwd zhangsan
切换用户然后改变一下shell:
su zhangsan
bash
交互式创建新用户lisi:
sudo adduser lisi
切换用户:
组相关
id
命令,可查看当前用户的uid和组id和这个用户所属的组等信息。
(在linux中创建用户时,会默认创建一个个用户名同名的组,并且组id和用户id也相同,并且该用户默认属于与用户名同名的组)
id+用户名
:查看指定用户的uid和组id和这个用户所属的组等信息
将一个用户添加到一个组中:
sudo gpasswd -a 用户名 组名(这种方式不常用)
sudo usermod -aG 组名 用户名(常用)
将用户lisi添加到sudo组中:
usermod -a -G sudo lisi
(这里要注意,所有属于sudo组的用户才能使用sudo临时提权)
cat命令
如果后面没有跟任何选项或者参数,指的是读取控制台(终端)的输入,并将输入原样输出,比如输入一个hello,接着就会输出一个hello:
如果后面跟一个或者多个文件路径,指的是查看后面指定的文件的内容:
一个路径:
多个路径:
硬链接和软链接
硬链接文件(链接文件)
软链接文件(符号链接文件),windows中的快捷方式
1.硬链接
创建a.txt的硬链接文件b.txt:
2.软链接
创建a.txt的软链接文件c.txt:
权限相关
用ls -al 命令时,红框中显示的第一个字符是文件的类型,后面的字符是权限rwx,三个为一组:
第一个rwx是所属用户的权限,第二个是同组人,第三个是其他用户。
对于文件:
r:可读,可以读取文件的内容
w:可写,可以向文件中写入内容
x:可执行,一般用于脚本或者可执行的二进制程序;
对于目录:
r:可读,可以读取目录中的子目录或者文件;一般ls命令会用到该权限;
w:可写,可以通过相关的命令在该目录中创建子目录或者文件;mkdir,touch
x:可执行,是否能够通过cd命令切换到该目录;
改变权限:
在添加或者删除某个权限的时候:
u 表示拥有者
g 表示同组人
o 表示其他人
a 表示所有人
例如:
chmod u+x b.txt
chmod g-r b.txt
chmod u+r,g-2 b.txt
chmod a=rw b.txt
(权限操作符:
+附加权限,不会去除原来的权限
-去除权限
= 赋予权限,先将原来的权限去除,然后附加新的权限)
也可以是数字来表示权限:
x 执行权限 十进制数字 1
w 写权限 十进制数字 2
r 读权限 十进制数字 4
例如:
//7一定是1+2+4所得,表示拥有者、同组人、其他人都是可读可写可执行
chmod 777 b.txt
chown和chgrp
chown -R owner 修改文件的所属者,还能修改所属组
修改所属者:
sudo chown zhangsan a.txt
修改所属者和所属组:
sudo chown zhangsan:zhangsan a.txt
chgrp -R group 只能修改所属组
sudo chgrp lisi a.txt
touch命令
功能:
1.创建一个新的空白的文件
如果后面的参数是常规文件,则指的是创建该常规文件,新的,空白的。
如果后面的参数是一个软链接,但是该软链接指向的真实文件已被删除,则指的是创建该软链接指向的真实文件,新的,空白的。
2.刷新(更新,修改)已存在的文件的最后一次访问时间
例如,创建一个文件或者修改文件的更新时间
touch a.txt
cp命令
例如:复制当前目录下a.txt文件内容到b.txt中
cp a.txt b.txt
(如果b.txt不存在,则自动创建b.txt文件
如果b.txt 存在,则自动覆盖b.txt文件内容)
复制多个文件,到一个指定目录复制多个文件,到一个指定目录:
cp a.txt b.txt test
(复制a.txt b.txt文件到test目录中,要求这些文件和目录都是存在的,并且当cp 要复制的源是多个文件组成时,目标必须是已存在的目录,不能不存在,不能是文件;指的是将多个源文件复制到目标目录中)
复制test1目录及其内容到test2目录中:
cp -r test1 test2
(当cp命令复制的源是目录时,会递归的将该目录下的所有子目录和子文件都复制一份,但是cp命令本身不会递归,需要加-r选项)
mv命令
mv 表示移动文件,除了不需要-r选项之外,其他含义和cp一模一样,不再描述。
>和>>
输出重定向符合,将来原本输出到命令行中的内容,重定向输入到另外一个地方。
>
表示往文件中写入内容,是覆盖操作。
例如,把hello写入到a文件中
echo "hello" > a
a文件如果不存在,则自动创建,a文件如果存在,则覆盖之前的内容
>>
表示往文件中写入内容,是追加操作。
例如,把hello追加写入到a文件中
echo "hello" >> a
|管道符命令
作用:可以把第一个命令的结果,交给第二个命令作为参数进行操作
例如查看/etc/passwd中的内容并筛选出briup相关的信息:
cat /etc/passwd | grep "briup"
(grep命令进行对结果进行过滤筛选)
环境变量
环境变量分为:
1.系统环境变量:会被当前OS中的所有登录的用户读取;
/etc/profile
2.用户环境变量:只会被当前登录的用户读取;
~/.bashrc
归档和解档 压缩和解压缩
归档意思是把若干个文件或目录简单的合并在一起,它并不对文件进行压缩,就是将多个文件前后连接在一起,形成一个大文件。
另外还会额外的添加一些信息,所以归档后的总文件的大小,反而往往比之前文件之和还要大一
些。
例如,把a.txt和b.txt归档成abc.tar:
tar -c -f ab.tar a.txt b.txt
解档ab.tar:
tar -x -v -f ab.tar
tar命令常用的选项及其作用:
压缩和解压缩:
涉及到很多压缩算法,每个算法压缩完后的文件的后缀都是不一样的:
1.gzip 压缩 xxx.gz
gunzip 解压缩
2.bzip2 压缩 xxx.bz2
bunzip2 解压缩
3.zip 压缩 xxx.zip
unzip 解压缩
在归档时指定参数进行压缩:
例如,使用gzip算法压缩a.txt和b.txt为ab.tar.gz:
tar -zcvf ab.tar.gz a.txt b.txt
在解档时指定参数进行解压缩:
tar -zxvf ab.tar.gz -C 路径(解压到什么地方)
Shell
shell简述
shell是一个命令解析器,接受应用程序/用户命令,然后调用操作系统。
shell脚本的本质是一系列命令的集合。
例如一个最简单的脚本first.sh
里面的内容为:
#!/bin/bash
pwd
date
echo "shell success"
然后执行脚本:./first.sh
还可以用其他方式执行脚本:
sh first.sh
sh /home/gx/first.sh
bash first.sh
bash /home/gx/first.sh
普通变量
shell中提供使用和声明变量的功能。语法:变量名=变量值
例如:定义定义变量name:
NAME=zhangsan
echo $NAME
撤销变量NAME:
unset NAME
变量声明都是字符串类型,无法直接进行数值运算:
特殊变量
$n
,n为0代表该脚本名称,n为1-9代表第一到第九个参数,10以上的参数需要用大括号包起来。
例如,输出脚本文件及其相关参数:
脚本内容:
#!/bin/bash
echo "$0 $1 $2 $3 ${11}"
执行脚本:
运算符
在shell中需要完成算数运算的方式如下:
$( (运算式) )
$[运算式]
expr +,-,*,/,% (expr运算符间要有空格)
例如加法:
if判断
语法:
if [ 条件1 ]
then
命令1
elif [ 条件2 ]
命令2
...
else
命令3
fi
(if或elif后需要有空格,条件前后需要空格)
简单案例:脚本执行第一个参数为1输出ok,如果为2输出no:
脚本内容:
执行脚本:
case语句
语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...............
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
案例:
执行脚本:
for
语法:
for 变量名 in 列表
do
命令
done
或者
for( ( 初始值;循环控制条件;变量变化 ) )
do
程序
done
例如:从1加到100
脚本内容:
#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
sum=$[ $sum + $i ]
done
echo $sum
执行脚本:
再比如打印输出所有参数,脚本内容:
sum=0
for i in $*
do
echo $i
done
脚本执行:
while
语法:
while [ 条件 ]
do
命令
done
例如计算从 0 到 100 的整数之和,脚本内容:
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[ sum + $i]
i=$[ $i + 1 ]
done
echo $sum
执行脚本: