马哥M28-第八天、
vim :
u撤销最近的更改,一次一个;
#u撤销之前多次更改;
U 撤销光标落在这行后所有此行的更改
按ctrl - r重做最后的“撤销”更改
. 重复前一个操作
n. 重复前一个操作n次
退出模式下 e! 直接还原到文件最初打开状态
在不完全保存退出或者故障导致异常关闭vim后当再打开时,会提示filename.swp缓冲交换文件,此为保存用户执行修改操作时的所有操作,在修改过程中并未
对源文件进行改动,所以此处可以利用其还原操作,当然另外在此补充知识:watch 命令,可以实时刷新一条命令的执行输出结果,用来对比查看在打开vim时以及之后
所做的的所有操作,比较生成.swp文件以及之后的变化!
watch :watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。在Linux下,watch是周期性的执行下个程序,并全屏显示执行结果。你可以拿他来监测你想要的一切命令的结果变化,比如 tail 一个 log 文件,ls 监测某个文件的大小变化,看你的想象力了!
-n或--interval watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
-d或--differences 用-d或--differences 选项watch 会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。
-t 或-no-title 会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。
-h, --help 查看帮助文档
-n 1 -d ->指间隔一秒高亮显示变化区域信息; -n .1 -d ->指间隔0.1秒高亮显示变化区域信息
示例:命令:每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d netstat -ant
ping命令:
示例:ping -c10 -w1 127.0.0.1 最终距离最开始ping之后1秒结束ping动作
ping -c10 -W1 127.0.0.1 最终会每次间隔一秒ping完十次后结束命令 小写w表示多少多长时间结束Ping; 大写W表示每次Ping间隔时间 秒为单位
作业:
1.在vim中设置tab缩进为4个字符
vim /etc/vimrc
set tabstop=4
2.复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
cp /etc/rc.d/init.d/functions /tmp
:%[email protected]/etc/sysconfig/[email protected]/var/[email protected]
3、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
:%[email protected]^#\([[:space:]]\+.*\)@\[email protected] 后向引用:以每个小括号开始为分组,
- 编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小
主机名 hostname
IP ifconfig ifconfig eth0 具体查看某张网卡的网络信息
系统版本 cat /etc/redhat-release
内核版本 uname -r
CPU型号 cat /proc/cpuinfo
内存大小 cat /proc/meminfo 或 free -m
硬盘大小 fdisk -l
#!bin/bash
echo 主机名"$(hostname)"
ipaddr=$(ifconfig ens33 |grep broad |tr -s " "|cut -d" " -f3)
echo ip地址"$ipaddr"
version1=$(cat /etc/redhat-release)
echo 系统版本"${version1}"
version2=$(uname -r)
echo "内核版本"${version2}
cpu=$(cat /proc/cpuinfo |egrep "model name" |uniq |cut -d: -f2)
echo cpu型号"${cpu}"
mem=$(echo $[$(cat /proc/meminfo |egrep MemTotal |tr -s " " :|cut -d: -f2)/1024])
echo 内存大小"$mem"
sda=$(fdisk -l |egrep "Disk /" |cut -d, -f1|cut -d: -f2|cut -d" " -f2,3)
echo 硬盘大小"$sda"
2、编写脚本/root/bin/backup.sh,可实现将/etc/目录备份到/root/etcYYYY-mm-dd中
练习题2优化版v1:
#date:2018-01-22
echo "准备复制/etc/下的所有目录以及文件到当前目录中:\n"
DATE_NOW=$(date +%F)
backup="etc${DATE_NOW}"
if [ -f "$backup" ] ;then
echo "当前目录存在同备份同名目录,现进行删除并备份操作:"
rm -f ${backup}
cp -rp /etc ./${backup}
fi
check=$(echo $?)
if [ "0" -eq "$check" ] ;then
echo "备份完成,请检查备份文件!"
else
echo "备份失败,请重新检查进行备份!"
fi
***检索复制后内容与复制对象之间的完全正确:通常使用比对文件字节数大小、文件和目录个数(、md5等加密)完全一直应该可以确定
作业:
3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
df (fdisk -l 不能查看使用率)
4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
主要命令:netstat -tan -> 查看网络Ip连接信息
练习:
1、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和
#!/bin/bash
A=$(cat /etc/passwd |head -n 10 |tail -1 |cut -d: -f3)
B=$(cat /etc/passwd |head -n 20 |tail -1 |cut -d: -f3)
echo "$[$A+$B]"
作业:
2、编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
3、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
作业:写一个生成脚本的脚本,/root/bin/createsh.sh当执行如/root/bin/createsh.sh test.sh时,会自动在/root/bin下新建一个名为test.sh的新文件,该文件会自动给上执行权限,同时自动在文件头加上shabang及注释信息,注释信息如下:
#!/bin/bash
# ------------------------------------------
# Filename: test.sh(此处会根据文件名自动更换)
# Revision: 1.0
# Date: 2017-01-22(此处会自动变换为当前日期)
# Author: Nanyibo
# Email: [email protected]
# ------------------------------------------
# Copyright: 2017 nanyibo
# License: GPL
之后,自动使用vim打开,等待用户开始编写脚本正文。
7,1 Top
#!/bin/bash
#V1~之后考虑完善脚本,使其更加具有交互性
#Problem:如何在自动开启vim后,光标落在新的空行行首???
datenow=$(date +%F)
if [ -z "$1" ];then
echo "您要准备创建的脚本名称是被您吃了吗?!"
#此处可以替用户创建以当前日期等组合字符串命名的默认脚本文件~本人懒,请南一博boss看着写吧,嘿嘿嘿!
exit 1
else
if [ -f "$1" ];then
echo "脚本已存在,请创建正确的脚本名称"
exit 1 #可以自定义error错误返回值,默认使用错误返回1
else
#dircurrent=$(pwd) 判断用户当前所在目录,后续判断完善替用户在默认创建指定目录后创建脚本 mkdir -p /app/test ;
newname=$(echo "$1" |cut -d'.' -f1)
touch /app/test_sh/${newname}.sh #touch本身执行完成是没有返回结果
autoCrefile=/app/test_sh/${newname}.sh
chmod 755 ${autoCrefile}
access=$(echo $?)
if [ "0" -eq "${access}" ];then
echo "系统已自动为您生成相应的文件名的脚本,现在将自动生成标准内容"
echo -e "#!/bin/bash\n#----------------------------------\n#Filename: ${newname}\n#Revision: 1.0\n#Date: ${datenow}\n#
Author: sunxuefeng\n#Email: [email protected]\n#---------------------------------\n#Copyright: 2018-01-22 sunxuefeng\n#Li
cense: GPL" > ${autoCrefile}
echo "脚本以及对应默认格式内容已经填充,请继续编辑脚本文件"
sleep 1 #为了更好的实现交互,灵活使用睡眠指令,可以将瞬时延缓,
vim ${autoCrefile}
else
echo "脚本创建失败,请检查故障"
fi
fi
fi
马哥M28第九天、
根据退出状态而定,命令可以有条件的进行选择执行:
&& 代表条件性的AND THEN
|| 代表条件性的OR ELSE 比如: 为真0 && echo "成功";exit 0 || (echo "失败";exit 1
test []
-v VAR
变量VAR是否设置
数值测试:
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
练习:
1.编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数不等于1,则提示用户“应该给一个参数”,并立即退出;如果参数个数等于1,则显示所指向的文件中的空白行数
#!/bin/bash
[ $# -ne 1 ] && ( echo "应该给一个参数";exit 1 )
echo "$(cat $1 |egrep -c "^[[:space:]]*$")"
2.编写脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,如果未给定一个合法的IP地址,则提示 “给一个合法的IPV4地址” ,并立即退出。如果给出IPV4地址,则测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”
echo $1 |egrep -q "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" && ( ping -c1 -w1 $1 >/dev/null && echo "主机网络畅通" || echo "主机网络不通" ) || echo "输入IP有误,格式:xxx.xxx.xxx.xxx,xxx小于255"
转义:
'' 和 \ 完全转义 ;
""在以下四种情况不转议:! \ ` $
a交互式与非交互式登录:
交互式:访问顺序 /etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc
非交互式:访问顺序 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*sh
srouce 与 . 在当前shell下执行脚本,用来设置环境变量以及别名、函数等
/bin/bash 或路径方式执行脚本,是子shell用执行,可以继承shell的环境变量,但在脚本中设置的任何变量,均不会影响父shell.
if then else fi
#!/bin/bash
if [ $# -eq 0 ];then
echo "请输入用户名"
exit 1
fi
if $(id $1 &>/dev/null);then
echo "${1} alread exist"
exit 1
else
useradd $1
fi
-----------------------------------------
#!/bin/bash
if [ $1 -lt 3];then
echo redhat
elif [ $1 -eq 3 ];then
echo "green"
elif [ $1 -gt 3 -a $1 -lt 5 ]
echo yellow
else
echo white
fi
--------------------------------------------------
case $1 in
1)echo redhat;;
2)echo yellow;;
3)echo green;;
*)echo blue;;
esac # case .. in 中的每个分支里都可以使用模式,即可以有多个选项 1 |2 |3 |4)echo ..;;
作业:
- 编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
#!/bin/bash
cipan=`df |grep /dev/sd |tr -s " " % |cut -d % -f5 |sort -nr |head -n1`
inode=`df -i |grep /dev/sd | tr -s " " % |cut -d% -f5 |sort -nr |head -n1`
#这里暂不使用if进行分情况判断了
[ ${cipan} -gt 80 -o ${inode} -gt 80 ] && wall "磁盘或INode号超过80%"
2.编写脚本/bin/per.sh ,判断当前用户对指定的参数文件,是否不可读并且不可写
if [ ! -r $1 ] && [ ! -w $1 ];then
echo "用户对该文件不可读不可写"
fi
3.编写脚本/root/bin/excute.sh,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件
#!/bin/bash
if [ -f $1 ];then
if $(echo $1 |grep -qo \.sh$);then
chmod a+x $1
echo "成功"
exit 0
else
echo "非脚本文件"
exit 1
fi
else
echo "文件不存在"
fi
4.编写脚本/root/bin/nologin.sh和login.sh,实现禁止和允许普通用户登录系统
#!/bin/bash
a=$(id -u $1)
if [ $a -ge 1000 ];then #CentOS7中系统用户uid<1000
usermod -s /bin/bash $1
else
echo "系统用户,不可更改"
fi
#------------------------------------------------------
#!/bin/bash
a=$(id -u $1)
if [ $a -ge 1000 ];then
usermod -s /sbin/nologin $1
else
echo "系统用户,不可禁用"
fi
5.让所有用户的PATH环境变量的值多出一个路径,例如: /usr/local/apache/bin
echo "PATH=$PATH:/usr/local/apache/bin" >>/etc/profile.d/path.sh
6.用户root登录时,将命令提示符变成红色,并自动启用如下别名:rm='rm -i'
PS1="\[\e[31m\][\[email protected]\h \W]\\$\[\e[0m\]"
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias editnet='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
alias editnet='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
7、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等
一旦执行reset.sh,会设置以下内容
创建一个别名为ipconfig功能是显示第一个网卡的IP
设置提示符为绿色
设置vim自动显示行号
设置登录后的欢迎界面(内容自定义)
echo 'alias ipconfig="ifconfig |head -2 |tail -1|tr -s [:blank:] :|cut -d: -f4"' >> ~/.bash_profile
echo 'PS1="\[\e[32m[\[email protected]\h \W]\\$\e[0m\] "' >> ~/.bash_profile
echo "set number" >> /etc/vimrc
echo 自定义欢迎界面 > /etc/motd
重点题目:
8、编写一个创建用户的脚本,要求以下功能 :脚本路径 /app/shell2/
a.提示用户输入希望创建的用户名(当用户超时8秒不输入,提示超时并退出)
b.检测用户名是否已存在,若存在则提示用户名已存在,并退出。
c.用户创建完成后提示用户是否要继续设置密码,若用户输入yes、YES、y、Y时则继续下一步,如输入其他,或超时8秒均退出。
d.接上一步,为用户设置密码,首先提示用户输入要设置的密码,密码的输入过程不可见。
e.对用户上一步所输入的密码进行长度检测,若少于5位(包含5位),则提示用户密码太短,并退出。
f.对用户在第d步所输入的密码进行复杂度检测,若所输入的内容与/usr/share/dict/words 字典中的某一行条目完全一致,则提示密码是一个常见单词,并退出。
g.再一次让用户输入密码,若第二次输入的密码与在第d步输入的不一致,则提示用户两次密码不一致并退出。
h.d至g步骤全部通过后,为用户设置密码后,并提示密码已成功设置。最后正确退出。
以上的所有退出情况应给出不同的返回值。
小记录:过多的设置变量会占用内存,尽可能的减少不必要的变量!
#!/bin/bash
#author : sunxuefeng_magedu
#date : 2018-1-25
for i in {1..3} #for i in {n..m} do .. done for ((i=0;i<=2;i++));do .. done for i in $(seq 1 3) do .. done
do
echo
read -t 12 -p "请输入您要创建的用户名:" username
if [ 142 -eq $(echo $?) ];then
echo -e "输入超时,请重新输入用户名\n"
continue
elif [ -z "${username}" ];then
echo "输入的用户名不能为空!"
continue
elif [ 0 -eq $(echo $?) ];then
id ${username} &>/dev/null
if [ 0 -eq $(echo $?) ];then
echo -e "用户名已存在,请重新输入其他用户名\n"
continue
fi
else
useradd ${username}
echo "用户合法,创建成功"
echo "----------------------------------------------"
#exit 105 此处可以继续判断一下自定义异常代码字典,创建异常导致失败时抛出
fi
break
done
read -t 15 -p "是否为新用户设置密码?(y/yes/YES/Yes/yEs,or input other anything to No SET)" a
case ${a} in
y|yes|YES|Yes|yEs) echo "准备为新用户设置密码" ;;
*) echo "未设置密码,退出"
exit
;;
esac
for i in $(seq 1 3)
do
echo
read -t 15 -s -p "请开始设置您的密码并牢记:" pawd
if [ 142 -eq $(echo $?)];then
echo "输入密码超时,请重新输入"
continue
echo ${pawd} |egrep [[:blamk:]] &>/dev/null
elif [ 0 -eq $(echo $?)];then
echo "密码还有空白字符等非法字符,请以数字字母或下划线正确设置"
contine #自定义
else
pwdsize=$(echo ${pawd} |wc -c)
let pwdsizz=${pwdsizz}-1
if [ 5 -gt ${pwdsizz} ];then
echo "密码长度不能少于5位,请重新设置安全密码"
continue
else
read -s -p "Retry agine input your passwd:" rpawd
if [ "${rpawd}" == "${pawd}" ];then
echo "${rpawd}" |passwd --stdin ${username} #同一个脚本下变量是可以引用的,不存在不同循环不可引用的情况
if [ 0 -eq $(echo $?) ];then
echo "密码设置成功"
exit 0
else
echo "Unknown ERROR,please check it,or retry to set the password agine"
exit 105
fi
else
echo "前后两次输入的密码不一致,请重新输入正确的密码"
continue
fi
fi
fi
break
done
locate KeyWord :基于数据库模式的查找 速度快、缺乏实时性
有用的选项
-i 不区分大小写的搜索
-n N 只列举前N个匹配项目
-r(regex) 使用正则表达式
示例
搜索名称或路径中带有"conf"的文件
locate conf 搜索时会基于根路径搜索
使用Regex来搜索以".conf"结尾的文件
locate -r "\.conf$"
数据文件的位置
/var/lib/mlocate/mlocate.db
更新数据文件方法
updatedb
马哥教育M28-第十天、
find
指搜索层级
-maxdepth level 最大搜索深度,指定目录为第一级
-mindepth level 最小搜索目录深度
根据文件名和Inode查找:
-name "文件名称" : 支持使用glob(通配)
find /etc/ -name "*pas?wd*" *,?,[],[^]
-iname "文件名称" :不区分字母大小写
find /etc/ -iname *pas?wd*
-inum n 按inode号查找
find -inum 69
-samefile name 相同inode号的文件
find -samefile a123
-links n 链接数为n的文件
find -links 2
-regex "PATTERN" :以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
find /etc/ -regextype posix-egrep -regex ".*/pa[sa]{2}wd"
根据属主、属组查找:
-user USERNAME : 查找属主为指定用户(UID)的文件
-group GROUPNAME: 查找属组为指定组(GID)的文件
-uid UserID :查找属主为指定的UID的文件
-gid GroupID :查找数组为指定的GID号的文件
-nouser :查找没有属主的文件
-nogroup : 查找没有属组的文件
find -user guanyunchang NO user
根据文件类型查找:
-type TYPE:
f:普通文件类型
d:目录文件
l:符号链接文件
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件
find /dev/ -type c
根据文件大小来查找;
-size [+|-]#unit
常用单位: k, M,G, c(byte)
#unit : (#-1,#]
如:6k,表示 (5k,6k]
-#unit :[0,#-1]
如 :-6k, 表示[0,5k]
+#unit :(#,oo)
如:+6k, 表示(6k,oo)
根据时间戳:
以天为单位:
-atime [+|-]#
# : [#,#+1)
+# :[#+1,oo]
-# :[0,#)
-mtime
-ctime
以分钟为单位:
-amin
-mmin
-cmin
find /etc/ -mtime -1
根据权限查找:
-perm [/|-]MODE
mode : 精确权限匹配
/mode :任何一类(u,g,o)对象的权限中只要能有一位匹配即可,或关系, +从CentOS7开始淘汰
-MODE :每一类对象都必须同时拥有指定权限,与关系
0 表示不关注
find -perm 755 会匹配权限模式恰好是755的文件
只要当任意人有写权限时,find -perm /222就会匹配,当权限描述为组合权限时,各权限之间为或关系
只有当每个人都有写权限时,find -perm -222才会匹配,当权限描述为组和权限时,各权限之间为与关系
只有当各自位置对象满足包含或等于655时,即u至少有读写,g至少有读和可执行,o其他人有读和可执行才会匹配
处理动作:
-print :默认的处理动作,显示至屏幕
-ls : 类似于对查找到的文件执行 ls -l
-delete: 删除查找到的文件
find -size +6k -delete
-fls file :查找到的所有文件的长格式信息保存至指定文件中
-ok -exec ok是交互式, exec直接运行后面所接的命令
find -name "*.tmp" -ok rm -f {} \;
find -type f -name "*.sh" -exec chmod a+x {} \;
find -name "*.conf" -exec cp -i {} {}.bak \;
find \( pattern \) 必须注意:小括号里面的表达式必须与小括号有空格才行,特殊符需要加反斜杠
由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs命令,xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或者回车符将stdin的数据分隔成arguments; 注意:文件名或者是其他意义的名词内含有空格符的情况;有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
示例:
ls |xargs rm
find /sbin -perm -700 |ls -l 错误,find本身不支持管道符
find /sbin -perm -700 |xargs ls -1
find和xargs格式:find |xargs COMMAND
练习:
- 查找/var目录下属主为root,且属组为Mail的所有文件
find /var -user root -group mail
- 查找 /var 目录下不属于root lp gdm的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \)
- 查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
find /var -mtime -7 -not \( -user root -o -user postfix \)
- 查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / -type f -atime -7
压缩
compress
compress srcfile 将源文件压缩成压缩包,源文件消失
compress -v srcfile 或compress -v -d dstfile.Z 压缩或解压缩时显示详细信息
compress -c srcfile > dstfile.Z 将源文件压缩成压缩包,源文件保留
compress -d dstfile.Z 或uncompress dstfile.Z 将压缩包解压成源文件,压缩包消失
compress -d -c dstfile.Z > srcfile 或 zcat dstfile.Z > srcfile 将压缩包解压成源文件,压缩包保留
gzip
gzip srcfile 将源文件压缩成压缩包,源文件消失
gzip -c srcfile > dstfile.gz 将源文件压缩成压缩包,源文件保留
gzip -d dstfile.gz 或gunzip dstfile.gz 将压缩包解压成源文件,压缩包消失
gizp -d -c dstfile.gz > srcfile 或zcat dstfile.gz > srcfile 将压缩包解压成源文件,压缩包保留
gzip -# srcfile (#即1-9,表示压缩比,数字越大压缩比越高,默认为6)
bzip2
bzip2 srcfile 将源文件压缩成压缩包,源文件消失
bzip2 -k srcfile 将源文件压缩成压缩包,源文件保留且权限不变
bzip2 -c srcfile > dstfile.bz2 将源文件压缩成压缩包,源文件保留但权限根据umask值而改变
bzip2 -d dstfile.bz2 或bunzip dstfile.bz2 将压缩包解压成源文件,压缩包消失
bzip2 -k -d dstfile.bz2或bunzip -k dstfile.bz2 将压缩包解压成源文件,压缩包保留且权限不变
bzip2 -d -c dstfile.bz2 > srcfile 或bunzip -c dstfile.bz2 > srcfile 解压压缩包,压缩包保留但是解压后文件权限根据umask而定
bzip2 -# srcfile (即1-9,表示压缩比,数字越大压缩比越高,默认为9)
bzcat dstfile.bz2 可以预览解压后的内容,配合>也能解压,但权限会根据umask值而改变
xz [OPTION]...FILE...
-k keep,保留源文件
-d 解压缩
-# 1-9,压缩比,默认为6
xzcat :不显示解压缩的前提下查看文本文件内容
zip
zip -r 生成后路径(或压缩包名) 被压缩文件.. 可以多个源文件一起 -->打包,可以跨平台
zip -r config.zip /etc/passwd /etc/group /etc/shadow /etc/gshadow
unzip config.zip
tar 归档、解档
tar -tf mage.tar.gz(tgz) 预览压缩包的文件列表
tar -rf mage.tar /path/newfile 往tar包中增加文件(注意只能对tar包增加文件,而不能对压缩包增加)
tar -cf mage.tar filename1 filename2 .. 将多个文件打包至mage.tar
tar -zcf mage.tar.gz mage.tar.gz filename1 filename2 .. 将多个文件打包并用gzip压缩为mage.tar.gz
tar -jcf mage.tar.bz2 filename1 filename2 filenameN 将多个文件打包并用bzip2压缩为mage.tar.bz2
tar -Jcf mage.tar.xz filename1 filename2 filenameN 将多个文件打包并用xz压缩为mage.tar.xz
tar -zxvf mage.tar.gz -C /tmp 解压gz的压缩包到/tmp目录
tar -zxvf mage.tar.gz 解压gz的压缩包到当前目录并显示详细过程
tar zcvf mage.tar.gz -T yasuolist.txt -X paichu.txt
-T 指定需要打包并压缩的文件列表,每个文件路径一行
-X 指定要排除的文件列表,每个文件一行
split -b 2k -d etc.tgz 4
将压缩包以2k为单位分割为4份 split -b (size)k -d dst n
cat 40* > mage.tgz 将以40开头命名的多个分割包合并为mage.tgz,如果是文件,则是将多个文件内容追加方式到mage.tgz
cpio
功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份、还原恢复的工具,它可以解压以".cpio"或".tar"结尾的文件
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
sed :针对行数据处理,一行一行的顺序读取处理,但默认不对源文件进行更改,输出到终端
sed -n '1p' passwd 只打印第一行 -n不打印, 1p 打印第一行
ifconfig eth1 |sed -n '2p'
seq 100 |sed -n '1~2p' 步进(默认1),只显示奇数行 偶数+1是奇数
seq 100 |sed -n '2~2p' 步进 ,只显示偶数行 偶数+偶数 偶数
sed -i.orig 's/dog/cat/gi' pets 备份后再替换 备份文件为xx.orig
sed '2a\dog cat dog cat cat' pets 在第二行后增加指定内容的新行
sed '2i\dog cat dog cat cat' pets 在第二行前插入指定内容的新行
sed '2c\dog cat gog cat cat' pets 替换第二行
sed '2w /path/filename' pets 将第二行保存到指定文件
sed '2r /path/filename' pets 将指定文件读取并加到第二行后
sed '=' pets 在显示的结果前显示行号
echo {1,2,3}[ab] -> 1[ab] 2[ab] 3[ab] 中括号单独在命令行 或者普通的出现在echo中,不作为任何特殊含义
echo {1,2,3}{a,b} -> 1a 1b 2a 2b 3a 3b
echo {1,2,3}ab -> 1ab 2ab 3ab
原文地址:http://blog.51cto.com/12947626/2066042