文章目录
- 1 Linux命令行简介
- 1.1 Linux命令行的分类
- 1.1.1 根据系统中作用来分类
- 1.1.2 根据对象来分类
- 2 Linux命令行解释器
- 2.1 命令行解释器shell
- 2.1.1 核心程序
- 2.1.2 公用程序shell
- 2.1.3 用户的默认shell
- 2.1.4 shell如何工作
- 2.2 Shell发展历史
- 2.3 shell版本的差异
- 2.3.1 C shell
- 2.3.2 Bourne shell
- 2.3.3 Korn shell
- 2.3.4 bash
- 2.3.5 tcsh
- 3 Linux命令行的组成
- 3.1 命令提示符
- 3.2 命令的基本格式
- 3.2.1 选项格式
- 3.2.2 参数的作用
- 3.3 Linux命令的构成
- 3.3.1 重定向运用
- 3.3.2 管道运用
- 3.3.3 命令替换运用
- 4 Linux中卷、目录和文件的含义
- 4.1 卷
- 4.1.1 逻辑卷管理
- 4.1.2 卷的基本术语
- 4.2 文件系统
- 4.2.1 相关概念
- 4.2.2 文件结构
- 4.2.3 目录
- 4.2.4 文件权限及属性
- 5 Linux命令行帮助
- 5.1 帮助命令
- 5.1.1 `man`
- 5.1.2 `help`
- 5.1.3 `info`
- 5.1.4 `apropos`
- 5.1.5 `whatis`
- 5.2 命令行的历史记录和编辑
- 5.3 从官网获得帮助
介绍下什么叫Linux命令行,并陆续介绍下常用的Linux命令及Shell
1 Linux命令行简介
Linux是一个有命令行组成的操作系统,精髓在于命令行,无论图像界面发展到什么水平,这个原理是不变的。
Linux命令有许多强大的功能:从简单的磁盘操作,文件存取到进行复杂的多媒体图像和流媒体文件的制作。
1.1 Linux命令行的分类
从不同的角度对Linux命令的分类有:
1.1.1 根据系统中作用来分类
按照在系统中的作用可将Linux命令分为:
- 安装和登录命令
- 文件处理命令
- 系统管理相关命令
- 网络操作命令
- 系统安全相关命令
- 其他命令
1.1.2 根据对象来分类
根据对象的不同,可将Linux命令分为:
- 目录文件命令
- 帮助类命令
- 文件系统类命令
- 软件包管理
- 内核管理类命令
- 网络基础类命令
2 Linux命令行解释器
命令行解释器就是通常说的Shell。shell是一种具备特殊功能的程序,介于用户和UNIX/Linux操作系统之间的一个接口。
2.1 命令行解释器shell
2.1.1 核心程序
在系统启动的时候,核心程序被加载进入内存,并负责管理系统的工作,直到系统关闭为止。核心程序建立并控制着处理程序,管理内存,档案系统和通信等。而其他程序,包括shell程序都存放在磁盘中。核心程序将他们加载到内存并执行,并在终止后清理系统。
2.1.2 公用程序shell
shell是一个公用程序,它在登录时启动,由执行用户输入的命令来提供用户和核心程序产生交谈的功能。shell在用户成功登录进入系统后启动,并始终作为用户与系统内核的交互手段直到退出系统。
2.1.3 用户的默认shell
系统上的每位用户都有一个默认的shell。每个用户的默认shell在系统的/etc/passwd
文件里被指定。passwd文件里还包括其他信息,即每个用户ID号,以及一个口令加密后的副本和用户登录后立即执行的程序。
为了加强安全性,现在的系统一般都把加密的口令放在另一个文件/etc/shadow
中,而passwd中存放口令的部分以一个x字符代替。
2.1.4 shell如何工作
当用户登录(login)时,一个交谈式的shell跟着启动,并提示输入命令。在输入一个命令后,即可促使shell进行工作中:
- 语法分析命令列
- 处理万用字符(wildcards),转向(redirection),管线(pipes)与工作控制(job control)
- 查找并执行命令
2.2 Shell发展历史
第一个有重要意义的Unix shell是V7(AT&T的第7版)UNIX,在1979年底被提出,且以它的创造者Stephen Bourne来命名,即Bourne shell。
C shell是在加州大学柏克莱分校于20世纪70年代末发展而成,以2BSD UNIX的部分发行。C shell是以C程序作为基础,被用来当程序语言时,能共享类似的语法。
贝尔实验室的DavidKorn 在20世纪80年代中期编写了KornShell,于1986年发行并与1988年称为正式的部分SVR4 UNIX。Korn Shell实际上是Bourne Shell的超集,不仅能否在UNIX系统上执行,同时也能在OS/2,VMS和DOS上执行。
2.3 shell版本的差异
一般情况下,UNIX系统除了支持Bourne shell(/bin/sh
)外,还有 C shell(/bin/csh
),Korn shell(/bin/ksh
),Bourne again shell(/bin/bash
)和TenexC shell(tcsh
)等其他的shell。UNIX/Linux将shell独立于核心程序之外,就如同一般的应用程序,可以在不影响操作系统本身的情况下进行修改,更新版本或添加新的功能。
一般shell都存放在/bin
目录下,可以通过命令查看当前系统中所包含的shell的类型。
(base) pang@pang-HP:~$ sudo find /bin/*sh
/bin/avahi-publish
/bin/bash
/bin/bluefish
/bin/chsh
/bin/c_rehash
/bin/dash
/bin/gettext.sh
/bin/instmodsh
/bin/nvidia-bug-report.sh
/bin/nvidia-sleep.sh
/bin/pax11publish
/bin/ppmflash
/bin/rbash
/bin/rsh
/bin/sh
/bin/ssh
/bin/static-sh
/bin/tclsh
/bin/vmware-license-check.sh
/bin/vmware-license-enter.sh
/bin/xrefresh
/bin/zssh
(base) pang@pang-HP:~$
2.3.1 C shell
C shell是柏克莱大学(Berkeley)所开发的,并且加入了一些新特性,如命令行使用历史(history
),别名(alias
)、内建算术和工作控制(job control
)等功能。对于常在交互模式下执行shell用户而言,较喜爱使用C shell;但对于系统管理者而言,则偏好以Bourne shell来编写命令文件,因为Bourne shell命令文件比C shell命令文件来得简单及快速。
2.3.2 Bourne shell
Bourne shell是标准的UNIX shell,以前常被作为管理系统只用。大部分的系统管理命令文件,如rc start
,stop
与shutdown
都是Bourne shell的命令文件,且在单一用户模式(single user mode)下以root登录时被系统管理者使用。Bourne shell的提示符号的默认值是$$
。
在shell提示符下按照提示输入用户名和密码后,将进行Bourne shell模式。
2.3.3 Korn shell
Korn shell是Bourne shell的超集(superset),由DavidKorn开发,比C shell更为先进。Korn shell的特色是包括了可编辑的历程、别名、函数、正规表达万用字符(regular expression wildcard)、内建算术、工作控制(job control)、共处理(coprocessing)和特殊的除错功能。
由于Korn shell是Bourne shell的超集,Bourne shell几乎和Korn shell完全向上兼容(upward compatible),所以在Bourne shell下开发的程序仍能在Korn shell上执行。Korn shell提示符号的默认值也是$$
。
除了执行效率稍差外,Korn shell在许多方面都比Bourne shell强。如果将Korn shell与C shell相比,二者各有所长,从效率和使用难度上看,Korn shell优于C shell。
2.3.4 bash
bash对Bourne shell是向下兼容(backward compatible),并融入许多C shell和Korn shell的功能。这些功能其实C shell(包括tcsh)都有,只是过去Bourne shell都未支持。
以下为bash几个重要的改进:
- 工作控制(job control):bash支持了关于工作的信号与指令。
- 别名功能(aliases):alias命令是用来为一个命令建立另一个名称,其运作就像一个宏,展开成为所代表的命令。
- 命令历程(command history):bash shell加入了C shell所提供的命令历程功能,history工具程序记录了最近用户执行过的命令。命令由1开始编号,默认值为500。可以在命令列中输入history,将会显示最近执行过的命令清单。
2.3.5 tcsh
tcsh是近几年崛起的一个免费软件(Linux下的C shell其实就是使用tcsh执行),虽然不是UNIX的标准配备,但是可以从许多地方下载。tcsh提供了一个命令列(command line)编辑程序。
- 提供了命令列补全功能
- 提供了拼字更正功能,自动检测并更正在命令列拼错的命令或单字
- 提供了危险命令侦测并提醒的功能,可以避免执行rm*这种杀伤力极大的命令
- 提供了常用命令的快捷方式(shortcut)
如果想从默认的Bourne shell切换到tcsh模式,在shell提示符下输入命令exec tcsh
:
(base) pang@pang-HP:~$ echo $SHELL
/bin/bash
(base) pang@pang-HP:~$ exec tcsh
pang-HP:~>
pang-HP:~> echo $shell
/bin/tcsh
pang-HP:~>
3 Linux命令行的组成
Linux命令行的功能非常强大,当Linux系统管理员熟悉了各种命令的含义和使用技巧后,就可以根据一定的规则组合成复杂的命令字符串,以实现所需的功能。下面重点讲解下命令行的组成。
3.1 命令提示符
登录系统后,我们所看到的内容如下,这就是Linux的命令提示符。
pang@pang-HP:~$
[ ]
:这是提示符的分隔符号,没有特殊含义。pang
:显示的是当前的登录用户,笔者现在使用的是个人用户登录。@
:分隔符号,没有特殊含义。pang-HP
:当前系统的简写主机名(即/etc/hostname
文件配置的内容)。~
:代表用户当前所在的目录,此例中用户当前所在的目录是用户自己的主目录。$$
:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是#
;如果是普通用户,提示符就是$$
。
切换至root用户后,显示为:
pang@pang-HP:~$ sudo su - root
root@pang-HP:~#
3.2 命令的基本格式
Linux命令的基本格式:
命令名 [选项] [参数1] [参数2]...
# 英文表示
command option parameter (object)
- command 命令名- 表示要执行的操作
- option 选项 - 指出如何执行这个操作
- parameter 参数 - 指出要操作的对象。
- 命令格式中的
[]
代表可选项,也就是有些命令可以不写选项或参数,也能执行。 - 命令在正常执行后返回值为
0
,表示执行成功。如果命令执行过程中出错,没有完成全部工作,则返回其他值。
3.2.1 选项格式
根据选项风格的不同,目前基本形成了几种不同的命令行风格,如POSIX/UNIX风格、GNU风格、BSD风格、X toolkit风格。
- POSIX/UNIX风格
原始的Unix风格命令行选项,是以连字符-
开头的单个字符(注意是一个字符,而不是一个单词)。 如果选项后面不带参数,则被称之为模式选项。模式选项是可以组合在一起使用的。例如,如果-a
和-b
是模式选项,那么-ab
或-ba
就都正确,而且会启用这两个选项。如ls -al
、ls -la
、ls -a -l
的作用是一样的。
如果选项需要带参数,这些参数要紧接在这个选项后面,可以以空格分开,也可以不以空格分开。如ls -w50 /home
(注意:w和50之间没有空格)、ls -w 50 /home
(注意:w和50之间有空格)的作用是一样的。
最初的Unix风格是在缓慢的ASR-33电传打字机上演变而来的,这使得简洁成为一种美德。因此是单字母选项。按住shift键需要额外的精力,因此偏爱小写,并使用-
(而不是可能更合乎逻辑的+
)来启用选项。
- GNU风格
选项使用--
开头的单词。如ls --all
。
如果选项需要带参数,则使用空格或者=
将参数和选项分开。如ls --sort time
(注意sort和time之间的空格) 、ls --sort=time
。
这种风格的出现是因为仅仅26个字母(或者算上大小写52个)不够一些复杂的GNU程序使用。另外一点是相比于单字符的POSIX/UNIX风格,其更容易理解,因为出现的不再是缩写的字母。
--
开头的GNU风格的选项格式又被称为长选项,与之对应的,之前以-
开头的单字符的选项格式也被成为短选项。
- BSD风格
和POSIX/UNIX风格相比,其选项使用单个字符,且不带任何前缀。如ps a
(注意,只有单个a字符,没有-
符号)。如果是多个不带参数的选项,也可以组合在一起,如ps aux
。
如果选项需要带参数,也同POSIX/UNIX风格一样,选项参数紧跟在这个选项后面,可以使用空格分开,也可以不用空格。如ps U root
(注意:root和U之间有空格)、ps Uroot
(注意:root和U之间没有空格)的作用是一样的。
- X toolkit风格
但原始的X toolkit风格是由X toolkit进行解析,它首先过滤并处理某些选项(如-geometry和-display)然后再把过滤后的命令行传递给应用程序逻辑进行解析。
以-
开头的单词(注意是单词,而不是单个字符)。如java -version
,-
后面跟着的是一个单词。
如果选项需要带参数,则选项参数紧跟在这个选项后面,且使用空格分开。例如:xeyes -display joesws:0 -geometry 1000x1000+0+0
。
这种风格即不能和古典的POSIX/UNIX风格兼容,也不能和GNU风格兼容,所以不应该在新程序中使用,除非遵循老式的X约定看起来价值很高。
总之,这些风格之间只是"风格"不同,实际使用中并不限制使用,比如上述ps
命令,由于一些历史原因,就可以接收POSIX/UNIX风格、GNU风格、BSD风格的参数,互相并不冲突。
3.2.2 参数的作用
参数是命令的操作对象,进一步提供了命令运行的信息,或者是命令执行过程中所使用的文件名。
- 通常命令行的参数是一些文件名,告诉命令从哪里可以得到输入,以及输出到什么地方。
- 如果命令行中没有提供参数,命令将默认从标准输入设备(即键盘)接收数据,输出结果和错误信息默认显示在标准输出设备(即显示器)上。
3.3 Linux命令的构成
在初次接触Linux命令行的时候,可能不清除为何要按照某种方式来书写命令,这些涉及命令所要遵循的一个规则和技巧。
3.3.1 重定向运用
在Linux命令行模式中,命令所需的输入不是来自键盘,而是来自指定文件,这就是输入重定向;而输出重定向可以使命令的输出不显示在屏幕上,而是写入到指定文件中。
# 输入重定向
(base) pang@pang-HP:~$ wc checkDeviceInfo.sh
15 82 588 checkDeviceInfo.sh
# 输出重定向
(base) pang@pang-HP:~$ ls ~ >1.log
# 同时使用输入和输出重定向
(base) pang@pang-HP:~$ wc checkDeviceInfo.sh > 1.log
3.3.2 管道运用
在Linux系统下,可以利用管道符|
将两个命令隔开,管道符左边命令的输出将作为管道符右边命令的输入。连续使用管道符意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,由此类推。
(base) pang@pang-HP:~$ cat /etc/passwd | grep /bin/bash | wc -l
2
(base) pang@pang-HP:~$
3.3.3 命令替换运用
在Linux命令行模式下,当遇到一对“`”(上分隔符)时,将首先执行“`”中间包含的命令,然后将其输出结果作为参数代入命令行中,这就是命令替换。类似于输入/输出重定向,区别在于命令替换是将一个命令的输出作为另外一个命令的参数。
(base) pang@pang-HP:~$ touch `date +%Y%m%d%k%M%S`.txt
4 Linux中卷、目录和文件的含义
与Windows系统的磁盘、目录及文件的概念类似,Linux系统的基础是逻辑卷、目录和文件。要学习Linux系统,首先要熟悉逻辑卷、目录及文件的概念开始,然后在深入到命令行的操作中。
4.1 卷
在安装Linux为系统分区时,如何精确评估和分配各个硬盘分区的容量,这是系统管理员经常会碰到的问题。如果分配不准确,当遇到某个分区不够用时,管理员就可能需要先备份真个系统,再清除硬盘并重新对硬盘分区,然后在恢复数据到新的分区,这无意是工作量巨大的。
4.1.1 逻辑卷管理
Linux提供的逻辑卷管理(logical volume manager,LVM)功能,实现了文件系统跨越不同磁盘和分区操作,能够自如地调整文件系统的大小。
LVM是Linux环境下对磁盘分区进行管理的一种机制,建立在硬盘和分区之上的一个逻辑层,提高了磁盘分区管理的灵活性。通过LVM,系统管理员可以轻松的管理磁盘分区,而不必将磁盘中的文件移动到新的磁盘上以充分利用新的存储空间,只需直接扩展文件系统的跨越磁盘即可。
4.1.2 卷的基本术语
- 物理存储介质(the physical media):系统的存储设备硬盘,如果
/dev/hda1
,/dev/sda
等,是鵆系统最低层的存储单元。 - 物理卷(physical volume,PV):物理卷是LVM的基本存储逻辑块,在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
- 卷组(volume group,VG):LVM卷组类似于非LVM系统中的物理磁盘,建立在物理卷之上由物理卷组成。可以在卷组上创建一个或多个LVM分区(逻辑卷),其LVM卷组由一个或多个物理卷组成。一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
- 逻辑卷(logical volume,LV):LVM的逻辑卷类似于非LVM系统中的磁盘分区,建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。在逻辑卷之上可以建立文件系统,如/home和/usr等。
- 物理区域(physical extent,PE):每一个物理卷被划分为称为PE的基本单元,其具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB,其大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的PV加入到VG后,PE的大小自动更改为VG中定义的PE大小。
- 逻辑区域(logical extent,LE):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含65536个PE(Physical Extent),所以一个PE的大小就决定了逻辑卷的最大容量,4 MB(默认) 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小范围为8 KB 到 16GB,并且必须总是 2 的倍数。
- 卷组描述区域(volume group descriptor area,VGDA):VGDA中存放了逻辑卷和卷组相关的数据,包括PV描述符,VG描述符,LV描述符和PE描述符。系统启动LVM时激活VG,并将VGDA加载至内存,用来识别LV的实际物理存储位置。当系统进行I/O操作时,会根据VGDA建立的映射机制来访问实际的物理位置。
4.2 文件系统
在Linux系统中,文件的准确定义是不包含任何其他结构的字符流。也就是说,文件中字符与字符之间除了同属于一个文件之外,不存在任何其他的关系。
文件中字符关系是由使用文件的应用程序来建立和解释的。每一个文件都具有特定的属性。Linux系统的文件属性主要包括文件类型,权限和属性。
4.2.1 相关概念
Linux下的文件系统是层次结构的,由若干目录和子目录组成,最上层的目录称为根目录,用/
表示。
名称 | 定义 |
---|---|
文件系统 | 是磁盘上具有特定格式的一片区域,操作系统通过文件系统可以很方便地查询和访问其中所包含的磁盘块。 |
文件 | 是文件系统中存储数据的一个命令对象。一个文件可以是空文件(即没有包含用户数据),但是其任然为操作系统提供了其他信息。 |
目录 | 目录文件中包含许多文件的目录项,每个目录项包含相应文件的名称和索引结点号,在索引结点中存放该文件的控制管理信息。目录文件支持文件系统的层次结构,并且文件系统中的每个文件都登记在一个或多个目录中。 |
子目录 | 是被包含在另一个目录中的目录。包含子目录的目录称为父目录。除了根目录以外,所有额目录都是子目录,并且包含这些目录的父目录。 |
文件名 | 文件名是用来标识文件的字符串,并保存在一个文件目录项中 |
路径名 | 是通过斜线字符/结合在一起的一个或多个文件名的集合,其指定的是一个文件在分层树形结构(即文件系统)中的位置。 |
4.2.2 文件结构
文件是Linux操作系统处理信息的基本单位。所有软件都被组织成文件,系统把它们看成不同类型的文件进行管理。
- 文件的成分
无论是一个程序,一个文档、一个数据库,还是一个目录,都是一个文件,其结构包括:
(1)索引节点,又称i结点。在文件系统结构中,包含有关响应文件的信息的一个记录,这些信息又包括文件权限、文件属主、文件大小、存放位置和建立日期等。
(2)数据,即文件的实际内容,可以为空;也可以非常大,并且有自己的结构。
- 文件命名
Linux的文件名由ASCII字符的任意组合构成,最大限制255个字符。习惯上允许使用下划线(_
)和句点(.
)来区别文件的类型。但是文件名应避免使用空格、制表符或其他控制字符,以及对系统shell来说具有特殊含义的字符:;
,|
,<
,>
,"
,'
,$$
,!
,%
,&
等。
以.
开头的文件是隐藏文件,并且默认情况下不能使用ls
命令查看。
- 文件名的通配符
为了一次能构处理多个文件,shell提供了几个特别字符,称为文件通配符。主要的有:
(1)星号(*
):与0个或多个任意的字符相匹配。
(2)问号(?
):只与一个任意的字符匹配。
(3)方括号([]
):与问号相似,只与一个字符匹配。但是,方括号只与括号中列出的字符之一匹配。
- 文件类型
Linux下的文件可以分为5种不同的类型:普通文件,目录文件,链接文件,设备文件和管道文件。
(1)普通文件:这类文件不包含文件系统的结构信息。通常所接触到的文件,包括图像文件、数据文件、文档文件和声音文件都属于这种文件。这种类型的文件按其内部结构又分为文本文件和二进制文件。
(2)目录文件:目录文件是Linux存储文件名的唯一地方,包括文件名,子目录及其指针,要列出目录文件可使用命令ls
。目录文件还是用于存放文件及其相关信息的文件,是内核组织文件系统的基本结点。Linux系统中的目录文件和其他操作系统中目录的概念不同,即目录文件是Linux文件中的一种。
(3)链接文件:是一种特殊的文件,实际上是指向真实存在的文件的链接,类似于Windows中的快捷方式。根据链接文件类型的不同,又分为硬链接文件和符号链接文件。
(4)设备文件:Linux系统为外部设备提供一种标准接口,这种机制可以将外部设备视为一种特殊的文件。通常Linux系统将设备文件存放在目录dev下,使用设备的主设备号和次设备号来指定某外部设备。
(5)管道文件:是一种特殊的文件,主要用于不同进程间的信息传递。通过管道文件,可以进行进程间的数据或信息传递。
4.2.3 目录
Linux系统中,除根目录root以外,所有文件和目录都包含在相应的目录文件中。在目录中添加文件的时候,该目录随着文件的加入而变大,以便容纳新文件。删除文件时,并不会减小目录的大小,系统核心会对目录项添加特殊标记,以便再次添加文件时重新使用,而未被使用的项不能使用ls
命令列出。
Linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将所有文件的说明信息采用树形结构组织起来,即常说的目录。
Linux目录结构常见说明如下:
目录 | 目录含义描述 |
---|---|
/ | 根目录 |
/bin | 存放必要的命令 |
/boot | 存放内存及启动所需的文件等 |
/dev | 存放设备文件 |
/etc | 存放系统的配置文件 |
/home | 用户文件的主目录,该用户数据存放在其主目录中 |
/lib | 存放必要的运行库 |
/mnt | 存放临时的映射文件系统,常把软驱和光驱挂载在这里的floppy和cdrom子目录下 |
/proc | 存放存储进行和系统信息 |
/root | 超级用户的主目录 |
/sbin | 存放系统管理程序 |
/tmp | 存放临时文件的目录 |
/usr | 包含了一般不需要修改的应用程序,如命令程序文件、程序库、手册和其他文档 |
/var | 包含系统产生的经常变化的文件,如打印机、邮件和新闻等假脱机目录,日志文件、格式化后的手册页、以及一些应用程序的数据文件等。 |
usr目录中子目录说明:
目录文件 | 目录文件的含义 |
---|---|
/usr/X11R6 | 存放X-Window系统 |
/usr/bin | 存放增加的用户程序 |
/usr/dict | 存放数据字典 |
/usr/doc | 存放追加的文档 |
/usr/etc | 存放设置文件 |
/usr/games | 存放游戏和教学文件 |
/usr/include | 存放C开发工具的头文件 |
/usr/info | 存放GNU信息文件 |
/usr/lib | 存放库文件 |
/usr/local | 存放本地产生的增加的应用程序 |
/usr/man | 存放在线帮助文件 |
/usr/sbin | 存放增加的管理程序 |
/usr/share | 存放结构独立的数据 |
/usr/src | 存放程序的源代码 |
4.2.4 文件权限及属性
Linux系统针对不同用户访问同一文件的权限做了不同的规定。
- 文件权限
Linux下一个文件的操作人员有3类,第一类是root、第二类是添加的用户、第三类是其他人员。Linux下每一类操作人员对文件操作的权限有3种:读权限(用r表示)、写权限(用w表示)和执行权限(用x表示)。
Linux系统按文件所有者,文件所有者同组用户和其他用户规定不同的文件访问权限。每一个文件都有一个特定的所有者,即对文件具有所有权的用户。由于在Linux系统中,用户是按组分类的,一个用户属于一个或多个组,因此文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
Linux文件系统安全模型是通过给系统中的文件赋予两个属性来起作用,即拥有者(ownership)和访问权限(access rights)。
- 文件属性
Linux文件或目录的属性主要包含文件或目录的结点、种类、权限模式、链接数量、所归属的用户和用户组、以及最近访问或修改的时间等内容。
pang@pang-HP:~$ ls -lih /home/pang
总用量 700K
23600398 -rw------- 1 pang pang 244 12月 7 10:58 2022-12-07-02-58-13.000-VBoxSVC-228752.log
23597599 -rw------- 1 pang pang 357 12月 7 10:58 2022-12-07-02-58-13.055-VBoxHeadless-815423.log
23600430 -rw------- 1 pang pang 242 12月 7 16:55 2022-12-07-08-55-17.003-VBoxSVC-43641.log
23601583 -rw------- 1 pang pang 355 12月 7 16:55 2022-12-07-08-55-17.040-VBoxHeadless-43734.log
23599182 -rw------- 1 pang pang 242 12月 12 16:48 2022-12-12-08-48-54.033-VBoxSVC-26188.log
23601560 -rw------- 1 pang pang 355 12月 12 16:48 2022-12-12-08-48-54.070-VBoxHeadless-29584.log
23593064 drwxr-xr-x 2 pang pang 4.0K 10月 23 2021 公共的
23593063 drwxr-xr-x 2 pang pang 4.0K 10月 27 2021 模板
23593068 drwxr-xr-x 2 pang pang 4.0K 10月 23 2021 视频
23593067 drwxr-xr-x 3 pang pang 4.0K 12月 14 20:17 图片
23593065 drwxr-xr-x 16 pang pang 4.0K 12月 12 16:48 文档
23593062 drwxr-xr-x 8 pang pang 4.0K 12月 15 15:12 下载
23593066 drwxr-xr-x 2 pang pang 4.0K 10月 23 2021 音乐
23593060 drwxr-xr-x 3 pang pang 4.0K 12月 7 15:26 桌面
23604589 -rw-rw-r-- 1 pang pang 0 12月 15 16:09 aaa_b.txt
23627614 -rw-rw-r-- 1 pang pang 72 12月 15 16:09 aaa.txt
23605628 drwxrwxr-x 28 pang pang 4.0K 10月 23 2021 anaconda3
23608387 drwxrwxr-x 2 pang pang 4.0K 10月 1 20:19 bin
23620186 -rwxrwxr-x 1 pang pang 588 8月 9 17:26 checkDeviceInfo.sh
26085189 drwxrwxr-x 4 pang pang 4.0K 10月 27 2021 configclient
23598904 lrwxrwxrwx 1 pang pang 5 10月 23 2021 data -> /data
24000659 drwxrwxr-x 2 pang pang 4.0K 6月 29 14:52 dockerfile
24259509 drwx------ 17 pang pang 4.0K 3月 25 2022 FFmpeg-release-5.0
25828564 drwxrwxr-x 5 pang pang 4.0K 10月 25 10:55 fsdownload
23605633 drwxrwxr-x 2 pang pang 4.0K 12月 3 2021 git_resource
23598936 drwx------ 3 pang pang 4.0K 6月 7 2017 hadoop-cluster-docker
23864687 drwx------ 3 pang pang 4.0K 11月 10 15:47 hadoop-hive-master
23620440 -rw-rw-r-- 1 pang pang 176K 12月 15 19:45 java_error_in_IDEA_152133.log
23613231 -rw-rw-r-- 1 pang pang 191K 12月 12 16:48 java_error_in_IDEA_1737947.log
23600818 -rw-rw-r-- 1 pang pang 177K 12月 15 20:28 java_error_in_IDEA_32972.log
29754610 drwxrwxr-x 15 pang pang 4.0K 5月 13 2022 Jupyter
25040582 drwxrwxr-x 12 pang pang 4.0K 10月 10 10:57 logs
23619903 -rw-r--r-- 1 pang pang 376 12月 6 10:52 magic.mgc
23622002 -rw-rw-r-- 1 pang pang 0 12月 6 14:39 msg.log
25040586 drwxrwxr-x 4 pang pang 4.0K 10月 26 2021 nacos
23620737 drwxrwxr-x 3 pang pang 4.0K 10月 25 2021 node_modules
23600063 drwxrwxr-x 4 pang pang 4.0K 11月 25 2021 opt
23630054 lrwxrwxrwx 1 pang pang 36 12月 1 2021 "PlayOnLinux's virtual drives" -> /home/pang/.PlayOnLinux//wineprefix/
24258304 drwxrwxr-x 3 pang pang 4.0K 11月 19 2021 Postman
23593319 drwx------ 11 pang pang 4.0K 8月 24 08:14 snap
24646685 drwxrwxr-x 2 pang pang 4.0K 6月 27 13:34 sql_text
23861087 drwxrwxr-x 2 pang pang 4.0K 11月 3 2021 svn
24258382 drwxrwxr-x 3 pang pang 4.0K 11月 24 2021 temp
23612383 -rw-rw-r-- 1 pang pang 3.3K 12月 2 2021 TestService.java
23602134 drwxr-xr-x 2 root root 4.0K 6月 21 09:11 vdata
pang@pang-HP:~$
(1)第1字段:inode
(2)第2字段:文件种类和权限
(3)第3字段:硬链接数目
(4)第4字段:属主
(5)第5字段:所归属的组
(6)第6字段:文件或目录的大小
(7)第7字段和第8字段:最后访问或修改时间
(8)第9字段:文件名或目录名
5 Linux命令行帮助
要学习Linux操作系统的使用,阅读Linux的帮助文件是很有必要的。
5.1 帮助命令
5.1.1 man
Linux系统的man命令可以显示任何命令的联机帮助信息,提供有关主题的参考信息、子例程和文件。man命令提供的命令信息描述包含用户指定的关键字集合。
- 语法格式:
man [-acdDfhkKtwW][-m system][-p string][-c config_file][-m path][-p pager][-s section_list][section] name...
- 参数说明:
参数 | 说明 |
---|---|
-a | 内定在显示第一个找到的手册之后就会停止搜索,使用此参数会强迫man显示所有符合name部分所输入值的线上手册 |
-c | 即使有最新的线上页面,还是对线上手册重新进行排版,本参数在屏幕的行列数改变时或已排版的线上手册损坏时特别有意义 |
-d | 不会真实地显示线上手册,只显示排错信息 |
-D | 同时显示线上手册和排错信息 |
-f | 功能同whatis |
-h | 显示帮助信息,然后借书程式 |
-k | 功能同apropos 。根据keyword进行搜索 |
-K | 规定对所有的线上手册搜索指定的字串。注意,本功能回应速度可能很慢,如果指定section会对速度有所帮助 |
-t | 使用/usr/bin/groff-Tps-mandoc 来对线上手册排版,并将结果显示至stdout。/usr/bin/groff-Tps-mandoc 的输出结果可能还需要特定的过滤器(如bg5ps)才能列印。 |
-w | 不会显示线上手册。而是显示线上手册的位置。如果没有指定引数,则显示man 所搜索的目录列表。 |
-W | 即功能类-w,但每行只印出一个档名,不印出额外的信息。这在下面的状况特别有用:man -aW man |xargs ls -l |
-m system | 根据所指定的system名称而指定另一组的线上手册 |
-p string | 指定在nroff或troff之前所执行的处理程式是不是所有的安装都会有完整的前处理器。各个前处理器所代表的字母分为为eqn(e)、grap(g)、pic(p)、tbl(t)、vgrind(v)和refer(r)。本参数会覆盖环境变量MANROFFSEQ的设定。 |
-c config_file | 指定man的conf。内定值为/etc/man.conf |
-m path | 指定线上手册的搜寻路径,如果没有指定路径,则使用环境变量MANPATH来设定;如果没有使用MANPATH,则会使用/usr/lib/man.conf 内的设定;如果MANPATH是空字符串,则表示使用内定值。 |
-p pager | 指定使用页面的种类。man会优先使用此参数设定,先是根据环境变量MANPAGER设定,然后是环境变量PAGER。man内定使用/usr/bin/less-is 。 |
-s section_list | 指定所搜索的章节列表(以冒号分隔),此参数会覆盖环境变量MANSECT的设定 |
section | 指定要搜索的手册段,其参数格式参考下面的表格。 |
section参数格式:
section参数 | 说明 |
---|---|
C | 指定命令(包含系统管理命令) |
F | 指定文件类型手册页面 |
L | 指定库函数 |
n | 指定为新的 |
l | 指定为局部的 |
o | 指定为原来的 |
p | 指定为公用的 |
1 | 表示用户命令和守护进程 |
2 | 表示系统调用和内核服务 |
3 | 表示子例程 |
4 | 表示特殊文件、设备驱动程序和硬件 |
5 | 表示配置文件 |
6 | 表示游戏 |
7 | 表示杂项命令 |
8 | 表示管理命令和守护进程 |
- 示例
# 查看cp命令的有关信息和操作
man cp
# 显示/usr/share/man或/usr/share/man/local路径中所有与grep命令相关的文件
man -M /usr/share/man:/usr/share/man/local grep
- 补充说明
由于手册页man page是用less程序来查看的,所以在man page里可以使用less的所有参数。
Less功能键及说明:
功能键 | 说明 |
---|---|
Q: | 退出 |
Enter: | 一行行地下翻 |
Space: | 一页页地下翻 |
b: | 上翻一页 |
/: | 后跟一个字符串和Enter键来查找字符串 |
n: | 发现上一次查找的下一个匹配 |
- 安装man中文版
sudo apt install manpages-zh
查看man 手册安装到哪里
sudo dpkg -L manpages-zh | less
配置man手册中英文切换
# 打开配置文件
vi ~/.bashrc
# 在文件的末尾添加下面的内容,并保存退出
alias man='man -M /usr/share/man' #使用man查看英文man手册
alias cman='man -M /usr/share/man/zh_CN' #使用cman查看中文man手册
# 然后在命令行输入
source ~/.bashrc
5.1.2 help
该命令用户显示bash shell内置命令的简单信息。使用help
命令不带任何参数,即可显示bash shell所有内置的命令。
- 语法格式和具体参数
help [命令名]
- 示例
# 直接使用help显示所有命令,结合管道符与more一起使用
help | more
# 查看cp命令帮助
help cp
5.1.3 info
info
命令与man
命令相比,优点是其通常带有最近更新的系统资料。
- 语法格式
info [命令名]
- 示例
# 获取cp命令的信息
info cp
- 补充说明
info
命令常见的功能键如下:
功能键 | 说 |
---|---|
Tab | 该键可以用来在菜单之间移动 |
p | 跳转到前一个结点 |
u | 跳转到上一层结点 |
q | 退出 |
5.1.4 apropos
apropos
命令在Linux中用来通过关键字查找定位命令的手册节,其功能等同于使用带有-k
参数的man
命令。
- 语法
apropos [-m path] 关键字...
参数:
1. -m path
指定备用搜索路径。搜索路径有PathName参数指定,且是一个由冒号隔开的目录列表。
- 示例
# 查找标题中包含test的手册节
apropos test
5.1.5 whatis
whatis
即what is,此命令用来描述其他系统命令的作用,其资料库包含了所有系统指令的简单描述。wahtis
命令会在资料库中搜索符合的指令,并把结果显示出来。whatis
命令和apropos
使用相同的数据库,区别在于whatis
搜索的是关键字,而apropos
搜索的是关键字的描述。
- 语法
whatis 关键字...
- 具体示例
# 查看cp命令的作用
whatis cp
5.2 命令行的历史记录和编辑
在命令行的操作过程,经常会遇到需要查看历史使用命令的情况,有时候还需要执行历史记录中的某个命令,这就需要熟悉如何查看和编辑历史命令。
- 命令行的历史记录
用户最近在控制台下输入的命令,可以通过按<↑>
键向后查阅,按<↓>
键向前查阅。与<Shit>
j键配合使用,还可以查阅该控制台中以往的输出。用户甚至可以编辑旧的输入命令,然后再执行。
如果按<Enter>
键,上面的命令将再次执行,而如何按了<←>
、<→>
或<Esc>
键,将返回到命令提示符下。此时,用户可以对命令历史记录进行适当编辑。
按<Ctrl+R>
组合键,shell会进入"(reverse-i-search)`': "(向后增量搜索)模式,在该模式下,可以输入需要查找的命令首字母。
pang@pang-HP:~$
(reverse-i-search)`':
# 输入i
reverse-i-search)`i': file -
- 编辑命令行
通过光标键和功能键(Home
,End
等键)可以浏览并编辑命令行。此外,利用一些快捷键也可以完成一般的编辑操作。
快捷键 | 说明 |
---|---|
<Ctrl+K> | 删除,从光标到行尾 |
<Ctrl+U> | 删除,从光标到行首 |
<Alt+D> | 删除,从光标到当前单词结尾 |
<Ctrl+W> | 删除,从光标到当前单词开头 |
<Ctrl+A> | 将光标移到行首 |
<Ctrl+E> | 将光标移到行尾 |
<Alt+A> | 将光标移到当前单词头部 |
<Alt+E> | 将光标移到当前单词尾部 |
<Ctrl+Y> | 插入最近删除的单词 |
!$ | 重复前一个命令最后的参数 |
5.3 从官网获得帮助
- RedHat官网
- Fedora官网
- MandrakeLinux官网
- SuSE官网
- RPM包查询网站
- Kernel.org镜像网站-其中有好多发行版可以下载
- Debian官网
- Slackware官网
- slackware软件升级包
- Gentoo官网
- 内核官网