第五章、在线求助 man page
X window与文本模式的切换
Ctrl+Alt+F1~F6:文字接口登入tty1~tty6终端机;
Ctrl+Alt+F7:图形接口桌面。
注销当前用户:exit
文本模式下指令的下达
开始下达指令
command [-options] parameter1 parameter2 ...
说明:
0. 一行指令中第一个输入的部分绝对是『指令(command)』或『可执行文件案』
1. command 为指令的名称,例如变换路径的指令为 cd 等等;
2. 中刮号[]并不存在于实际的指令中,而加入选项设定时,通常选项前会带 -号,例如 -h;有时候会使用选项的完整全名,则选项前带有 -- 符号,例如 --help;
3. parameter1 parameter2.. 为依附在选项后面的参数,或者是 command 的参数;
4. 指令, 选项, 参数等这几个咚咚中间以空格来区分,不论几个空格 shell 都规为一格;
5. 按下[Enter]按键后,该指令就立即执行。[Enter]按键代表着一行指令的开始启劢。
6. 指令太长的时候,可以使用反斜杠 (\) 来跳脱[Enter]符号,使指令连续到下一行。
注意!反斜杠后就立刻接特殊字符,才能跳脱!
语系的支持
a. 显示当前语系:echo $LANG
b. 修改语系为英文语系:$LANG=en_US
基础指令的操作
a. 显示日期与时间的指令:data
b. 显示日历:cal
c. 计算机:bc 离开bc:quit
总结,在指令模式下达指令的两种情况:
a. 该指令会直接显示结果后回到命令提示符等待下一个指令的输入;
b. 进入到该指令的环境,直到结束指令才回到命令提示符环境。
重要的几个热点[Tab],[Ctrl]+c,[Ctrl]+d
Tab:接在一串指令的第一个字后面,为命令补全;接在一串指令的第二个字后面,为档案补齐。
Ctrl+c:中断正在运行的指令。
Ctrl+d:键盘输入结束(End of file,EOF 或 End of input);也可取代exit的输入。
错误讯息察看
如果下达了错误的指令,可根据屏幕显示的讯息解决问题。
通常出现[command not found]可能原因:
a. 指令不存在,因为该软件没安装。解决方法安装该软件。
b. 指令所在的目录目前的用户并没有将它加入指令搜寻路径中,参考bash的PATH说明。
c. 打错字。
Linux系统的在线求助 man page 与 info page
man page (manul)
man page 的数据通常放在 .usr/share/man 这个目录。进入man指令后,[空格键]往下翻页,[q]离开man环境。
man page第一行,指令后面的数字代表的意义:
man page 内容
man page 常用按键:
info page
查询指令的用法或者档案的格式。info page将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。 所以,你可以将info page想成是文本模式的网页显示数据啦!
不过你要查询的目标数据的说明文件必须要以info的格式来写成才能够使用info的特殊功能(例如超链接)。 而这个支持info指令的文件默认是放置在/usr/share/info/这个目录当中的。
info page 常用按键:
其他有用的文件(documents): /usr/share/doc 目录下。
正确关机方法
开机过程的问题排解
第六章 Linux的档案权限与目录配置
使用者和群组: User Group Others
系统上的账号与一般身份使用者,还有root相关信息:记录在 /etc/passwd 档案中;
个人密码:纪录在 /etc/shadow 档案中;
linux所有组名:纪录在 /etc/group。
Linux档案权限
Linux文件属性
显示档案的文件名与相关属性:ls
列出所有的档案详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为『 . 』的档案):ls -al
第一栏:档案的类型和权限(permission)
a. 第一个字符代表这个档案是『目彔、档案或链接文件等等』:
a1. 当为[ d ]则是目彔
a2. 当为[ - ]则是档案
a3. 若是[ l ]则表示为连结档(link file)
a4. 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
a5. 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次怅读取装置)
b. 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
b1. 第一组为『档案拥有者的权限』
b2. 第二组为『同群组的权限』
b3. 第三组为『其他非本群组的权限』
第二栏:有多少档名连结到此节点(i-node):
每个档案都会将他的权限与属性记彔到文件系统的i-node中,不过,我们使用的目彔树却是使用文件名来记彔, 因此每个档名就会连结到一个i-node啰!这个属性记彔的,就是有多少不同的档名连结到相同的一个i-node号码去就是了
第三栏:档案(或目彔)的『拥有者账号』
第四栏:档案的所属群组
第五栏:档案的容量大小,默认单位为bytes
第六栏:档案的建档日期或者是最近的修改日期
第七栏:档案的档名(如果档名前多一个『 . 』,则代表这个档案为『隐藏档』)
如何改变文件属性与权限
改变所属群组,chgrp
被改变的组名必须在/etc/group档案内存在,否则报错。
语法: chgrp [-R] groupname dirname/filename
-R:进行递归(recursive)的持续变更,即连同次目录下的所有档案/目录都更新为这个群组。常用在要变更某一目录下所有档案。
eg: chgrp students a.txt
改变档案的拥有者,chown
注意:用户必须是已经存在系统中的账号,也就是在 /etc/passwd 档案中有记录的用户名。
chown 还能顺便修改群组的名称。
语法: chown [-R] 账号名 档案或目录
chown [-R] 账号名:组名 档案或目录
eg: chown user2 test.txt
chown root:root install.log
chown 也能单独修改组名: chown :root install.log 或者 chown .root install.log
when 什么时候需要使用chown 或 chgrp ?常见的是在复制档案给你之外的其他人时。
语法: cp 来源档案 目标文件
eg: cp .bashrc .bashrc_test
复制(cp)会复制执行者的属性和权限。
改变权限,chmod
a. 使用类型改变档案权限
linux档案的基本权限有9个,分别是 owner/group/others 三种身份各有得read/write/execute权限
语法: chmod [-R] xyz 档案或目录
eg: 修改 test.txt 的权限为 owner=rwx=4+2+1=7, group=rwx=4+2+1, others=---=0+0+0=0
chmod 770 test.txt
我们用 vim 编辑一个shell 的文字批处理文件后,它的权限通常为 -rw-rw-r-- 也就是664,如果将该档案变为可执行文件,并且不要让其他人修改此档案,则需要 -rwxr-xr-x 权限,此时需要下达: chmod 755 test.sh
如果有些档案不希望被其他人看见,那么权限应设为 -rwxr----- ,下达: chmod 740 filename
b. 符号类型改变档案权限
九个权限分别是(1)user (2)group (3)others三种身份,那我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那举读写的权限就可以写成r, w, x。
eg: 设定档案的权限为 -rwxr-xr-x : chmod u=rwx,go=rx test.txt
增加 test.txt 的每个人的写入权限: chmod a+w test.txt
去掉全部人的可执行权限: chmod a-x test.txt
目录与档案权限意义:
权限对档案的重要性
档案是实际包有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对二档案来说,他的意义是这样的:
r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等;
w (write):可以编辑、新增戒者是修改该档案的内容(但不含删除该档案);
x (eXecute):该档案具有可以被系统执行的权限。
权限对目录的重要性
目录主要的内容在记录文件名列表,文件名与目录有强烈的关连。所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
r(read contens in directory): 具有读取目录结构列表的权限。当你具有读取(r)一个目录的权限时,你可以查询该目录下文件名数据。所以可以用 ls 指令将目录的内容列表显示出来。
w(modify contents of directory): 表示你具有异动该目录结构列表的权限:
建立新的档案和目录;
删除已经存在的档案与目录(无论该档案的权限为何);
将已经存在的档案或目录进行更名;
搬移该目录内的档案或目录位置。
x(access directory): 用户能否进入该目录称为工作目录(用 cd 进入该目录)。
要开放目录给任何人浏览时,至少也要r和x权限,但w权限不能随便给。
linux档案种类与扩展名
档案种类
正规档案(regular file):第一个字符为 -
a.纯文本档(ASCII)
b.二进制文件(binary)
c. 数据格式文件(data)
目录(directory):第一个字符为 d
连接档(link):类似windows下的快捷方式。第一个属性为 l
设备与装置文件(device): 与系统周边存储等相关的一些档案,通常集中在 /dev 目录。通常又分为两种:
区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘不软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备。你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ];
字符(character)设备文件:亦即是一些串行端口的接口讴备, 例如键盘、鼠标等。这些设备的特色就是『一次性读取』的,不能够截断输出。举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑劢』到另一个地方啊!第一个属性为 [ c ]。
资料接口文件(sockets): 这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目彔中看到这种文件类型。
数据输送文件(FIFO, pipe): FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。
linux目录配置
linux目录配置的依据——FHS(Filesystem Hierarchy Standard):规范每个特定的目录下应该要放置什么样的数据。
亊实上,FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否 与 是否允讲使用者随意更劢, 而将目彔定义成为四种交互作用的形态,用表格来说有点像底下这样:
亊实上,FHS针对目彔树架构仅定义出三层目彔底下应该放置什么数据而已,分别是底下这三个目彔的定义:
a. / (root, 根目彔):与开机系统有关;
b. /usr (unix software resource):与软件安装/执行有关;
c. /var (variable):与系统运作过程有关。
根目录(/)的意义与内容
FHS标准建议:根目彔(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目彔放在同一个分割槽内,保持根目彔越小越好。 如此不但效能较佳,根目彔所在的文件系统也较不容易发生问题。
FHS定义出根目彔(/)底下应该要有底下这些次目彔的存在才好:
亊实上FHS针对根目彔所定义的标准就仅有上面的,不过我们的Linux底下还有讲多目彔你也需要了解一下的。 底下是几个在Linux当中也是非常重要的目彔:
根目彔下与开机过程有关的目彔, 就不能够与根目彔放到不同的分割槽去:
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置档案
/lib:执行档所需的函数库与核心所需的模块
/sbin:重要的系统执行文件
/usr 的意义不内容:
依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static), 如果你知道如何透过网络进行分割槽的挂载(例如在朋务器篇会谈到的NFS朋务器),那举/usr确实可以分享给局域网络内的其他主机来使用。
很多读者都会误会/usr为user的缩写,其实usr是Unix Software Resource的缩写, 也就是『Unix操作
系统软件资源』所放置的目彔,而不是用户的数据。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目彔下的次目彔,而不要自行建立该软件自己独立的目彔。
因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目彔有点类似Windows 系统的『C:\Windows\ + C:\Program files\』这两个目彔的综合体,系统刚安装完毕时,这个目彔会占用最多的硬盘容量。 一般来说,/usr的次目彔建议有底下这些:
/var 的意义与内容:
如果/usr是安装时会占用较大硬盘容量的目彔,那么/var就是在系统运作后才会渐渐占用硬盘容量的目彔。 因为/var目彔主要针对常态性变动的档案,包括快取(cache)、登彔档(log file)以及某些软件运作所产生的档案, 包括程序档案(lock file, run file),或者例如MySQL数据库的档案等等。常见的次目彔有:
针对FHS,各家distributions的异同
目录树(directory tree)
在Linux底下,所有的档案不目彔都是由根目彔开始的。那是所有目彔与档案的源头~ 然后再一个一个的分支下来,有点像是树枝状,因此,我们也称这种目彔配置方式为:『目彔树(directory tree)』 这个目彔树有什举特怅呢?他主要的特性有:
目彔树的启始点为根目彔 (/, root);
每一个目彔不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 朋务器挂载某特定目彔等。
每一个档案在此目彔树中的文件名(包含完整路径)都是独一无事的。
CentOS的观察
察看distribution 使用的是那个 Linux 标准 (Linux Standard Base)
语法: uname -r
第七章: Linux档案与目录管理
目录与路径
目录的相关操作:
特殊目录:
. 此层目录
.. 上一层目录
- 前一个工作目录
~ 目前用户身份所在的home目录
~account account这个用户的home目录(account是账号名)
cd(change directory) 变换目录
语法: cd 相对路径或绝对路径
eg: cd ~user1 代表/home/user1
cd ~ 代表回到用户的home目录
cd 代表回到用户的home目录
cd .. 代表回到上层目录
cd - 代表回到刚刚那个目录
pwd(Print Working Direcroty) 显示目前所在目录
语法: pwd [-P]
-P : 显示出确实的路径,而非使用链接(link)路经。
mkdir(make directory) 建立新目录
语法: mkdir [-mp] 目录名称
-m : 配置文件的权限。直接设定,不需要看预设(umask)的脸色
-p : 将所需目录递归建立
eg: mkdir -p test1/test2
mkdir -m 711 test1
rmdir(remove dierctory) 删除 空 目录
语法: rmdir [-p] 目录名称
-p : 连同上层 空的 目录也一起删除
关于执行文件路径的变量: $PATH
查询文件属性的指令 ls 完整的文件名为: /bin/ls 。为什么在任何目录输入 ls 就一定可以显示出一些信息,而不会是找不到该指令呢? 这是因为环境变量 PATH 所致。
当我们在执行指令时,比如 ls ,系统会依照 PATH 的设定去每个 PATH 定义的目录下搜寻文件名为 ls 的可执行文件,如果有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行。
下达 [echo $PATH] 察看PATH下定义的目录。
档案与目录管理:
档案与目录的检视: ls
复制 删除与移动: cp rm mv
cp(复制档案或目录)
不同身份者执行这个指令会有不同的结果产生,尤其是 -a, -p 选项,对于不同身份,差异非常大。
cp的功能很多。如果我们去复制别人的数据(必须有read权限)时,总是希望复制到的数据最后是我们自己的,所以,在预设的条件中,cp的来源与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。
由于具有这个特性,因此当我们进行备份时,某些需要特别注意的特殊权限档案,例如密码文件(/etc/shadow)以及一些配置文件,就不能直接以cp来复制,必须加上 -a 或者 -p 等可以完整复制档案权限的选项。如果想要复制档案给其他的使用者,必须注意档案的权限,否则,其他人无法针对你给的档案进行修订动作。
由于cp 的文件属性与权限的特性,所以,在复制时,必须清楚了解:
是否需要完整的保留来源档案的信息?
来源档案是否为联结档(symbolic link file)?
来源档是否为特殊档案,例如 FIFO, socket?
来源文件是否为目录?
rm 移出档案或目录
指令前加上反斜杠\,可以忽略掉 alias 的制定选项。
避免首字符为"-",加上本目录 [rm ./-test.txt] 即可。[rm -- -text.txt] 也可以。
mv 移动档案或目录,或更名
取得路径的文件名与目录名称
档案内容查询:
直接检视档案内容
直接查阅档案的内容可以使用 cat/tac/nl。
cat (concatenate 连续):
主要功能是将一个档案的内容连续打印在屏幕上。
tac 反向显示
cat 第一行到最后一行连续显示, tac 最后一行到第一行连续显示。
nl 添加行号打印
可翻页检视
前面提到的nl与cat,tac等,都是一次性将数据一口气显示到屏幕上面,那有没有可以进行一页一页翻动的指令呢?让我们可以一页一页的观察,才不会前面的数据看不到,有的那就是
more 与 less
more 一页一页翻动
语法: more 档案
在more这个程序运行过程中,有几个按键可以用:
空格键(space):向下翻一页;
Enter : 向下翻一行;
/字符串 : 在这个显示的内容中,向下搜寻【字符串】这个关键字;
:f : 立刻显示出文件名以及目前显示的行数;
q :立刻离开 more , 不再显示该档案的内容;
b 或 ctrl+b :往回翻页,不过这个动作只对档案有用,对管线无用。
less 一页一页翻动
less 的用法比 more 更有弹性。man 这个指令就是呼叫 less 来显示说明文件的内容。
less 常用按键:
空格键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字符串 :向下搜寻『字符串』的功能;
?字符串 :向上搜寻『字符串』的功能;
n :重复前一个搜寻 (不 / 戒 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q :离开 less 这个程序;
资料撷取
我们可以将输出的资料作一个最简单的撷取,那就是取出前面 (head)与取出后面(tail)文字的功能。不过,要注意的是, head 与 tail 都是以『行』为单位来进行数据撷取的。
head 取出前面几行
语法:head [-n number] 档案
-n :后面接数字,代表显示几行。如果没有此选项,默认显示10行。
tail 取出后面几行
eg:显示 /etc/man.config 的第11到第20行? head -n 20 /etc/man.config | tail -n 10
非纯文本文档:od
可以将data file或者binary file的内容数据读取出来。
修改档案时间或建立新档案:touch
每个档案在linux底下都会记录许多时间参数,有三个主要的变动时间:
modification time (mtime) : 当档案的内容数据变更时,会更新这个时间。内容数据指档案的内容,而不是档案的属性或权限。
status time (ctime) : 当该档案的状态(status)改变时,更新该时间。比如权限或属性的修改。
access time (atime) : 当该档案的内容被取用时,更新这个读取时间(access)。比如使用cat读取 /etc/man.config。
eg: ls -l /etc/man.config 默认显示的是mtime
ls -l --time=atime /etc/man.config
ls -l --time=ctime /etc/man.config
如果发现一个档案来至未来,如何修改让该档案的时间变成现在呢?
touch指令最常被使用的情况:
建立一个空档案;
将某个档案日期修订为目前(mtime 和 atime)
档案与目录的默认权限与隐藏权限
档案预设权限:umask
档案隐藏属性:
档案特殊权限:SUID, SGID, SBIT
查看文件类型:file
eg: file ~/.bashrc
指令与档案的搜寻:
脚本文件名的搜寻:
which 寻找【执行档】:指令根据PATH环境变量规范的路径,去搜寻【执行档】的档名
语法:which [-a] command
-a : 将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到到的指令名称
档案档名的搜索:
通常 find 不很常用。因为
速度慢之外, 也很操硬盘!通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,
才以 find 来搜寻! 为什么呢?因为 whereis 与 locate 是利用数据库来搜寻数据,所以相当的快
速,而且并没有实际的搜寻硬盘, 比较省时间。
whereis 寻找特定的档案
locate
find
第九章、档案与文件系统的压缩和打包
Linux系统常见的压缩指令:
常见压缩为键扩展名:
Linux上常见的压缩指令为 gzip 和 bzip2。这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案。此时,【打包软件,tar】就显得很重要。tar 可以将很多档案打包成一个档案。不过,单纯的 tar 功能仅是打包,并没有提供压缩功能,后来,GNU计划中,将整个tar与压缩功能结合在一起,提供更方便更强大的压缩和打包功能。
compress
eg: compress -v /tmp/etc/man.config 在预设情况下,被compress压缩的源文件不见,压缩文件被建立
umcompress man.comfig.Z 解压后,压缩文件不见
如果想要保留源文件又要建立压缩文件,可以使用 -c 语法:
-c 选项,会将压缩过程的数据输出到屏幕上,而不是写成 *.Z 的压缩文件。所以可以通过数据流重导向的方法将数据输出为另一个档名。
eg: compress -c man.config > man.config.back.Z
gzip, zcat
gzip可以解开 compress, zip, gzip 等软件压缩的档案。gzip建立的压缩文件为 *.gz 档名。
zcat可以读取纯文本文档被压缩后的压缩文件。
bzip2, bzcat
打包指令:tar
tar
其实最简单的使用 tar 就只要记忆底下的方式即可:
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
那个 filename.tar.bz2 是我们自己取的档名,tar 并不会主劢产生建立的档名。我们要自定义,
所以扩展名就显的很重要了!如果不加 [-j|-z] 的话,档名最好取为 *.tar 即可。如果是 -j 选顷,代表有
bzip2 的支持,因此档名最好就取为 *.tar.bz2 ,因为 bzip2 会产生 .bz2 癿扩展名。如果是
加上了 -z 的 gzip 的支持,那档名最好取为 *.tar.gz。
另外,由于『 -f filename 』是紧接在一起癿,过去很多文章常会写成『-jcvf filename』,这样是对
的, 但由与选顷的顺序理论上是可以变换的,所以很多读者会认为『-jvfc filename』也可以~事实
上这样会导致产生的档名变成 c ! 因为 -fc ,所以,建议您在学习 tar 时,将『 -f filename 』与
其他选顷独立出来,会比较不容易发生问题。
eg: tar -jpcv -f /root/etc.tar.gz /etc 使用tar加入 -j 或 -z 参数备份 /etc/ 目录
tar -jtv -f /root/etc.tar.bz2 查看tar档案的数据内容(可查看文件名),,与备份文件名有否根目录
tar -jxv -f /root/etc.tar.bz2 将备份的数据解压缩
tar -jxv -f /root/etc.tar.bz2 -C /tmp 将数据解压缩到指定目录
仅解开单一档案的方法
打包某目录,但不包含该目录下的某些档案
仅备份比某个时刻还要新的档案
特殊应用:利用管线命令和数据流