鸟哥的linux私房菜

第五章、在线求助 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  将数据解压缩到指定目录

仅解开单一档案的方法

打包某目录,但不包含该目录下的某些档案

仅备份比某个时刻还要新的档案

特殊应用:利用管线命令和数据流

完整备份工具:dump

原文地址:https://www.cnblogs.com/skorzeny/p/6551478.html