压缩技术的原理:
1. 一般计算机系统使用bytes单位来计量的,然而计算机最小的计量单位应该是bits,也就是1 byte = 8bits 实际上压缩技术原理就是用bit来代替byte 作为最小计量单位,把那些byte中没有利用的bits利用起来。举例:存储数字1;用byte 表示:0000 0001 ;压缩技术就是把末尾1前面的0利用起来。
2.另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『 111....』共有 100 个 1 时, 那么压缩技术会记录为『 100 个 1』而不是真的有 100 个 1 的位存在!这样也能够精简档案记录的容量呢!
Linux 常见的压缩文档扩展名:
*.gz gzip 程序压缩的档案;(windows可以使用)
*.bz2 bzip2 程序压缩的档案;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的档案,其中并且经过 bzip2 的压缩
由于 gzip;bzip2,指令每次只能对一个档案来压缩与解压缩。因此此时用tar 指令将程序打包成一个文档显得十分必要。
[root@www ~]# gzip [-cdtv#] 檔名
[root@www ~]# zcat 檔名.gz(查看压缩过的压缩文档)
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看档案有无错误;
-v :可以显示出原档案/压缩文件案的压缩比等信息;
-# :压缩等级,-1 最快,但是压缩比最差、 -9 最慢,但是压缩比最好!预设是-6
[root@www ~]# bzip2 [-cdkzv#] 檔名
[root@www ~]# bzcat 檔名.bz2(查看压缩过的压缩文档)
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留源文件,而不会删除原始得档案喔!
-z :压缩的参数
-v :可以显示出原档案/压缩文件案的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
看参数显然可以得出bzip2 指令更佳他可以保留原文件哦;但是gzip的.gz能在winrar 使用了。
tar:广泛使用,winrar可以识别
-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 打包!
其实最简单的使用 tar 就只要记忆底下的方式即可:
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
仅 解压部分档案:
[root@www ~]# tar -jxv -f 打包档.tar.bz2 待解开档名 [root@www ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow 注意:解压到某个目录时,这个目录必须要存在否则不成功;
这样就讲打包档案中某一个需要的文件解压出来。
打包文件不包括某个目录:
root@ubuntu:/home# tar -jcv -f etc.tar.bz --exclude=kernel /etc 打包/etc目录不包括kernel目录。
按照文件时间打包:
按照文件mtime时间,之前的打包:
root@ubuntu:/tmp# tar -jcv -f newer.tar.bz2 --newer-mtime="150707" /home/zhenxiang/
(将目录下15年7月7号之后的文件打包压缩)
dd:建立一个大文档(也可以直接备份甚至是直接从扇区备份噢)
[root@www ~]# dd if=/dev/zero of=/home/loopdev bs=1M count=512 512+0 records in <==读入 512 笔资料 512+0 records out <==输出 512 笔数据 536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s # 这个指令的简单意思如下: # if 是 input file ,输入档案。 那个 /dev/zero 是会一直输出 0 的装置! # of 是 output file ,将一堆零写入到后面接的档案中。 # bs 是每个 block 大小,就像文件系统那样的 block 意义; # count 则是总共几个 bs 的意忠。
复制/etc/passwd -> /home/passwd
root@ubuntu:/# dd if=/etc/passwd of=/home/passwd
记录了3+1 的读入
记录了3+1 的写出
2000字节(2.0 kB)已复制,4.8703e-05 秒,41.1 MB/秒
你可以说, tar 可以用来备份关键数据,而 dd 则可以用来备份整颗 partition 或 整颗 disk ,不过,如果要将数据填回到 filesystem 当中, 可能需要考虑到原本的 filesystem 才能成功啊
dump:文件系统备份或单一目录备份
单一文件系统备份(如/home):dump有level0--9 9指定等级备份。首次备份level0 是完全备份。而使用level1等级备份,新备份的数据只会记录与第一次备份所有差异的档案;level2备份与level1所有差异的档案,以此类推。且可以使用-u 将备份时间记录到/etc/dumpdates中。
而单一目录备份:仅能使用level0,完全备份,且仅备份该单一目录下的文件。
简单使用:
[root@www ~]# dump [-Suvj] [-level] [-f 备份档] 待备份资料
[root@www ~]# dump -W
-S :仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕
-u :将这次 dump 的时间记录到 /etc/dumpdates 档案中;
-v :将 dump 的档案过程显示出来;
-j :加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为 2
-level:就是我们谈到的等级,从 -0 ~ -9 共十个等级;
-f :有点类似 tar 啦!后面接产生的档案,亦可接例如 /dev/st0 装置文件名等
-W :列出在 /etc/fstab 里面的具有 dump设定的partition 是否有备份过
restore:复原文件系统
[root@www ~]# restore -t [-f dumpfile] [-h] <==用来察看 dump 档 [root@www ~]# restore -C [-f dumpfile] [-D 挂载点] <==比较 dump 与实际档案 [root@www ~]# restore -i [-f dumpfile] <==进入互动模式 [root@www ~]# restore -r [-f dumpfile] <==还原整个文件系统
相关的各种模式,各种模式无法混用喔!例如不可以写 -tC 啦!
-t :此模式用在察看 dump 起来的备份文件中含有什么重要数据!类似 tar -t功能;
-C :此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较,最终会列出『在 dump 档案内有记录的,且目前文件系统不一样』得档案;
-i :进入互动模式,可以仅还原部分档案,用在 dump 目录时的还原!
-r :将整个 filesystem 还原的一种模式,用在还原针对文件系统的 dump 备份;
其他较常用到的选顷功能:
-h :察看完整备份数据中的inode 与文件系统 label 等信息
-f :后面就接你要处理的那个 dump 档案啰!
-D :不 -C 进行搭配,可以查出后面接的挂载点与 dump 内有不同得档案!
由亍 dump 是记录整个文件系统的,因此还原时你也应该要给予一个全新的文件系统才行。因此需要先建立一个全新的文件系统,然后再还原。新建文件系统,参照”鸟哥私房菜“ 第八章、 Linux 磁盘不文件系统管理
第十一章 认识与学习BASH
shell:简单来讲就是与kernel沟通的接口(能够操作应用程序的接口都能称为壳程序)
alias:别名
alias lm='ls -al'
注意:= 两边均没有空格哦
alias lm='ls -al'
是取临时别名用的,当退出当前shell,别名将不起作用;
永久别名:在~.bashrc 中加入 alias lm='ls -al'这样每次打开shell终端,均执行了临时别名命令;
bashrc 和 profile 的区别:https://wido.me/sunteya/understand-bashrc-and-profile/
/etc/profile /etc/bashrc(or/etc/bash.bashrc)
~/.bashrc |
shell 模式: login shell 和 no-login shell 登录和不登录
ineractive shell 和 non-interactive shell 交互和不交互
登录自动运行 /etc/profile ~/.profile
交互自动运行 /etc/bashrc ~/.bashrc
no-login shell : bash 或者 bash -c “CMD” 来启动的 shell
non-interactive shell : bash -c “CMD” 来执行的bash.
这两种模式均不自动执行上述文件
profile
其实看名字就能了解大概了, profile 是某个用户唯一的用来设置环境变量的地方, 因为用户可以有多个 shell 比如 bash, sh, zsh 之类的, 但像环境变量这种其实只需要在统一的一个地方初始化就可以了, 而这就是 profile.
bashrc
bashrc 也是看名字就知道, 是专门用来给 bash 做初始化的比如用来初始化 bash 的设置, bash 的代码补全, bash 的别名, bash 的颜色. 以此类推也就还会有 shrc, zshrc 这样的文件存在了, 只是 bash 太常用了而已.
bash 的 login shell 情况下所读取的整体环境配置文件其实只有 /etc/profile,但是/etc/profile 还会呼出其他的配置文件如:/etc/inputrc /etc/profile.d/.sh等
Bash shell 的内建命令: type
这个 type 也可以用来作为类似 which 找指令用的!
如:
zhenxiang@ubuntu:~$ type ls ls 是 `ls --color=auto' 的别名 zhenxiang@ubuntu:~$ type cd cd 是 shell 内嵌 zhenxiang@ubuntu:~$ type python python 是 /usr/bin/python
bash/shell终端 变量不需要定义 直接使用就好
如:
zhenxiang@ubuntu:~$ echo $myname <== 这里并没有任何数据~因为这个变量尚未被设定!是空的! zhenxiang@ubuntu:~$ myname=zhenxiang zhenxiang@ubuntu:~$ echo $myname zhenxiang
变量内容 可以用“ ”或者‘ ' 但两者有所不同:
双引号的特殊字符如 $ 等,可以保有原本的特性,如下所示:『 var="lang is $LANG"』则『 echo $var』可得『 lang is en_US』
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:『 var='lang is $LANG'』则『 echo $var』可得『 lang is $LANG』
可用跳脱字符『 』 将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『 `指令`』或『 $(指令)』 。特删注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要得核心版本的设定:『 version=$(uname -r)』再『 echo $version』可得『 2.6.18-128.el5』
如何在bash配置文件中设置环境变量;如在PATH中增加路径,在任意shell都能直接有效而不用重新增加PATH路径,然后再export;或者是增加一个myname变量,在任何新打开的shell均能找到这个变量;
可在
/etc/profile /etc/bashrc(or/etc/bash.bashrc)
~/.bashrc
~/.profile
|
任一文件中增加:export myname=zhenxiang
之后需要source /etc/profile 重新加载一下该文件否则需要下次才生效
环境变量查看 env
观察所有变量(环境变量与自定义变量) set
PS1环境变量
这是 PS1 (数字的 1 不是英文字母l),这个东西就是我们的『 命令提示字符』
如:zhenxiang@ubuntu:~$;可以改变显示方式噢;
[root@www ~ ]# cd /home [root@www home]# PS1='[u@h w A ##]$ ' [root@www /home 17:02 #85]# # 提示字符变了!其中,那个 #85 比较有趣,是下达指令条数;
具体PS1设置参数可以Google;
$本身也是一个环境变量,是本shell的PID
?也是一个环境变量,上一个执行指令的回传值,上一个指令执行正确回传值0,错误回传值非0
总结:
- 压缩技术原理
- 用bit替代byte最为最小单位,把那些byte中没有利用到的bits利用起来
- 重复数据统计
- 如果数据是[11111.....]共100个,那么压缩技术会记录100个1而不是真的有100个1的位存在。
- 常见压缩文档
- *.gz gzip程序压缩的档案
- *.tar tar程序打包的程序,并没有压缩过
- *.tar.gz tar程序打包的程序,并用gzip压缩过
- 因为gzip,每次只能对一个档案来压缩与解压缩,因此用tar将很多文档打包成一个文档就很有必要。
- tar
- 压缩: tar -zcvf filename.tar.gz
- 解压: tar -zxvf filename.tar.gz
- 查询: tar -ztvf filename.tar.gz
- 注意:z 是使用gzip来压缩/解压;j使用bzip。上面是使用gzip;
- 其余特性
- 部分解压
- 部分压缩 --exclude=A 除去A目录
- 按照mtime打包 --newer-mtime=“150707”目录下15年7月7号之后的文件打包;
- dd
- dd if=/etc/passwd of=/home/backup/passwd
- tar可以用来备份关键数据,dd则备份整个partition;
- dump
- dump有level0-9 10个指定等级备份。首次备份level0是完全备份。
- level1 则是在level0基础上的差异备份。以此类推。
- restore:根据dumpfile 恢复文件。
- shell 模式与使用的文件
- 配置文件
- /etc/profile ---设置环境变量
- /etc/bashrc ---设置bash特性
- ~/.bashrc
- ~/.profile
- 模式
- login shell 和 no-login shell 登录和不登录
- interactive shell 和 non-interactive shell 交互和不交互
- 模式与配置文件匹配
- login shell : /etc/profile ,~/.profile
- interactive shell:/etc/bashrc ,~/.bashrc
- no-login shell 和non-interactive shell ,均不使用上述文件。
- 配置文件
- 变量使用单双引号不同意义
- 单引号里面是纯文本意思
- 双引号里面可以再带变量