未来往事
我愿像茶一样,把苦涩留在心底,散发出来的都是清香。 [2017年 第22周/共52周]
程序开发过程中当使用了svn软件进行版本控制后,程序每个目录下都会有一个.svn目录存在,开发完当交付产品或上线时这些目录是冗余的需要进行删除,批量删除命令如下:
find . -type d -name ".svn"|xargs rm -rf  #先(递归)找到当前路径下含有 .svn的文件目录,再经xargs逐个删除

find . -type d -iname ".svn" -exec rm -rf {} \; #先(递归)找到.当前路径下含有.svn的文件目录,再删除
PS:-iname filename #同-name ,区别 -i 忽略大小写

扩展补充:find常见用法示例
find path -option [ -print ] [ -exec -ok command ] {} \;
#-print 将查找到的文件输出到标准输出
#-exec command {} \; —–将查到的文件执行command操作,{} 和 \;之间有空格,{} 表示find到的结果,最后有反斜杠\ 和 分号 ; 表示命令结束?
#-ok 和-exec相同,只不过在操作前要询用户
#find 根据下列规则判断 path 和 expression(命令选项参数 -option),在命令列上第一个 – ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
Linux统计日志文件中的IP数   linux下用awk统计日志中各个ip访问页面的次数
日志格式:
引用
211.154.151.115 - - [25/Jun/2013:00:00:01 +0800] "GET /SeeHouse/index/childId/17051 HTTP/1.0" 200 10011 "http://fity.cn/17051.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; 2345Explorer)" 56.132.231.179

统计结果:
[root@iredmail 06]# awk '{a[$1]+=1;}END{for(i in a){print a[i]" " i;}}' newlog_20130624.log
29 222.73.31.71
17 221.194.30.104
wget是linux下命令行的下载工具,功能很强大,虽然很少用,一般下在一些小东西都是直接用firefox,seamonkey这些浏览器自带的下载功能下载,没有必要用wget或者其他下载工具。但是某些时候却不是浏览器自带的下载功能和一些其他的下载软件所能做的的,这时候就得用wget了。比如如果你想下载一个网页目录下的所有文件,如何做呢?

例如:wget -c -r -np -k -L -p http://test.fity.cn/apache/  #下载http://fity.cn/apache/目录下的所有文件

wget命令的帮助文档:
# wget --help

  GNU Wget 1.9.1,非交互式的网络文件下载工具。
  用法: wget [选项]… [URL]…

  长选项必须用的参数在使用短选项时也是必须的。

启动:
  -V, –version 显示 Wget 的版本并且退出。
  -h, –help 打印此帮助。
  -b, -background 启动后进入后台操作。
  -e, -execute=COMMAND 运行‘.wgetrc’形式的命令。


日志记录及输入文件:
  -o, –output-file=文件 将日志消息写入到指定文件中。
  -a, –append-output=文件 将日志消息追加到指定文件的末端。
  -d, –debug 打印调试输出。
  -q, –quiet 安静模式(不输出信息)。
  -v, –verbose 详细输出模式(默认)。
  -nv, –non-verbose 关闭详细输出模式,但不进入安静模式。
  -i, –input-file=文件 下载从指定文件中找到的 URL。
  -F, –force-html 以 HTML 方式处理输入文件。
  -B, –base=URL 使用 -F -i 文件选项时,在相对链接前添加指定的 URL。


