-
Linux第四天目标
-
掌握打包相关命令
-
掌握重定向、管道符和进程管理命令
-
了解shell脚本的简单使用
-
1.打包、解包、压缩、解压缩命令
- 统一使用tar命令,根据不同的参数完成不同的操作
1.1 参数:
-
-c:新建打包文件,打包操作
-
-x:解包操作
-
-v:在操作过程中,显示被操作的文件名
-
-f:指定要操作的文件或目录,此参数要写在最后
-
-z:通过gzip(一种压缩格式)进行压缩或者解压缩操作
-
-j:通过bzip2(一种压缩格式)进行压缩或者解压缩操作
-
-C:将操作目录从当前目录(默认目录)改为指定目录
-
-P:将操作的结果文件,放到指定目录,否则会放在当前目录。
1.2 常用参数组合:-cvf 打包,-zcvf打包同时压缩,-xvf解包,-zxvf解包同时解压。
-
举例:打包tar -cvf file.tar a ana,代表对a目录和ana文件进行了打包,打包的结果文件命名为file.tar,默认都是在当前目录操作。
-
举例:解包tar -xvf file.tar,代表对file.tar包文件进行解包,默认放在当前目录。
-
举例:打包同时压缩tar -zcf file.tar.gz a ana,代表对a目录和ana文件进行打包同时压缩,结果文件命名为file.tar.gz
-
举例:解包同时解压tar -zxf file.tar.gz,代表对file.tar.gz文件进行解包同时解压缩,默认在当前目录操作。
-
举例:使用-P和-C参数 tar -Pzcf /home/tommy/new.tar.gz -C /root a ana,代表将操作结果放到/home/tommy目录下,这个需要使用-P参数完成。将操作对象从当前默认位置,改为指定位置/root,这个用到了-C参数。
1.3 zip打包 unzip解包
- 可以使用zip命令,压缩文件为zip压缩包
-
语法:zip[-r]参数1 参数2…参数N
-r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致 -
示例:
zip test.zip a.txt b.txt c.txt.
将a.txt b.txt c.txt 压缩到test.zip文件内zip -rtest.zip test itheima a.txt
将test、itheima两个文件夹和a.txt文件,压缩到test.zip文件内
- 使用unzip命令,可以方便的解压zip压缩包
- 语法:unzip[-d]参数
-d,指定要解压去的位置,同tar的-C选项参数,被解压的zip压缩包文件 - 示例:
unzip test.zip,将test.zip解压到当前目录
unzip test.zip -d /home/itheima,将test.zip解压到指定文件夹内(/home/itheima)
1.4常见的打包压缩格式
-
打包后缀名:.tar
-
打包并且压缩的后缀名:.tar.gz,gzip格式压缩的
-
打包并且压缩的后缀名:.tar.bz2,bzip2格式压缩的
-
注意:什么样的格式压缩的,就要用什么样的格式解压。
2.重定向和管道符命令
2.1 重定向:把命令的输出重新定向到指定的文件里面,默认是输出到屏幕的。
-
>覆盖重定向:举例date>file 代表把date命令的输出,从默认的屏幕,重定向到file文件中,每次都会覆盖file文件原来的内容。
-
>>:举例date>>file 代表不会覆盖file文件原来内容,而是在后面追加新内容。
-
>/dev/null:代表重定向到空设备,也就是不输出任何结果,只执行命令
-
2>&1:这个代表重定向的时候,将错误输出也输出,这个一般写到最后。2代表错误输出(当命令执行遇到错误的时候就会输出错误信息),1代表标准输出。如果没有这个参数,遇到命令执行错误的时候,就不会输出到重定向的位置了。
2.2管道符:| 代表把一个命令的执行结果当作下一个命令的输入
- 举例:yum list installed | grep python,这个命令代表查找当前已安装的软件,然后使用管道符把查询结果给到grep命令继续处理,grep命令来搜索里面跟python相关的关键词,再进行输出。这样我们就找到了跟python有关的软件。
3. 进程管理相关命令
-
进程就是进行中的程序,此时程序就开始使用系统资源。
3.1 查看进程的命令:ps 全称是process status
-
参数-e:显示所有的进程。如果不加参数,默认只显示当前用户当前终端的进程。
-
参数-f:显示更完整的内容。
-
常用的参数组合:ps -ef
-
uid:进程所属用户id,pid进程id,ppid进程的父进程id,parent的缩写,c代表cpu使用率,stime代表进程开始时间,tty是终端代号,time进程运行的总时间,cmd进程的命令名称
-
一般配合管道符联合使用:ps -ef | grep python
3.2 终止进程(只有root用户和进程的所有者才有权限终止进程)
-
手动杀死进程:
-
kill 进程号pid,有时候这样会失败,因为有的进程不能这样直接杀死,因为这个进程可能还在被其他进程使用,有可能还在被父进程调用。
-
kill -9 进程号pid,这样可以强制杀死进程。
-
CTRL+c 代表终止当前运行的进程,不是对所有进程都有效。
-
-
有的进程运行结束后会自动退出,有的不会,需要使用对应的退出命令。
-
有的进程运行过程中遇到异常也会退出。
-
4.了解shell脚本的简单使用
- shell脚本是shell script语法结合Linux命令的一个批处理文件。shell默认的版本bash shell。
4.1 写一个简单的shell脚本:
-
首先vi hello.sh新建一个shell文件
-
shell脚本第一行固定写法:#!/bin/bash
-
第二行使用echo打印一句话:echo “hello shell”
-
第三行写一个Linux命令:date
-
-
然后保存退出
-
执行这个shell脚本
-
执行shell脚本有多种方式;
-
sh hello.sh 另起一个shell进程来执行脚本
-
. hello.sh 也可以写成 source hello.sh 这种方式是直接在当前的shell环境下执行
-
-
4.2 shell脚本语言基本语法:
-
定义变量:
-
注意:定义变量时等号左右两边不能有空格
-
注意:定义变量时,变量的值可以使用单引号和双引号,但是有很大区别:单引号会原样输出,双引号会解析里面的命令和变量。一般推荐使用双引号。
-
-
使用变量:
- 需要在变量前面加 ,更规范的写法就是在 ,更规范的写法就是在 ,更规范的写法就是在后面加{},比如 a u t h o r ,修改变量值的时候不需要加 {author},修改变量值的时候不需要加 author,修改变量值的时候不需要加
-
删除变量:
- 使用unset删除变量,如:unset author
-
举例:
-
#!/bin/bash echo "hello shell" date #定义变量并赋值,=两边不能有空格 author="余华" age=60 #修改变量 age=65 #双引号可以解析里面的命令和变量 echo "《活着》的作者是:$author,年龄是:$age" #单引号会当作字符串原样输出 echo '《活着》的作者是:$author,年龄是:$age' #删除变量 unset age echo "《活着》的作者是:" $author",年龄是:$age"
-
-
条件语句if:
-
注意:条件和需要执行的代码需要使用((条件))括起来,其他的关键字有else,elif,fi
-
举例:
-
#!/bin/bash read age #从键盘读取输入,存到age变量中 if (($age<18));then - echo "未成年" elif ((18<=$age&&$age<=65));then - echo "努力工作" elif (($age>65&&$age<=70));then - echo "退休了,帮儿女看娃" else echo "安享晚年" fi
-
-
-
while循环:
-
举例:计算1-100累加和
-
#!/bin/bash i=1 sum=0 while((i<=100)) do ((sum+=i)) ((i++)) done echo "1-100的累加和是:"$sum
-
-
-
for循环:
-
举例:计算1-100累加和
-
#!/bin/bash i=1 sum=0 for ((i;i<=100;i++)) do ((sum+=i)) done echo "sum is:"$sum
-
-
举例:for循环的另外一种写法,for in语句
-
sum2=0 for n in {1..100} do ((sum2+=n)) done echo "sum2 is:"$sum2
-
-
-
函数:
-
举例:
-
#!/bin/bash function add() #function是关键字,代表定义一个函数 { echo $(($1+$2)) #$1代表第一个参数,$2代表第二参数。当n>=10时,需要使用${n}来获取参数。如获取第十个参数需要${10}。 } add 1 2 #调用函数并且传参
-
-
主函数main
-
#!/bin/bash function add() { #shell中整数运算,需要使用(())包裹 echo $(($1+$2)) } function sub() { echo $(($1-$2)) } #使用main函数来调用,main函数省略function关键字 main() { echo "现在使用main函数作为入口统一调度" add 2 3 sub 5 3 } #调用main函数 main
-
-
add()
{
#shell中整数运算,需要使用(())包裹
echo $(($1+$2))
}
function sub()
{
echo $(($1-$2))
}
#使用main函数来调用,main函数省略function关键字
main()
{
echo "现在使用main函数作为入口统一调度"
add 2 3
sub 5 3
}
#调用main函数
main
```