认识 bash 这个shell
command [-options] parameter1 parameter2 ...
# 指令 选项 参数(1) 参数(2)
# [--options] 使用选项的完整全名,例如 --help;
man
# 显示 command 的 manual pages,通常从 /usr/share/man 读取
man command
# 搜寻特定指令/文件的man page说明文件
man -f command # <==相当于 whatis command
# 按关键字搜索man page说明文件
man -k command # <==相当于 apropos command
环境变量 $PATH 默认是放置在/usr/share/info/
[tab] 按键:命令与文件补全功能
~/.bash_history 存放使用过的指令记录,按『上下键』可以找到前/后一个输入的指令。使用
history [-raw] histfiles
查看历史命令set
可以观察目前 bash 环境下的所有变量命令别名设定:
alias
,unalias
路径与指令搜寻顺序:1. 以相对/绝对路径执行指令;2. 由 alias 找到该指令来执行;3. 由 bash 内建的 (builtin) 指令来执行;4. 透过 $PATH 这个变量的顺序搜寻到的第一个指令来执行。
login shell 会读取两个配置文件:1. /etc/profile(系统设定),2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile(个人设定,其中一个),然后会通过这2个文件脚本载入其他文件配置。
source
(或小数点) 将配置文件的内容读进来目前的 shell 环境中(更改配置文件后不需要注销立即生效)数据流重导向:1. 标准输入 (stdin):代码为0,使用<或<<; 2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ; 3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> 。双向重导向
tee
会同时将数据流分送到文件去与屏幕
stdout > log.text 2> error.text # 将 stdout 与 stderr 分别存到不同的文件去
stdout > log.text 2>&1 # 将 stdout 与 stderr 都写入同一个文件
ls -l / | tee -a ~/homefile | more # 要注意! tee 后接的文件会被覆盖,若加上 -a (append) 这个选项则能将讯息累加
- 管线命令
|
仅会处理 standard output,在每个管线后面接的第一个数据必定是『指令』,而且这个指令必须要能够接受 standard input 的数据。常用管线处理命令grep
cut
sort
wc
uniq
split
xargs
文件的压缩打包
压缩原理:文件里面有相当多的『空间』存在,并不是完全填满的, 而『压 缩』的技术就是将这些『空间』填满,以让整个文件占用的容量下降。计算机最小的计量单位 bit(1 byte = 8 bits),如果只记录一个数字 1,1 会在最右边占据 1 个 bit,其他的 7 个 bits 将会自动的被填上 0,这7个bits应该算是『空的』,压缩就是通过一些复杂的计算将这些没有使用到的空间提出来,以让文件占用的空间变小。另外一种压缩技术是将重复的数据进行统计记录。
在 Linux 的环境中,常见的压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz』
-
*.Z
compress 程序压缩的文件; (已经退流行) -
*.zip
zip 程序压缩的文件; -
*.gz
gzip 程序压缩的文件;(应用度最广,可解压.Z .zip .gz) -
*.bz2
bzip2 程序压缩的文件; -
*.xz
xz 程序压缩的文件; -
*.tar
tar 程序打包的数据,并没有压缩过; -
*.tar.gz
tar 程序打包的文件,其中并且经过 gzip 的压缩 *.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩 *.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩
下面是系统常见压缩命令:
gzip [-cdtv#] 文件
# gzip 选项与参数:
# -c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
# -d :解压缩的参数;
# -t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
# -v :可以显示出原文件/压缩文件案的压缩比等信息;
# -# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6
# 如果压缩的源文件为文本文件,可以尝试使用 zcat/zmore/zless/zgrep 去读取
bzip2 [-cdkzv#] 文件
# -k :保留源文件,而不会删除原始的文件喔!
# -z :压缩的参数 (默认值,可以不加)
# 其他选项同 gzip 相同,可尝试使用 bzcat/bzmore/bzless/bzgrep 读取
xz [-dtlkc#] 文件
# -l :列出压缩文件的相关信息
# -k :保留原本的文件不删除~
# 其他选项同 gzip 相同,可尝试使用 xzcat/xzmore/xzless/xzgrep 读取
若说 gzip 是为了取代 compress,那么 bzip2 则是为了取代 gzip,后来还推出了 xz 这个压缩比更高的软件,3者用法都一模一样
tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... # 打包与压缩
tar [-z|-j|-J] [tv] [-f 既有的 tar 檔名] # 观看档名
tar [-z|-j|-J] [xv] [-f 既有的 tar 檔名] [-C 目录] # 解压缩
# 选项与参数:
# -c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
# -t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
# -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
# 特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
# -z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
# -j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
# -J :透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
# 特别留意, -z, -j, -J 不可以同时出现在一串指令列中
# -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 欲解压缩的目录