下载:
  -t, –tries=次数 配置重试次数(0 表示无限)。
  –retry-connrefused 即使拒绝连接也重试。
  -O –output-document=文件 将数据写入此文件中。
  -nc, –no-clobber 不更改已经存在的文件,也不使用在文件名后
  添加 .#(# 为数字)的方法写入新的文件。
  -c, –continue 继续接收已下载了一部分的文件,断点续传。
  –progress=方式 选择下载进度的表示方式。
  -N, –timestamping 除非远程文件较新,否则不再取回。
  -S, –server-response 显示服务器回应消息。
  –spider 不下载任何数据。
  -T, –timeout=秒数 配置读取数据的超时时间 (秒数)。
  -w, –wait=秒数 接收不同文件之间等待的秒数。
  –waitretry=秒数 在每次重试之间稍等一段时间 (由 1 秒至指定的 秒数不等)。
  –random-wait 接收不同文件之间稍等一段时间(由 0 秒至 2*WAIT 秒不等)。
  -Y, –proxy=on/off 打开或关闭代理服务器。
  -Q, –quota=大小 配置接收数据的限额大小。
  –bind-address=地址 使用本机的指定地址 (主机名称或 IP) 进行连接。
  –limit-rate=速率 限制下载的速率。
  –dns-cache=off 禁止查找存于高速缓存中的 DNS。
  –restrict-file-names=OS 限制文件名中的字符为指定的 OS (操作系统) 所允许的字符。


目录:
  -nd –no-directories 不创建目录。
  -x, –force-directories 强制创建目录。
  -nH, –no-host-directories 不创建含有远程主机名称的目录。
  -P, –directory-prefix=名称 保存文件前先创建指定名称的目录。
  –cut-dirs=数目 忽略远程目录中指定数目的目录层。


HTTP 选项:
  –http-user=用户 配置 http 用户名。
  –http-passwd=密码 配置 http 用户密码。
  -C, –cache=on/off (不)使用服务器中的高速缓存中的数据 (默认是使用的)。
  -E, –html-extension 将所有 MIME 类型为 text/html 的文件都加上 .html 扩展文件名。
  –ignore-length 忽略“Content-Length”文件头字段。
  –header=字符串 在文件头中添加指定字符串。
  –proxy-user=用户 配置代理服务器用户名。
  –proxy-passwd=密码 配置代理服务器用户密码。
  –referer=URL 在 HTTP 请求中包含“Referer:URL”头。
  -s, –save-headers 将 HTTP 头存入文件。
  -U, –user-agent=AGENT 标志为 AGENT 而不是 Wget/VERSION。
  –no-http-keep-alive 禁用 HTTP keep-alive(持久性连接)。
  –cookies=off 禁用 cookie。
  –load-cookies=文件 会话开始前由指定文件载入 cookie。
  –save-cookies=文件 会话结束后将 cookie 保存至指定文件。
  –post-data=字符串 使用 POST 方法,发送指定字符串。
  –post-file=文件 使用 POST 方法,发送指定文件中的内容。


HTTPS (SSL) 选项:
+阅读全文

sed命令 匹配符 详解 不指定

Rinald 本站原创 Linux 2013/03/05 11:10
1、sed简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

2、定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如7,9表示7,8,9行,$符号表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。

3、Sed命令详解
调用sed命令有两种形式:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
a\  //在当前行后面加入一行文本。
b lable  //分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
c\  //用新的文本改变本行的文本。
d  //从模板块(Pattern space)位置删除行。
D  //删除模板块的第一行。
i\  //在当前行上面插入文本。
h  /拷贝模板块的内容到内存中的缓冲区。
H  //追加模板块的内容到内存中的缓冲区
g  //得内存缓冲区的内容,并替代当前模板块中的文本。
G  //获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l  //列表不能打印字符的清单。
n  //读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N  //追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p  //打印模板块的行。
P(大写)  //打印模板块的第一行。
q  //退出Sed。
r file  //从file中读行。
t label  //if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label  //错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file  //写并追加模板块到file末尾。
W file  //写并追加模板块的第一行到file末尾。
!  //表示后面的命令对所有没有被选定的行发生作用。
s/re/string  //用string替换正则表达式re。
=  //打印当前行号码。
#  //把注释扩展到下一个换行符以前。

以下的是替换标记
  g表示行内全面替换。
  p表示打印行。
  w表示把行写入一个文件。
  x表示互换模板块中的文本和缓冲区中的文本。
  y表示把一个字符翻译为另外的字符(但是不用于正则表达式)

