第五章 首次登入与在线求助 man page
开始下达指令:
1. 在指令下达之前,要记住几个重要概念
1. command [-options] parameter1 parapeter2...
2. 说明:
1. 一行指令中第一个输入的部分绝对是[指令(command)]或可执行文件案
2. command为指令的名称,例如变换路径的指令为cd等;
3. 中括号并不存在于实际的指令中,而加入选项设定时,通常选项前会带-号,例如 -h;有时候会使用选项的完整全名,则选项前带有--符号,例如 --help
4. parameter1,parameter2...为依附在选项后面的参数,或者是command的参数
5. 指令,选项,参数这几个中间以空格来区分,不论空几格shell都视为一个空格
6. 按下[Enter]按键后,该指令就立即执行。[Enter]按键代表着一行指令的开始启动。
7. 指令太长的时候,可以使用反斜杠(\)来跳脱[Enter]符号,使指令连续到下一行。注意!反斜杠后就立刻接特殊字符,才能跳脱!
8. 其他:
1. 在Linux系统中,英文大小写字母是不一样的。举例来说,cd与CD并不同
语系的支持
1. 显示目前所支持的语系:echo $LANG
1. 输出:en_US.UTF-8 //即支持英文及万国码
2. 修改语系成英文语系
1. 语句:LANG=en_US
2. 注意:上面的指令中没有空格符,且英文语系为en_US才对。且本次修改只在这次的登入有效。
基础指令的操作
1. 显示日期与时间的指令:data
1. 如果想要知道目前Linux系统的时间,那么就直接在指令列模式输入date即可显示
1. 指令:data
2. 输出:Wed Jul 22 14:38:51 UTC 2020
1. UTC代表时区
2. 格式化输出date
1. 指令1: date +%Y/%m/%d
2. 输出:2020/07/22
3. 注意:+与后面的格式化语句之间没有空格
4. 指令2: date +%H:%M
5. 输出: 15:05
6. 从前面这两个指令可以看出选项前除了带-符号还可以带+符号。
2. 显示日历的指令:cal
1. 如果我想要列出目前这个月的月历,直接下达cal即可
2. 还可以显示整年的情况:
1. 指令:cal 2020
3. cal语法为: cal [month][year]
1. 我想知道2020年8月的月历,可以直接下达为:
1. cal 8 2020
4. 某些指令有特殊的参数存在,若输入错误的参数,则该指令会有错误讯息的提示。
3. 简单好用的计算器:bc
1. 输入bc指令,即会进入到bc这个软件的工作环境当中
2. 基本的运算符:
1. +加法
2. -减法
3. *乘法
4. /除法
5. ^指数
6. %余数
3. bc预设仅输出整数,如果要输出小数点下位数,那么就必须要执行**scale=number,那个number就是小数点位数**
4. 我们大概可以知道在指令模式里面下达指令时,会有两种主要模式:
1. 一种是**该指令会直接显示结果然后回到命令提示字符等待下一个指令的输入。**
2. 一种是**进入到该指令的环境,直到结束该指令才回到命令提示字符的环境**。
3. 命令提示字符:如果光标在[root@10 /]#这种提示字符后面,那就是命令提示字符的环境。
重要的几个热键[Tab],[ctrl]-c,[ctrl]-d
1. [Tab]按键
1. [Tab]具有[命令补全]与[档案补齐]的功能
1. [Tab]接在一串指令的第一个字(command)的后面,则为命令补全.
2. [Tab]接在一串指令的第二个字后面时,则为档案补齐。
2. [ctrl]-c
1. 这个组合键是可以将正在运行中的指令终端中断,**如果你正在运行比较重要的指令,可别着急使用这个组合按键**
3. [ctrl]-d
1. 这个组合键通常代表着:[键盘输入结束(End Of File,EOF或End Of Input)]的意思;另外,它也可以用来取代exit的输入,如果你要直接离开文字接口,可以直接按下[Ctrl]-d就能够直接离开了(相当于输入exit)。
错误信息的察看
1. 常见的错误
1. [command not found]:命令找不到
1. 出现这个错误的可能原因
1. 这个命令不存在,因为该软件没有安装之故,解决方法就是安装该软件;
2. 这个命令所在的目录目前的用户并没有将它加入指令搜索路径中,**请参考bash的PATH说明;**
3. 打错字;
Linux系统的在线求助man page与info page
1. man(manual操作说明) page
1. 进入man指令的功能后,你可以按下[空格键]往下翻页,可以按下[q]键来离开man的环境
2. 以man date 指令为例:
1. 在第一个表格的第一行,可以看到[DATE(1)],DATE是这个指令的名称,(1)代表[一般用户可以使用的命令]。常见的几个数字的意义是这样的:
1. 1 用户在shell环境中可以操作的命令或可执行文件
2. 2 系统核心可呼叫的函数与工具等
3. 3 一些常用的函数(function)与函式库(library),大部分为C的函式库(libc)
4. 4 配置档案的说明,通常在/dev下的档案
5. 5 配置文件或者是某些档案的格式
6. 6 游戏(games)
7. 7 惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明
8. 8 系统管理员可用的管理指令
9. 9 跟kernel有关的文件
10. 上述的内容可以使用[man 7 man]来更详细的取得说明。未来你如果使用man page在察看某些数据时,就会知道该指令/档案所代表的基本含义是什么了。
11. 上述的**1、5、8**这三个号码特别重要,一定要将这三个数字代表的意义背下来。
2. 基本上man page大致分为下面这几部分:
1. NAME 简短的指令、数据名称说明
2. SYNOPSIS 简短的指令下达语法(syntas)简介
3. DESCRIPTION 较为完整的说明,这部分最好仔细看看
4. OPTIONS 针对SYNOPSIS部分中,有列举的所有可用的选项说明
5. COMMANDS 当这个程序(软件)在执行的时候,可以在此程序(软件)中下达的指令
6. FILES 当这个程序或数据所使用或参考或连接到的某些档案
7. SEE ALSO 可以参考的,跟这个指令或数据有相关的其它说明
8. EXAMPLE 一些可以参考的范例
9. BUGS 是否有相关的臭虫
10. 有时候除了这些外,还可能会看到Authors与Copyright等,不过也有很多时候仅有NAME与DESCRIPTION等部分,通常在查询某个数据时是这样来查阅的:
1. 先察看NAME的项目,约略看一下这个资料的意思
2. 再详看一下DESCRIPTION,这个部分会提到很多相关的资料与使用时机,从这个地方可以学到很多小细节
3. 而如果对这个指令其实很熟悉了,那么主要查询关于OPTIONS部分了,可以知道每个选项的意义,这样就可以下达比较细部的指令内容
4. 最后,会再看一下,跟这个资料有关的还有那些东西可以使用?举例来说,上面的SEE ALSO就告知我们还可以使用[info coreutils date]来进一步查阅数据
3. 如果你知道某些关键词的话,那么可以在任何时候输入[/word],来主动搜索关键词。man page常用的按键:
1. 空格键 向下翻一页
2. [Page Down] 向下翻一页
3. [Page Up] 向上翻一页
4. [Home] 去到第一页
5. [End] 去到最后一页
6. /string 向[下]搜寻string这个字符串,如果要搜寻vbird的话,就输入/vbird
7. ?string 向[上]搜寻string这个字符串
8. n,N 利用/或?来搜寻字符串时,可以用n来继续下一个搜寻(不论是/或?)可以利用N来进行[反向]搜寻。举例说明,我以/vbird搜寻vbird字符串,那么可以n继续往下查询,用N往上查询。若以?vbird向上查询vbird字符串,那我可以用n继续[向上]查询,用N反向查询。
9. q 结束这次的man page 4. 搜寻特定指令/档案man page说明文件
1. 在某些情况下,你可能知道使用某些特定的指令或者是修改某些特定的配置文件,但是偏偏忘记了该指令的完整。有时候则是你只记得该指令的部分关键词,下面以man -f为例。
1. 你可否查出来,系统中还有那些跟[man]这个指令有关的说明文件呢?你可以使用使用man -f man来查询一下
2. 从[man -f man]输出结果中,我们知道输出得数据是:
```
man (1) - an interface to the on-line reference manuals
man (7) - macros to format man pages
man (1p) - display system documentation
```
1. 左边部分:指令(或档案)以及该指令所代表得意义(就是那个数字)
2. 右边部分:这个指令得简易说明
3. 当使用[man -f]指令时,man只会找数据中得左边那个指令(或档案)得完整名称,有一点不同都不行!但如果我想要找得是[关键字]呢?也就是说,我想要同时找上面说的两个地方得内容,只要该内容由关键词存在,不需要完全相同得指令(或档案)就能够找到时,该怎么办呢?看下面这个示范:
1. 需求:找去系统得说明文件中,只要有man这个关键字就将该说明列出来
2. 使用[man -k]即可
1. 输入:man -k man
2. 输出:
```
. (1) - bash built-in commands, see bash(1)
: (1) - bash built-in commands, see bash(1)
[ (1) - bash built-in commands, see bash(1)
```
3. 上面得输出我没有复制全部得内容,但也可以看出有意思的地方,这个查询结果相当于'%man%'。
4. 还有两个指令与man page有关,这两个指令是man的简略说法
1. whatis [指令或者是数据] 相当于man -f [指令或者是数据]
2. apropos [指令或者是数据] 相当于man -k [指令或者是数据]
3. **而要注意的是,这两个特殊指令要能使用必须要建立whatis数据库才行!这个数据库的建立需要以root的身份下达如下的指令:**
1. makewhatis
2. info page
1. 在所有的Unix Like系统当中,都可以利用man来查询指令或者是相关档案的用法;但是,在Linux里面则又额外提供了一种在线求助的方法,那就是info page。
2. 基本上,info与man的用途其实差不多,都是用来查询指令的用法或者是档案的格式。但是与man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写,并且在各个页面中还有类似网页的[超链接]来跳到不同的页面中,每个独立的页面也被称为一个节点(node)。所以,你可以将info page想成是文本模式的网页显示数据了。
3. 不过你要查询的目标数据的说明文件必须要以info的格式来写成才能使用info的特殊功能(如超链接)。而支持info指令的文件默认的放置在/usr/share/info/这个目录中。例如,info这个指令的说明文件有写成info格式,所以,你使用[info info]。
```
File: info.info, Node: Top, Next: Getting Started, Up: (dir)
Info: An Introduction
*********************
To read about advanced Info commands, type 'n' twice. This brings
you to 'Advanced Info Commands', skipping over the 'Getting Started'chapter.
This file describes how to use Info, the on-line, menu-driven GNU documentation system.
Copyright (C) 1989, 1992, 1996-2012 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
--zz-Info: (info.info.gz)Top, 52 lines --Top----------------------------------------------------------------------------Welcome to Info version 5.1. Type h for help, m for menu item.
```
1. 仔细的看到上面这个的显示结果,里面的第一行显示了很多信息
1. File:代表这个info page的资料来自info.info档案所提供的;
2. Node:代表目前的这个页面是属于Top节点。意思是info.info内含有很多信息,而Top仅是info.info档案内的一个节点内容而已
3. Next:下一个节点名称为Getting Started,你也可以按[N]到下个节点去;
4. Up:回到上一层的节点的总揽画面,你也可以按下[U]回到上一层;
5. Prev:前一个节点。由于Top是info.info的第一个节点,所以没有前一个节点的信息。
2. 从第一行你可以知道这个节点的内容,来源与相关链接的信息。更有用的信息,你可以直接按下N,P,U来去到下一个,上一个与上一层节点(node)!
3. 再来,你也会看到[Menu],底下共分为四小节,分别是Getting Started等等的,我们可以使用上下左右来将光标移动到该文字或[*]上面,按下[Enter],就可以前往改小节了!另外也可以按下[Tab]按键,就可以快速的将光标在上表的画面中的node间移动,真的是非常的方便好用。
4. info的说明文件将内容分成多个node,并且每个node都有定位与连接。在各连结之间还可以具有类似[超链接]的快速按钮,可以透过[tab]键在各个超链接间移动。也可以使用U,P,N来在各个阶层与相关链接中显示!
1. info page中快捷键列表
1. 空格键 向下翻一页
2. [Page Down] 向下翻一页
3. [Page Up] 向上翻一页
4. [tab] 在node之间移动,有node的地方,通常会以*显示。
5. [Enter] 当光标在node上面时,按下Enter进入该node。
6. b 移动光标到该info画面中的第一个node处
7. e 移动光标到该info画面中的最后一个node。
8. n 前往下一个node处。
9. P 前往上一个node处。
10. u 向上移动一层。
11. s(/) 在info page中进行搜寻。
12. h 显示求助选单
13. ? 指令一览表
14. q 结束这次的info pag
3. 总结三个重要的目录,**务必记住**:
1. 在文字接口下,有任何不知道的指令或文件格式,但你想要了解他,请尽快使用info或者是info来查询
2. 如果你想要架设一些其它的服务,或想要利用一组软件来达成某项功能时,请赶快到/usr/share/doc底下查一查有没有该服务的说明文档。
3. 另外,记得随时查阅英文。
4. 超简单文书编辑器
1. 在Linux系统当中有非常多的文书编辑器存在,其中最重要的就是vi。不过其实还有很多不错的文书编辑器存在。在这里我们介绍一下nano这一支文书编辑器
1. nano的使用其实很简单,你可以直接加上档名就能够开启一个旧档或新档!
1. 先来说说重要的几个组合按键:
1. [ctrl]-G:取得联机帮助
2. [ctrl]-X:离开nano软件,若修改过档案会提示是否需要存储
3. [ctrl]-O:存储档案,若你有权限的话就能够存储档案了。
4. [ctrl]-R:从其它档案读入资料,可以将某个档案的内容贴在本档案内。
5. [ctrl]-W:搜寻字符串,这个也是很有帮助的指令。
6. [ctrl]-c:说明目前光标所在处的行数与列数等信息。
7. [ctrl]-_:可以直接输入行号,让光标快速移动到改行。
8. [alt]-y:校正语法功能开启或关闭(单击开,再单击关)
9. [alt]-m:可以支持鼠标来移动光标的功能。
第六章 Linux的档案权限与目录配置
1. Linux最优秀的地方之一,就在于它多人多任务环境。而为了让各个使用者具有较保密的档案数据,因此档案的权限管理就变得很重要了。Linux一般将档案可存取的身份分为三个类别,分别是owner/group/others,且三种身份各有read/write/execute等权限。
1 使用者与群组
1. 对使用者、群组与非本群组外的其他人等概念的说明:
1. 使用者(档案拥有者)
1. 由于Linux是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生,为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这个档案拥有者的角色就显得相等的重要了。
2. 群组概念
1. 每个群组的组员之间能够互相修改对方的数据,但是其他组的组员则不能看到本组自己的档案内容。
3. 其他人的概念
1. 对于不同属于某个群组的使用者来说,其余的使用者都是其他人。
2. Linux用户身份与群组记录的档案
1. 在Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有root的相关信息,都是记录在/etc/passwd这个档案内。至于个人的密码则是记录在/etc/shadow这个档案下。此外,Linux所有的组名都记录在/etc/group内。
2 Linux档案权限概念
2.1 Linux文件属性
1. 用root身份进入系统,下达[ls -al],可得到一个可分为七个字段的输出:
1. 权限
2. 连接数
3. 拥有者
4. 档案所属群组
5. 档案容量
6. 档案最后被修改的时间
7. 档名
2. 下面介绍这七个字段分别的意思
1. 第一栏代表这个档案的类型与权限
1. 仔细看的话,可以发现这一栏共有10个字符
1. 第一个字符的意义如下:
1. 当为[d]则是目录
2. 当为[-]则是档案
3. 若是[|]则表示为连接档(link file)
4. 若是[b]则表示为配置文件里面的可供存储的接口设备(可随机存取装置)
5. 若是[c]则表示为装置文件里面的串行端口设备(一次性读取装置)
2. 接下来的字符中,以三个为一组,且均为[rwx]的三个参数的组合。其中[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,使用减号[-]作为占位符。
1. 第一组为档案拥有者的权限
2. 同群组的权限
3. 其他非本群组的权限
3. 目录与档案的权限意义并不相同,这是因为目录与档案所记录的数据内容不相同所致的。
2. 第二栏表示有多少档名联结到此节点
1. 每个档案都会将它的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个档名就会连结到一个i-node中。这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去了。
3. 第三栏表示这个档案或目录的拥有者账号
4. 第四栏表示这个档案所属的群组
5. 第五栏表示这个档案的容量大小,默认单位为bytes
6. 第六栏为这个档案的建档日期或者是最近的修改日期
7. 第七栏为这个档案的档名
2.2 如何改变文件属性与权限:chgrp,chown,chmod
1. 介绍几个常用于群组、拥有者、各种身份的权限之修改的命令
1. chgrp:改变档案所属群组
2. chown:改变档案的拥有者
3. chmod:改变档案的权限,SUID,SGID,SBIT等等的特性
2. 改变所属群组:chgrp
1. 改变一个档案的群组真是很简单的,直接用chgrp来改变即可。不过,**请记住:要被改变的组名必须要在/etc/group档案内存在才行,否则会显示错误**
3. 改变档案拥有者:chown
1. **要注意的是,用户必须是已经存在系统中的账号,也就是/etc/passwd这个档案中有记录的用户名称才能改变**
2. chown的用途还蛮多的,它还可以顺便直接修改群组的名称,此外要连**目录下的所有次目录或档案同时更改档案拥有者的话,直接加上-R选项即可。**
1. 语法规范:
1. chown [-R] 账号名称 档案或目录
2. chown [-R] 账号名称:组名 档案或目录
3. chown [-R] 账号名称.组名 档案或目录(合法却不符合规范,如果账号名称中带有"."会有歧义,故不提倡使用)
4. chown [-R] .组名 档案或目录(只修改了群组)
4. 改变权限,chmod
1. 档案权限的改变使用的是chmod这个指令,但是,权限的设定方法有两种,分别可以使用数字或者是符号来进行权限的变更。
1. 数字型改变档案权限
1. Linux档案的基本权限就有9个,分别是owner/group/others三种身份各有自己的read/write/execute权限。采用8421码编码所以每组的全权限为7
2. 例如:chmod [-R] 777 档案或目录
1. R:代表递归赋权限
2. 777代表ogo的权限为可读可写可执行。
2. 符号类型改变档案权限
1. 还有一个改变权限的方法,基本上就9个权限分别是user、group、others三种身份,我们可以用u,g,o来代表这三种身份,此外,a则代表all即所有的身份。
2. 语法格式:
1. chmod u\g\o\a +(加入)\-(除去)\=(设定) r\w\x 档案或目录
3. 实例:
1. chmod u=rwx,go=rx 目录或档案
1. 权限为 rwxr-xr-x
2. 在上面的基础上再次执行, chmod g+w
1. 权限为 rwxrwxr-x,减法亦同理
3. 在上面的基础上再次执行 chmod a-x
1. 权限为 rw-rw-r--
4. 在+与-的状态下,只要是没有指定到的项目(身份),该权限不会被改变
2.3 目录与档案之权限意义
1. 权限对档案的重要性
1. 档案是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等,它的意义是这样的:
1. r(read):可读取此一档案的实际内容,如读取文本文件的文字内容等
2. w(write):可以编辑、新增或者是修改改档案的内容(但不含删除改档案)
3. x(execute):改档案具有可以被系统执行的权限。
2. 那个可读代表读取档案内容是还好了解,那么可执行呢?这里你必须要小心,因为在windows下一个档案是否具有执行的能力是藉由[扩展名]来判断的,但是在Linux底下,我们的档案是否能被执行,则是藉由是否具有[x]这个权限来判断的,跟档名是没有绝对关系的。
3. 至于最后一个w权限,当你对一个档案具有w权限时,你可以具有写入/编辑/新增/修改档案的内容的权限,但并不具备删除改档案本身的权限。对于档案的rwx来说,只要都是针对[档案的内容]而言,与档案档名的存在与否没有关系,因为档案记录的是实际的数据。
2. 权限对目录的重要性
1. 档案是存放实际数据的所在,那么目录主要是存储什么呢?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连。所以如果是针对目录时,r,w,x对目录是什么意义呢?
1. r(read contents in directory)
1. 表示具有读取目录结构列表的权限,所以当你具有读取一个目录的权限时,表示你可以查询改目录下的文件名数据,所以你就可以利用[ls]这个指令将改目录的内容列表显示出来。
2. w(modify contents of directory)
1. 这个可写入权限对目录来说,是很了不起的,因为这表示你具有异动改目录结构列表的权限,也就是底下这些权限:
1. 建立新的档案和目录
2. 删除已经存在的档案与目录(不论该档案的权限为何)
3. 将已存在的档案或目录进行更名
4. 搬移该目录内的档案、目录位置。
3. x(access directory)
1. 目录的x代表用户是否进入该目录成为工作目录的用途,所谓的工作目录(work directory)就是你目前所在的目录。
2.4 Linux档案种类与扩展名
1. 档案种类:
1. 正规档案(regular file) [-]:按照档案的内容,大致可分为:
1. 纯文本文档(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本档是因为内容为我们人类可以直接读到的数据。
2. 二进制文件(binary):系统仅认识且可以执行二进制文件(binary file)
3. 数据格式文件(data):有些程序在运作的过程中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件(data file)。
2. 目录(directory) [d]
3. 连接档(link) [l] :就是类是windows系统底下的快捷方式。
4. 设备与装置文件(device):与系统周边及存储等相关的一些档案,通常都集中在/dev这个目录下,通常又分为两种:
1. 区块(block)设备档 [b]:就是一些存储数据,以提供系统随机存取的接口设备,目录:/dev/sda
2. 字符(charactar)设备文件 [c]:一些串行端口的接口设备。
5. 资料接口文件(sockets) [s]:这种类型的档案通常被用在网络上的数据承接,目录:/var/run
6. 数据输送文件(FIFO,pipe) [p]:FIFO也是一种特殊的文件,它主要的目的在解决多个程序同时存取一个档案所造成的错误问题。FIFO是first-in-first-out的缩写。
2. Linux档案扩展名
1. 基本上,Linux的档案是没有所谓的扩展名,一个档案能不能被执行,与他x属性有关,与文件名根本一点关系也没有,虽然如此,我们依然希望可以藉由扩展名来了解档案是什么。列举几种常用的扩展名:
1. *.sh:脚本或批处理文件(scripts),因为批处理文件为使用shell写成的,所以扩展名就编成.sh
2. *.Z,*.tar,*.tar.gz.,*.zip:经过打包的压缩文件
2. 基本上,Linux系统上的文件名只是让你了解该档案可能的用途而已
3. Linux档案长度限制
1. 在Linux下,使用预设的Ext2/Ext3文件系统时,针对档案的档名长度限制为:
1. 单一档案或目录的最大容许文件名为255个字符
2. 包括完整路径名称及目录(/)之完整档名为4096
4. Linux文件名的限制
1. 由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux下的文件名时,最好可以避免一些特殊字符。