打包、解包、压缩、解压缩命令
统一使用tar命令,根据不同的参数完成不同的操作
语法:tar 参数 打包后的文件(只能是一个) 需要打包的文件或目录(可以是多个,空格分开即可)
常见的打包压缩格式:
打包后的文件后缀名:.tar
打包并且压缩的后缀名:.tar.gz,gzip格式压缩的
打包并且压缩的后缀名:.tar.bz2,bzip2格式压缩的
注意:什么样的格式压缩的,就要用什么样的格式解压。
参数:
-c:新建打包文件,打包操作
-x:解包操作
-v:在操作过程中,显示被操作的文件名
-f:指定要操作的文件或目录,此参数要写在最后
-z:通过gzip(一种压缩格式)进行压缩或者解压缩操作
-j:通过bzip2(一种压缩格式)进行压缩或者解压缩操作
-C:将操作目录从当前目录(默认目录)改为指定目录
-P:将打包后的结果文件从当前目录(默认目录)改为指定目录
常用参数组合:-cvf 打包,-zcvf打包同时压缩,-xvf解包,-zxvf解包同时解压。
举例:打包tar -cvf file.tar a ana,代表对a目录和ana文件进行了打包,打包的结果文件命名为file.tar,默认都是在当前目录操作。
tar -cvf file.tar a ana
举例:解包tar -xvf file.tar,代表对file.tar包文件进行解包,默认放在当前目录。
tar -xvf file.tar
举例:打包同时压缩tar -zcf file.tar.gz a ana,代表对a目录和ana文件进行打包同时压缩,结果文件命名为file.tar.gz
tar -zcf file.tar.gz a ana
举例:解包同时解压tar -zxf file.tar.gz,代表对file.tar.gz文件进行解包同时解压缩,默认在当前目录操作。
tar -zxf file.tar.gz
举例:使用-P和-C参数 tar -Pzcf /home/tommy/new.tar.gz -C /root a ana,代表将操作结果放到/home/tommy目录下,这个需要使用-P参数指定。将操作对象从当前位置选取,改为指定位置选取,这个需要使用-C参数指定。
tar -Pzcf /home/tommy/new.tar.gz a ana //当前目录的a和ana压缩到目标目录Tommy下
tar -zcf /home/tommy/new.tar.gz -C /root a ana//将root目录下的文件压缩到目标Tommy下
tar -Pzcf /home/tommy/new.tar.gz -C /root a ana
重定向和管道符命令
重定向:把命令的输出重新定向到指定的文件里面,默认是输出到屏幕的。
>覆盖重定向:举例date>file 代表把date命令的输出,从默认的屏幕,重定向到file文件中,每次都会覆盖file文件原来的内容。
>>:举例date>>file 代表不会覆盖file文件原来内容,而是在后面追加新内容。
>/dev/null:代表重定向到空设备,也就是不输出任何结果,只执行命令。
2>&1:这个代表重定向的时候,将错误输出也输出,这个一般写到最后。2代表错误输出(当命令执行遇到错误的时候就会输出错误信息),1代表标准输出。如果没有这个参数,遇到命令执行错误的时候,就不会输出到重定向的位置了。
管道符:| 代表把一个命令的执行结果当作下一个命令的输入
举例:yum list installed | grep python,这个命令代表查找当前已安装的软件,然后使用管道符把查询结果给到grep命令继续处理,grep命令来搜索里面跟python相关的关键词,再进行输出。这样我们就找到了跟python有关的软件。
进程管理相关命令
进程就是进行中的程序,此时程序就开始使用系统资源。
查看进程的命令:ps 全称是process status
参数-e:显示所有的进程。如果不加参数,默认只显示当前用户当前终端的进程。
参数-f:显示更完整的内容。
常用的参数组合:ps -ef
uid:进程所属用户id,pid进程id,ppid进程的父进程id,parent的缩写,c代表cpu使用率,stime代表进程开始时间,tty是终端代号,time进程运行的总时间,cmd进程的命令名称。
一般配合管道符联合使用:ps -ef | grep python
终止进程(只有root用户和进程的所有者才有权限终止进程)
手动杀死进程:
kill 进程号pid,有时候这样会失败,因为有的进程不能这样直接杀死,因为这个进程可能还在被其他进程使用,有可能还在被父进程调用。
kill -9 进程号pid,这样可以强制杀死进程。
CTRL+c 代表终止当前运行的进程,不是对所有进程都有效。
有的进程运行结束后会自动退出,有的不会,需要使用对应的退出命令。
有的进程运行过程中遇到异常也会退出。
了解shell脚本的简单使用
shell脚本是shell script语法结合Linux命令的一个批处理文件。CentOS系统shell默认的版本bash shell。
写一个简单的shell脚本:
首先vi hello.sh新建一个shell文件
shell脚本第一行固定写法:#!/bin/bash
第二行使用echo打印一句话:echo "hello shell"
第三行写一个Linux命令:date
然后保存退出
执行这个shell脚本
. /执行文件的名字
执行shell脚本有多种方式,可以分为在当前shell环境执行脚本或者另起一个shell环境执行。
sh hello.sh也可以写成 . /hello.sh 另起一个shell进程来执行脚本,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。也可以使用相对路径或绝对路径的方法执行脚本,但需要给脚本单独添加执行权限。可以通过观察进程号,发现在当前进程下面启动了一个子进程来执行shell脚本,这样不会影响当前进程。
. hello.sh 也可以写成 source hello.sh 这种方式是直接在当前的shell环境下执行,不会生成新的shell进程。脚本执行完毕,回到当前shell。这种情况会影响当前进程,比如shell脚本切换了目录,当前环境也会切换目录。通常用于生效刚修改过的配置文件。
shell脚本语言基本语法:
定义变量:
注意:定义变量时等号左右两边不能有空格。
注意:定义变量时,变量的值可以使用单引号和双引号,但是有很大区别:单引号会原样输出,双引号会解析里面的命令和变量。推荐使用双引号。
使用变量:
需要在变量前面加$,更规范的写法就是在$后面加{},比如${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:
语法:每个条件分支后面加分号;then,条件和需要执行的代码需要使用双层括号(())括起来,最后以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循环:
语法:条件和需要执行的代码需要使用双层括号(())括起来,do开始,done结束。
举例:计算1-100累加和
#!/bin/bash
i=1
sum=0
while((i<=100))
do
((sum+=i))
((i++))
done
echo "1-100的累加和是:"$sum
for循环:
语法:条件和需要执行的代码需要使用双层括号(())括起来,do开始,done结束。
举例:计算1-100累加和
#!/bin/bash
i=1
sum=0
for ((i;i<=100;i++))
do
((sum+=i))
done
echo "sum is:"$sum
举例:for循环的另外一种写法,for in语句
#!/bin/bash
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