Options:
-e command, --expression=command //允许多台编辑。

-h, --help //打印帮助,并显示bug列表的地址。

-n, --quiet, --silent //取消默认输出。

-f, --filer=script-file //引导sed脚本文件名。

-V, --version //打印版本和版权信息。

4、元字符集 匹配符
^ 锚定行的开始 如:/^sed/匹配所有以sed开头的行。
$ 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
* 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 锚定单词的开始,如:/\\> 锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\} 重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。

关于过滤字符串问题
比如在一个文本中搜索abcd这四个字符,使用grep 结果出来abcdef 、zabcd 、abcd 、 hiabcd.... 等等,其实只想搜索abcd
A: 使用精确匹配 $grep "" filename

sed中查找模式匹配:
. 单字符通配符
[0-9] 匹配0,1,2,3...8,9
[a-z] 匹配a,b,c...z
[^0-9] 匹配不含0,1,2...9的所有其他字符
".*"   匹配""内任何字符串
^  行开始标志
$  行结束标志
错误信息:
今天在编译pam_mysql软件时遇到错误:(cd .libs && rm -f pam_mysql.la && ln -s ../pam_mysql.la pam_mysql.la) make: warning:  Clock skew detected.  Your build may be incomplete.错误解决方法

原因分析:
原因是,当前系统的时间还在编译目录中的文件(包括源程序文件和编译后生成的.o目标文件)最后修改时间之前,比如我用“date”命令查看到的时间为2012年12月19日,而目录中文件最后的修改时间为2012年12月20日。
解决方法是,首先应该“make clean”将之前编译的”.o”目标文件清除掉,然后再运行“make”进行编译,即使它再有这样的warning也没关系,因为所有的目标都会被重新编译。当然,要去掉这个warning,只需要将当前时间修改正确即可。

解决方法:
将日期时间设置成当前正确时间
#date -s "月/日/年 HH:MM:SS"
格式是 "MM/DD/YYYY hh:mm:ss"

然后#clock -w强制把系统时间写入CMOS。说明:
在linux系统启动时,操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性, Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。

linux ping 命令使用详解 不指定

Rinald 本站原创 Linux 2011/09/01 07:47
linux ping 命令详解

功能说明:检测主机。


语法:
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

补充说明:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

参  数:
-d 使用Socket的SO_DEBUG功能。

-c<完成次数> 设置完成要求回应的次数。

-f 极限检测。

-i<间隔秒数> 指定收发信息的间隔时间。

-I<网络界面> 使用指定的网络界面送出数据包。

-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。

-n 只输出数值。

-p<范本样式> 设置填满数据包的范本样式。

-q 不显示指令执行过程,开头和结尾的相关信息除外。

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。

-R 记录路由过程。

-s<数据包大小> 设置数据包的大小。

-t<存活数值> 设置存活数值TTL的大小。

-v 详细显示指令的执行过程。

  基础:
  top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载。

  系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:

  - 它没有在等待I/O操作的结果

  - 它没有主动进入等待状态(也就是没有调用'wait')

  - 没有被停止(例如:等待终止)


  例如:
  # uptime
  7:51pm up 2 days, 5:43, 2 users, load average: 8.13, 5.90, 4.94
  
  命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。

    数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU的数目,结果高于5的时候就表明系统在超负荷运转了。

  一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。

  在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出。

linux下如何搜索查找文件 不指定

Rinald 本站原创 Linux 2011/08/04 23:58
  在 X windows中可以像windows那样有搜索,问题是在命令行呢?

  而且,我那天发现在kde下居然没找到在命令行下能找到的文件.

  1.whereis 文件名
  特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的查找都用这条命令.

  2.find / -name 文件名
  特点:准确,但速度慢,消耗资源大,例如我想找到php.ini的准确位置,就需要用
  #find / -name php.ini

  3.locate 文件名
  强力推荐的方法,最快,最好的方法.
  注意:第一次使用该命令,可能需要更新数据库,按照提示的命令执行一下就好了.
