day5
shell
1、shell命令、shell、shell脚本的本质区别
2、shell类型
3、命令格式
注意:
Linux命令
1、用户系统相关命令
1.1 用户切换命令
1.2 系统管理命令
shell命令:是用户向内核发出的控制请求,与之交换的文本流
shell:是一个命令行解释器,将用户的指令解析为操作系统所能识别的指令(用户和内核沟通的桥梁)
shell脚本:一堆命令的集合
Bourne Shell: 最早的Shell
C Shell
Ksh
Z Shell
Bourne-again shell(bash)
命令名称 [选项] [参数];
[]:表示可以省略
选项:功能
参数:要操作的对象
(1)三者之间必须用空格隔开
(2)多个命令在一行书写,用分号(;)隔开
(3)如果一条命令不能在同一行写完,在行尾使用反斜杠(\)标明该命令为结束
su - 用户名;//切换用户
su - root <==> su - :路径以及环境变量都发生了改变
su root:路径以及环境变量为发生改变
1.2.1 查看进程
ps:显示当前系统中由该用户运行的进程列表
ps -ef:查看所有的进程及其进程号(PID)
ps aux:除可以显示-ef的内容外,还可以显示CPU及其内存的占有率
top:动态显示系统中运行的程序
pstree:以树状显示
1.2.2 kill
发送信号
1.3 磁盘相关命令
1.3 文件、目录相关命令
Linux下的7中文件类型
kill -l :列出所有的信号
free:查看当前系统内存的使用情况
fdisk:查看硬盘的分区情况(fdisk -l)
注意:使用fdisk -l时必须使用root权限
1、普通文件:-
a、ASCII文件(文本文件) b、二进程文件
2、目录文件:d
3、字符设备文件:c
4、块设备文件:b
5、链接文件:l
6、管道文件:p
7、套接字(socket) s
- rwx rwx r-x 1 linux linux 8344 9月 5 18:33
a.out
文件类型 文件拥有者 文件属组用户 其他人 用户 用户所在组
1.3.1 chmod
作用:改变文件的访问权限
方式1
方式2
1.3.2 chown
作用:修改文件所有者和组别
注意:使用时必须使用root权限
(1)修改文件的所有者
(2)修改文件的组别
用户:u
用户所在组:g
其他人:o
所有人:a
+:增加权限
-:删除权限
=:设置权限
rwx rwx r-x 有权限一般用1来表示,-表示没有权限,用0表示
111 111 101 775
-w- --x r-w
010 001 101 215
(3)同时修改用户和组别
1.3.3 chgrp
作用:修改组别
注意:使用必须使用root权限
1.3.4查看文件内容
1.3.5 压缩打包相关命令
压缩工具:
注意:只能压缩文件
(1)gzip
压缩:
cat 文件名:适合看比较短的文档
more 文件名:适合看比较长的文档,按回车向下翻一行,空格向下翻一页,q退出
less 文件名:加强版的more,合看比较长的文档,按回车向下翻一行,空格向下翻一页,支持上下键,q退
出
gzip 文件名,压缩后的后缀为.gz
bzip2 文件名,压缩后的后缀为.bz2
解压:
(2)bzip2
压缩:
tar
作用:对文件或文件夹进行打包,打包后的后缀为.tar
先打包
再压缩
解压缩:
先解压:
gzip -d 文件名;
gunzip 文件名;
bzip2 -d 文件名;
bunzip2 文件名;
-c:打包
-x:解包
-v:显示详细信息
-f:指定包名(该参数只能放在最后一个)
-z:调用gzip来压缩打包文件,与"-x"连用时调用gunzip完成解压缩
-j:调用bzip2来压缩打包文件,与"-x"连用时调用bunzip2完成解压缩
再解包:
将打包压缩一体化:
解压解包一体化:
1.3.6 环境变量
为什么在所有的路径下都认识ls?
临时添加
注意:一次性的,只对当前终端有效
永久添加
起别名
想要永久有效的话,添加到.bashrc(家目录下)中
1.4 硬链接和软链接
env:查看所有的环境变量
(1) sudo vim /etc/profile
(2) 在文件末尾添加export PATH=$PATH:绝对路径
(3) 重启 or source /etc/profile
sudo reboot:重启 sudo shutdown -h now(10):立刻关机
1.4.1 硬链接
1.4.2 软链接
1.4.3 创建硬链接
1.4.4 软链接
1.4.5 软链接和硬链接的区别
1.5 shell中的特殊字符
利用Linux中为每个文件分配的物理编号–inode建立链接
利用文件的路径名建立链接,注意:必须是绝对路径
相同点:
ln命令会保持每一处文件的同步性,也就是说不论改动了哪一处,其它文件都会发生相同的变化
不同点:
软链接会在用户选定的位置上生成一个文件镜像,不会重复占用磁盘空间,平时用的最多的就是软链接
硬链接会在用户选定的位置上生成一个和源文件大小相同的文件(不是拷贝,起了个别名)
grep 字符串 文件:从指定的文件中查找特定的字符串
-n:显示行号
wc -c:统计文件中有多少个字符
wc -l:统计文件有多少行
``:反引号,当作命令来处理
输出重定向 追加重定向 输入重定向
<
如果文件不存在,则新建,如果
文件存在,则会覆盖文件中的内
容
如果文件不存在,则新建,如果
文件存在,则会追加在文件的末
尾
wc < file1,将file1中的
内容作为输入传给wc命
令
1.5.1 管道
1.5.2 重定向
输出重定向
追加重定向
输入重定向
2>或&>
|:一般不单独使用,将前一个命令的输出作为后一个命令的输入
1.5.3 通配符
注意:以上除了*,其余匹配的都是一个字符
1.6 网络配置
测试是否有网
查看Linux下IP地址
- 匹配任意长度的字符串
? 匹配一个长度的字符
[]:匹配其中指定的一个字符
[ - ]:匹配指定的一个字符范围
[^]:除了其中指定的字符,均可匹配
ifconfig
windows下查看IP地址
Linux下的网络配置
ipconfig
(1)虚拟机–>设置–>网络适配器
(2)编辑–>虚拟网络编辑器
配置静态IP
Windows下网络配置
2、共享文件夹
(1)直接拖
(2)共享文件夹
虚拟机–>设置–>选项–>共享文件夹(/mnt/hgfs)
(3)winscp
3、Linux用户管理
新建用户
(1)/etc/passwd 系统能够识别的用户清单
(2)/etc/shadow 加密的用户清单
(3)/etc/group UNIX组的名称和每个组成员列表
sudo adduser 用户名;
修改用户密码
删除用户
新建组
修改用户所在组
删除组
day6
sudo passwd 用户名
sudo deluser --remove-home 用户名;//删除时连同主目录一起删除
sudo groupadd 组名;
sudo usermod -g 目标组 被改用户;
sudo groupdel 组名;
1、shell脚本
1.1 如何创建shell脚本
(1)创建脚本文件(1.sh)
(2)编辑脚本文件(vim 1.sh)
(3)执行的时候发现没有可执行权限,需要人为添加
(4)运行
1.2 变量
1.2.1 用户自定义变量
shell允许用户建立 变量存储类型,但它不支持数据类型(int、float),所有赋值给变量的值都会被解
释为一串字符
命名规范
注意:
(1)要取用一个变量的值,只需在变量名前加一个$即可
(2)等号的左右两侧不能有空格
C语言(强类型语言–>对数据类型分的很清楚),需要编译 gcc 1.c ./a.out
shell脚本(弱类型语言),不需要编译,直接运行
chmod 777 1.sh or chmod u+x 1.sh
./1.sh
(1)由数字、字母,下划线组成,首位不能为数字
(2)一般shell变量用大写表示
1.2.2 位置参数
1.2.3 预定义变量
$#:包含命令行参数的个数
$@:包含所有命令行参数
$*:包含所有命令行参数
$$:包含正在执行的进程的ID号
?
:包含前一个命令的退出状态,正常退出返回
0
,反之为非
0
(
0
为真,非
0
为假)
1.2.4
环境变量案例案例
21.3
s
h
e
l
l
程序和语句在家目录下创建一个
m
y
d
i
r
文件夹,在该文件夹中创建
1.
t
x
t
,然后向
1.
t
x
t
中写入
"
h
e
l
l
o
s
h
e
l
l
"
1
、将交叉编译工具链压缩包拖到虚拟机的某个目录下
2
、打开终端,进入该目录
3
、解压
s
u
d
o
t
a
r
−
x
j
v
f
s
t
a
g
i
n
g
d
i
r
.
A
R
9331
−
A
L
3
A
.
t
a
r
(名字根据实际文件名替换)注意:解压时,压缩包的名字可以使用
t
a
b
键自动补全
4
、解压成功后,就会有一个“
s
t
a
g
i
n
g
d
i
r
”的目录,将解压后的文件名修改为
O
p
e
n
W
r
t
进入到该目录,直到进入
t
o
o
l
c
h
a
i
n
−
m
i
p
s
中的
b
i
n
目录
5
、使用
p
w
d
命令,得到该目录的绝对路径,并将该目录的绝对路径拷贝下来
6
、
s
u
d
o
v
i
m
/
e
t
c
/
p
r
o
f
i
l
e
7
、在该文件的末尾加上
e
x
p
o
r
t
P
A
T
H
=
?:包含前一个命令的退出状态,正常退出返回0,反之为非0(0为真,非0为假) 1.2.4 环境变量 案例 案例2 1.3 shell程序和语句 在家目录下创建一个mydir文件夹,在该文件夹中创建1.txt,然后向1.txt中写入"hello shell" 1、将交叉编译工具链压缩包拖到虚拟机的某个目录下 2、打开终端,进入该目录 3、解压 sudo tar -xjvf staging_dir.AR9331-AL3A.tar(名字根据实际文件名替换) 注意:解压时,压缩包的名字可以使用tab键自动补全 4、解压成功后,就会有一个“staging_dir”的目录,将解压后的文件名修改为 OpenWrt 进入到该目录,直到进入toolchain-mips中的bin目录 5、使用pwd命令,得到该目录的绝对路径,并将该目录的绝对路径拷贝下来 6、sudo vim /etc/profile 7、在该文件的末尾加上 export PATH=
?:包含前一个命令的退出状态,正常退出返回0,反之为非0(0为真,非0为假)1.2.4环境变量案例案例21.3shell程序和语句在家目录下创建一个mydir文件夹,在该文件夹中创建1.txt,然后向1.txt中写入"helloshell"1、将交叉编译工具链压缩包拖到虚拟机的某个目录下2、打开终端,进入该目录3、解压sudotar−xjvfstagingdir.AR9331−AL3A.tar(名字根据实际文件名替换)注意:解压时,压缩包的名字可以使用tab键自动补全4、解压成功后,就会有一个“stagingdir”的目录,将解压后的文件名修改为OpenWrt进入到该目录,直到进入toolchain−mips中的bin目录5、使用pwd命令,得到该目录的绝对路径,并将该目录的绝对路径拷贝下来6、sudovim/etc/profile7、在该文件的末尾加上exportPATH=PATH:/home/linux/staging_dir/toolchain-mips_34kc_gcc-5.3.0_musl1.1.14/bin
注意:“KaTeX parse error: Expected 'EOF', got '#' at position 104: …成功 1.3.1 说明性语句 #̲:表示注释 1.3.2 功能性…n并非脚本中的$n
(2)函数中的所有标准输出都会传递给主程序中的变量
while [表达式]
do
语句
done
方式1:
函数名()
{
语句
}
方式2:
function 函数名()
{
语句
}
注意:一般使用最多的是方式2
方式1:
变量名=函数名 参数列表
方式2:
函数名 参数列表
注意:一般使用最多的是方式2
案例
1、判断用户主目录是否有file-dir和dir-dir目录
如果这两个目录存在,询问是否删除这两个目录
如果用户的是Y,将这两个目录删除,重新创建这两个目录
如果是N,取消删除
如果上述的目录不存在,则创建这两个目录
2、请用户输入一个路径,将这个路径下的文件拷贝到file-dir这个目录,将
这个路径下的目录拷贝的dir-dir目录
3、统计拷贝的文件和目录的个数
#!/bin/bash
for dir in $HOME/file-dir $HOME/dir-dir
do
if [ -d $dir ]
then
read -p "是否删除该目录
" op
case $op in
Y|YES|y|yes)
rm -r $dir
mkdir $dir
;;
N|NO|no|n)
echo “用户取消删除”
;;
esac
else
mkdir $dir
fi
done
fileCount=0
dirCount=0
read -p "请输入一个路径:
" pathname
flist=ls $pathname
for list in $flist
do
if [ -f
p
a
t
h
n
a
m
e
/
pathname/
pathname/list ]
then
cp
p
a
t
h
n
a
m
e
/
pathname/
pathname/list $HOME/file-dir
fileCount=expr $fileCount + 1
elif [ -d
p
a
t
h
n
a
m
e
/
pathname/
pathname/list ]
then
cp -r
p
a
t
h
n
a
m
e
/
pathname/
pathname/list $HOME/dir-dir
dirCount=expr $dirCount + 1
fi
done
echo “fileCount = $fileCount”
echo “dirCount = $dirCount”