本文主要是介绍鸟哥的Linux私房菜笔记(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
鸟哥这书写的好长。。
压缩文件和解压文件原理:
由於我们记录数字是 1 ,考虑计算机所谓的二进位喔,如此一来, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 罗!你看看,其实在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!而一些聪明的计算机工程师就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小!这就是压缩的技术啦!
另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『111....』共有100个1时, 那么压缩技术会记录为『100个1』而不是真的有100个1的位存在!这样也能够精简文件记录的容量呢! 非常有趣吧!
简单的说,你可以将他想成,其实文件里面有相当多的『空间』存在,并不是完全填满的, 而『压缩』的技术就是将这些『空间』填满,以让整个文件占用的容量下降! 不过,这些『压缩过的文件』并无法直接被我们的操作系统所使用的,因此, 若要使用这些被压缩过的文件数据,则必须将他『还原』回来未压缩前的模样, 那就是所谓的『解压缩』罗!
Linux 的扩展名没有什么作用
*.Z compress 程序压缩的文件; *.gz gzip 程序压缩的文件; *.bz2 bzip2 程序压缩的文件; *.tar tar 程序打包的数据,并没有压缩过; *.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩 *.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
前一小节谈到的命令大多仅能针对单一文件来进行压缩,虽然 gzip 与 bzip2 也能够针对目录来进行压缩, 不过,这两个命令对目录的压缩指的是『将目录内的所有文件 "分别" 进行压缩』的动作! 而不像在 Windows 的系统,可以使用类似 WinRAR 这一类的压缩软件来将好多数据『包成一个文件』的样式。
这种将多个文件或目录包成一个大文件的命令功能,我们可以称呼他是一种『打包命令』啦! 那 Linux 有没有这种打包命令呢?是有的!那就是鼎鼎大名的 tar 这个玩意儿了! tar 可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2 的支持,将该文件同时进行压缩!
其实最简单的使用 tar 就只要记忆底下的方式即可:
- 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
- 查 询:tar -jtv -f filename.tar.bz2
- 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
选项与参数:
-c :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的档名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗!
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。其他后续练习会使用到的选项介绍:
-p :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档
-P :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!
root@www ~]# dd if="input_file" of="output_file" bs="block_size" \ > count="number" 选项与参数: if :就是 input file 罗~也可以是装置喔! of :就是 output file 喔~也可以是装置; bs :规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小) count:多少个 bs 的意思。范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中 [root@www ~]# dd if=/etc/passwd of=/tmp/passwd.back 3+1 records in 3+1 records out 1945 bytes (1.9 kB) copied, 0.000332893 seconds, 5.8 MB/s [root@www ~]# ll /etc/passwd /tmp/passwd.back -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd -rw-r--r-- 1 root root 1945 Dec 17 18:09 /tmp/passwd.back # 仔细的看一下,我的 /etc/passwd 文件大小为 1945 bytes,因为我没有配置 bs , # 所以默认是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整的 # 512 bytes,以及未满 512 bytes 的另一个 block 的意思啦! # 事实上,感觉好像是 cp 这个命令啦~范例二:将自己的磁碟之第一个磁区备份下来 [root@www ~]# dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.0104586 seconds, 49.0 kB/s # 第一个磁区内含有 MBR 与 partition table ,透过这个动作, # 我们可以一口气将这个磁碟的 MBR 与 partition table 进行备份哩!范例三:找出你系统最小的那个分割槽,并且将他备份下来: [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.9G 5.1G 44% / /dev/hdc3 4.8G 651M 3.9G 15% /home /dev/hdc1 99M 21M 73M 23% /boot <==就捉他好了! [root@www ~]# dd if=/dev/hdc1 of=/tmp/boot.whole.disk 208782+0 records in 208782+0 records out 106896384 bytes (107 MB) copied, 6.24721 seconds, 17.1 MB/s [root@www ~]# ll -h /tmp/boot.whole.disk -rw-r--r-- 1 root root 102M Dec 17 18:14 /tmp/boot.whole.disk # 等於是将整个 /dev/hdc1 通通捉下来的意思~如果要还原呢?就反向回去! # dd if=/tmp/boot.whole.disk of=/dev/hdc1 即可!非常简单吧! # 简单的说,如果想要整个硬盘备份的话,就类似 Norton 的 ghost 软件一般, # 由 disk 到 disk ,嘿嘿~利用 dd 就可以啦~厉害厉害!alias:别名
..=cd ..
...=cd ../..
md=mkdir -p
这篇关于鸟哥的Linux私房菜笔记(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!