我们知道,在redhat下可以用lastlog查看各用户最后登录的信息,用last可以查看指定用户的登录信息。

查看用户登陆信息:

last

命令详解
  功能说明:列出目前与过去登入系统的用户相关信息。

  语  法:last [-adRx][-f <记录文件>][-n <显示列数>][帐号名称...][终端机编号...]

  补充说明:单独执行last指令,它会读取位于/var/log目录下,名称为wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
  参  数:
  -a  把从何处登入系统的主机名称或IP地址,显示在最后一行。

  -d  将IP地址转换成主机名称。

  -f <记录文件>  指定记录文件。

  -n <显示列数>或-<显示列数>  设置列出名单的显示列数。

  -R  不显示登入系统的主机名称或IP地址。

  -x  显示系统关机,重新开机,以及执行等级的改变等信息。

lastlog

只是记录每个用户上次登录的时间,/var/log/lastlog

例如:查看root和admin在最近20天内是否有登录:
#lastlog -t 20|egrep "root|admin"

查看最近20天内登录的用户,除root和admin之外:
#lastlog -t 20|egrep -v "root|admin"


Linux chown 命令使用详解 不指定

Rinald 本站原创 Linux 2011/07/26 17:58
作用:
更改与文件关联的所有者或组。

格式:
chown [  -f ] [ -h ] [  -R ] Owner [ :Group ] { File ... | Directory ... }

chown -R  [  -f ] [ -H | -L | -P ] Owner [ :Group ] { File ... | Directory ... }

描述:
chown 命令将 File 参数指定的文件的所有者更改为 Owner 参数指定的用户。Owner 参数的值可以是可在 /etc/passwd 文件中找到的用户标识或登录名。还可以选择性地指定组。Group 参数的值可以是可在 /etc/group 文件中找到的组标识或组名。

只有 root 用户可以更改文件的所有者。只在您是 root 用户或拥有该文件的情况下才可以更改文件的组。如果拥有文件但不是 root 用户,则只可以将组更改为您是其成员的组。

虽然 -H、-L 和 -P 标志是互斥的,指定不止一个也不认为是错误。指定的最后一个标志确定命令拟稿将演示的操作。


参数:
-f 禁止除用法消息之外的所有错误消息。

-h 更改遇到的符号链接的所有权,而非符号链接指向的文件或目录的所有权。 当遇到符号链接而您未指定 -h 标志时,chown 命令更改链接指向的文件或目录的所有权,而非链接本身的所有权。

如果指定 -R 标志,chown 命令递归地降序指定的目录。

-H 如果指定了 -R 选项,并且引用类型目录的文件的符号链接在命令行上指定,chown 变量会更改由符号引用的目录的用户标识(和组标识,如果已指定)和所有在该目录下的文件层次结构中的所有文件。

-L 如果指定了 -R 选项,并且引用类型目录的文件的符号在命令行上指定或在遍历文件层次结构期间遇到,chown 命令会更改由符号链接引用的目录的用户标识(和组标识,如果已指定)和在该目录之下的文件层次结构中的所有文件。

-P 如果指定了 -R 选项并且符号链接在命令行上指定或者在遍历文件层次结构期间遇到,则如果系统支持该操作,则 chown 命令会更改符号链接的所有者标识(和组标识,如果已指定)。chown 命令不会执行至文件层次结构的任何其它部分的符号链接。

-R 递归地降序目录,更改每个文件的所有权。当遇到符号链接并且链接指向目录时,更改该目录的所有权,但不进一步遍历目录。不过 -h、-H、-L or -P 标志也未指定,则当遇到符号链接并且该链接指向到目录时,该目录的组所有权更改但不会进一步遍历目录。


