Linux系统-打包&重定向/管道符/进程&shell脚本

打包、解包、压缩、解压缩命令

统一使用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

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值