安全性:
访问控制:此程序应该作为“可信计算基”中的正常用户程序安装。

退出状态:
该命令返回以下出口值:
0 命令执行成功并已执行所有请求的更改。
>0 发生错误。

示例:
1.要更改文件 program.c 的所有者:

chown jim program.cprogram.c 的用户访问权限现在应用到 jim。作为所有者,jim 可以使用 chmod 命令允许或拒绝其他用户访问 program.c。

2.要将目录 /tmp/src 中所有文件的所有者和组更改为用户 john 和组 build:

chown -R john:build /tmp/src

文件:
/usr/bin/chown chown        命令
/etc/group                        包含组标识的文件
/etc/passwd                      包含用户标识的文件


linux mv 命令使用详解 不指定

Rinald 本站原创 Linux 2011/07/25 18:30
作用
mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于DOS系统下的ren和move命令的组合。它的使用权限是所有用户。

格式
mv [options] 源文件或目录 目标文件或目录

主要参数[options]
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答”y”或”n”,这样可以避免误覆盖文件。

-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。

选择参数
当选择参数类型是文件时,mv命令完成文件重命名,它将所给的源文件或目录重命名为给定的目标文件名。

当选择参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

应用实例
(1)将/usr/udt中的所有文件移到当前目录(用”.”表示)中:
$ mv /usr/udt/* .


(2)将文件test.txt重命名为wbk.txt:
$ mv test.txt wbk.txt


How to Mount a CIFS Share in Linux Environment? 

经常在我们挂载cifs共享时遇到mount error 13 = Permission denied这类错误,请耐心的阅读完本文,我相信你将会有所收获.


解释:?
mount.cifs - mount using the Common Internet File System (CIFS)


参数:
mount.cifs {service} {mount-point} [-o options]


I am getting sick and tired of this so called Smbfs replacement \"Cifs\". I have yet another error trying to mount a share on a Windows server 2003 standard edition machine. I get an error saying \"Permission denied\" despite entering the right credentials:

引用
Code:
Cifs \"mount error 13 = Permission denied\" CIFS SUCKS

Most of people got this Permission Denied access when mounting a Windows Shared folder


following mounting ->

usually :
mount -t cifs //<MachineName>/<Shared Folder> /mnt/Shared -o username=<username>,password=<password>
give you error 13.


correct :
+阅读全文
linux tar 命令压缩排除某个目录或文件
在对某个目录进行压缩的时候,有时候想排除掉某个目录,例如:

如果data目录下有3个子目录,mysql1、mysql2、mysql3。

我现在想只对mysql1和mysql3目录打包压缩,命令如下:
# tar -zcvf data.tar.gz --exclude=mysql2 data    //注意:需要在data目录的外面运行

说明:使用exclude参数来过滤不需要的目录或文件,排除某个文件的操作和排除目录的方法一样。

Linux tar 命令使用详解 不指定

Rinald 本站原创 Linux 2011/06/09 16:06
tar命令使用

作用:
tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。

语法:tar [主选项+辅选项] 文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

参  数:

c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。

r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。

t 列出档案文件的内容,查看已经备份了哪些文件。

u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。

x 从档案文件中释放文件。

可选参数:

b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。

f 使用档案文件或设备,这个选项通常是必选的。

k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。

m 在还原文件时,把所有文件的修改时间设定为现在。

M 创建多卷的档案文件,以便在几个磁盘中存放。

v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。

w 每一步都要求确认。

z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。




Linux下的压缩文件剖析
对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap。可是Linux就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名,此外windows下的.zip和.rar也可以在Linux下使用,不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结,希望你下次遇到这些文件时不至于被搞晕.

在具体总结各类压缩文件之前呢,首先要 弄清两个概念:打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩。

Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法:
tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面来举例说明一下:
引用
# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-t是解开的意思

以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等。
1) tar调用gzip
gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:
+阅读全文
第1页 / 共1页 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]