Linux操作系统(附二):基本知识与常用命令

  • Linux的一些基本知识
  • Linux的目录配置FHS
  • Linux的基本操作命令

 一、Linux的一些基本知识

1.1Linux的哲学思想

一切皆文件:Linux几乎把所有资源都抽象为文件形式,包括硬件设备、甚至通信接口等;抽象文件的优点在于访问一切设备和文件时都可以用open()打开、read()读取、write()写入、close()关闭、delete()删除、create()创建等通用接口方法实现。

//硬件设备对应的文件目录
物理终端:/dev/console
虚拟终端:/dev/tty#[1,6]
串行终端:/dev/ttys#
伪终端:/dev/pts/#

在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互,可以理解为一个用户进程的消息接口,设备就通过这个消息接口来与用户操作进行通信,比如终端设备显示器它是一个输出设备,当用户操作需要将某个文本或图片显示到屏幕上时,用户进程会调用这个接口程序,屏幕通过这个接口程序接收到数据然后显示在屏幕上,当然这中间还有传输设备和控制设备的参与,用户进程只需要调用这个接口程序,系统就会调用相关设备去执行具体的任务。

关于设备文件的详细内容会在后面的目录配置及文件系统相关博客中做详细解析。

由众多功能单一的程序组成:一个程序只做一件事,组合小程序完成复杂任务。

尽量避免跟用户交互:易于以编程的方式实现自动化任务。

使用文本文件保存配置信息

1.2文件是什么?众多文件如何有效的组织起来?

文件:存储空间存储的一段流式数据,对数据可以做到按名存区。

目录:路径映射,作为文件管理的最基础的结构,它本身也是一个文件,其内部的文件列表数据。

文件系统:基于目录的层级结构,原始起点是【/:】的倒置树状结构,最左侧的【/】表示根目录,其他的【/】表示路径层级之间的分隔符。(Linux的路径分隔符是斜杆/,windows的是反斜杠\)。

文件的路径表示:

绝对路径:从跟目录开始表示出的路径,即路径的得一个字符是【/】。
相对路径:从当前位置开始表示出的路径,当前路径可以用【./】和【../】来表示。
./起始的相对路径:表示从当前工作目录下,向文件路径层级的下方检索文件,比如./a/b表示从当前路径开始进入当前目录下的a目录,再从a目录下找到b文件。
../起始的相对路径:表示从当前目录下,向文件路径层级的上方检索文件,比如../../a/b表示从当前目录开始向当前目录所在的上一层目录中查找a目录,然后在在这个a目录中找b文件。也就是说在../后面每多一个../层级,就表示查找路径向当前目录的上一层移动一次再查找具体的文件或目录。

1.3路径中的基名(basename)和目录名(dirname)

在一个路径上除了起始字符来实现区分检索,还可以总体上被分为两个部分,即基名(basename)和目录名(dirname),每个路径字符串的最后一个文件名(目录也是文件)就是基名,基名前面的所有内容就是目录名。

同时basename和dirname也是获取路径中对应路径字段的命令:

//假设现在有一个路径字符串"/stc/sysconfig/network-scripts/ifcfg-eno132132"
//获取该路径的基名
basename /stc/sysconfig/network-scripts/ifcfg-eno132132 // ifcfg-eno132132
//获取该路径的目录名
dirname /stc/sysconfig/network-scripts/ifcfg-eno132132  // /stc/sysconfig/network-scripts

1.4用户的/home目录

每个用户登入是都会自动进入一个工作目录,这个工作目录就是在/home目录下有一个以当前用户名命名的目录,这个目录就是用户的home目录,也是用户管理自己的文件位置。

所以用户的home目录基名都是用户名称,目录名都是/houme。

1.5Linux命令基础知识的一些扩展介绍

为什么是扩展介绍呢?因为关于Linux命令的基础使用即语法解释在之前的博客Linux操作系统(二)中的2.1已经有介绍,这里知识针对对于Linux命令的一些相关基础内容做扩展介绍,如果要了解语法和使用可以到之前的那篇博客中查阅。

命令本身是一个可执行的程序文件:

 COMMAND OPTIONS ARGUMENTS

发起命令请求内核某个二进制程序运行为一个进程,这个过程就是由静态二进制文件转换成动态的执行具体任务的有生命周期的进程,有可能会调用共享库文件。

大部分情况下,系统程序文件都存放在:/bin,/sbin,/usr/sbin,/usr/local/bin,/usr/local/sbin。

普通命令存放的目录:/bin,/usr/bin,/usr/local/bin;

管理命令存放的目录:/sbin,/usr/sbin,/usr/local/sbin;

32位的共享库存放的目录:/lib,/usr/lib,/usr/local/lib;

64位的共享库存放的目录:/lib64,/usr/lib64,/usr/local/lib64;

命令必须遵循特定格式规范,包括exe(Windwos),msi(Mac),ELF(Linux);

但需要注意的是并非所有命令都有与之对应的可执行程序文件,比如cb这个命令就没有与之对应的可执行文件,由此又可以划分为两个类别:

Shell程序的自带命令,也被称为內置命令(builtin),它们的执行程序直接包含在Shell程序中,比如cb这个命令;
独立的可执行程序文件,文件名即命令名,也被称为外部命令,就是在bin,sbin,lib,lib64由对应可执行文件的命令。

shell程序是独特的程序,负责解析用户提供的命令,它的解析方式就是按照空白字符将输入的命令字符串解析为命令名、选项、参数,然后通过解析出来的命令名去环境变量中的PATH上的目录中从左至右逐个查找该命令,但查找到第一个对应的可执行程序文件时就停止查找并执行该命令的可执行程序文件。可以通过 echo $PATH 打印出PATH的命令目录:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tx/bin

当然还有前面提到的內置命令,它会被优先在Shell的內置命令列表中查找,如果没有查找到才会进入外部命令目录上查找,可以通过 type COMMAND 查看命令时内部命令还是外部命令,例如:

//內置命令
type cd
cd is a shell builtin
//外部命令
type ls
ls is aliased to `ls --color=auto'

这部分内容结合Linux操作系统(二)中的2.1的命令使用相关内容一起阅读。

 二、Linux的目录配置FHS

因为使用Linux来开发产品或发行版的社区、公司及个人非常多,如果每个人都有自己的想法来配置文件放置的目录,无法想象在两个Linux设备上目录配置方式完全不同会带来什么后果,在开发产品时为每个Linux设备定制一套文件检索配置?在管理多个Linux设备时需要学习和了解多个设备的文件配置方案?

所以,在这样的情况下FHS标准被提出(Filesystem Hierarchy Standard,译为:文件系统的层次结构标准),该标准的目的就是为了预测已安装文件和目录位置、预测安装文件和目录的位置。在标准中为文件系统每个区域指定指导原则,指定所需要的最少文件和目录,列举原则的例外情况,以及在过去中冲突的具体案例。

FHS标准有持续的改版,需要了解更详细的内容建议到官方文档中查阅,下面只一些必要了解的内容做一些汇总:

2.1关于FHS标准下的文件目录修改和使用的类型及相互作用

 可分享:可分享给其他系统挂载使用的目录;

不可分享:自己机器上运行的设备文件或程序有关的接口,仅与自身机器有关不适合分享给其他主机。

不变:有些数据不会经常变动,跟随发行版本而不变,例如函数库、文件说明、系统管理员所管理的主机服务配置文件等;

可变动:经常修改的数据,例如日志文件。

 2.2根目录与目录树

在Linux下所有文件与目录都由根目录开始,实所有文件和目录的源头,然后再一个一个分支形成类似树状结构。

根目录是整个系统最重要的目录,不仅实所有目录的源头,同时还与启动、还原、系统修复等操作有关。FHS建议越小越好,因为可以避免在这个目录下放置更多的数据导致的错误风险也就越大,数据越小性能也就越高,根目录的表示方式就是所有路径起始的第一个字符(/)斜杆。

2.3在根目录下FHS要求必须与建议存在的目录

必须:目录背景色为白色

建议:目录背景色为蓝色

目录

应该放置的文件内容

/bin

所有用户可用的执行文件(命令程序文件),这些命令在单人维护模式下还能使用。

/boot

引导加载器必须用到的各种文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用的文件名为:vmlinuz,如果使用grub2这个引导程序,则还会存在/boot/grub2/这个目录。

/dev

存储特殊文件或设备文件,这里所谓特殊文件就是通过程序模拟设备的文件。

/etc

特定于主机系统配置文件,例如用户的账号密码文件、各种服务的启动文件等。这个目录的文件普通用户可以查看,但只有root有权限修改。FHS建议在这个目录下不要放置可执行文件,一般各个应用的配置文件可能会在自己的目录建立一个etc目录用来存放配置文件,在这个目录下比较常见的应用配置文件有:

/etc/opt/(必要):第三方辅助软件/opt的相关配置文件;

/etc/x11/(建议):于X Window有关的各种配置文件,尤其是xorg.conf这个X Server的配置文件;

/etc/sgml/(建议):于SGML格式有关的各项配置文件;

/etc/xml/(建议):于XML格式有关的各项配置文件。

/home

普通用户的主目录(家目录),一般用来作为用户的工作目录,详细在1.4中有介绍。注意这个目录是FHS标准建议存在的目录。

/lib

基本共享库和内核模块,通常也被称为函数库。另外FHS还要求下面的目录必须存在:

/lib/modules/:这个目录主要放置可抽换式的内核相关模块(驱动程序)。

/lib<qual>(可选):备用格式基本共享库,比如支持64位函数库/lib64/

该目录下比较常见的文件有:libc.so.*:动态连接的C库、ld*:运行时连接器/加载器。

/lib64

/media

可移动媒体的挂载点,下面放置的是可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有:/media/floppy/media/cdrom等。

/mnt

临时挂载文件系统的挂载点,这个目录的用途在早期版本中于/media目录相同。安装程序不得使用此目录。

/opt

第三方辅助应用的安装目录。

/run

运行时的变量数据,在早期FHS标准规定系统启动后各项信息应该要放在/var/run目录下,在新版的FHS标准规范到/run目录下,由于/run可以使用内存来模拟,因此性能上会比较好。

/sbin

供系统管理使用的工具程序,也就是用来设置系统环境的命令,这些命令只有root才能使用,其他用户只能查询而已。

/srv

当前主机微服务提供的数据,比如www服务需要的网页数据在/srv/www/目录下。

/tmp

为那些会产生临时文件的程序提供用于存储临时文件的目录,可供任何用户进行读写操作。FHS建议在启动时删除这个目录下的数据。

/usr

全局共享的只读数据路径,这个目录经常被误认为是user的缩写,其实是UNIX Software Resource的缩写,也就是UNIX操作系统软件资源放置的目录。这个目录有点类似Windows系统C:\WindowsC:\Program Files\两个目录的合体,简单的说就是主要的软件都安装在这个目录下。

由于这个目录下的文件属于可分享但不可变动的FHS目录类型,所以这个目录下的文件可以通过网络分区挂载,所以这个目录下的文件可以分享给局域网内的其他主机使用。

后面会针对这个目录下的子目录做详细介绍。

/var

存储经常发生变化的的数据目录,主要用来存放缓存(cache)、日志(log file)、软件运行时所产生的文件,包括程序文件(lock filerun file)或数据库文件。

后面会针对这个目录下的子目录做详细介绍。

/root

系统管理员的家目录,用作于管理员的工作目录,之所以放在根目录下而不是/home目录下,是因为如果进入单人维护模式而仅挂载根目录,所以一般希望root的家目录与根目录放在同一个分区中。

2.4Linux中根目录下除了FHS标准的目录以外比较重要的目录

目录

应该放置的文件内容

/lost+found

这个目录是标准的ext2ext3ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是xfs文件系统就不会有这个目录

/proc

这个目录本身是一个虚拟文件系统,它存储的数据都是在内存当中,例如系统内核、进程信息(process)、外接设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占用任何硬盘空间。

/sys

这个目录与/proc非常类似,也是一个虚拟的文件系统,主要也是记录内核与系统硬件信息相关的数据,包可目前已经加载的内核模块与内核检测到的硬件设备信息等,这个目录通用不占用硬盘空间。

2.5FHS标准中的/usr目录必须与建议存在的子目录

关于/usr的目录解析参考2.4中的内容,在目录文件内容部分已经有详细的解析,这里只对/usr目录下的目录做解析。

目录

应该放置的文件内容

/usr/bin/

系统上可执行命令的主目录,所有一般用户都能使用这些命令。在CentOS7中已经将全部用户命令都放在该目录下,/bin目录下的所有命令都采用链接文件的方式放到该目录下。

/usr/lib/

基本共享库模块目录,同样/lib目录下所有库文件也都采用链接文件的方式放到该目录下。

/usr/lib<qual>/lib<qual>一样,作为备用共享模块库目录,/lib<qual>都采用链接文件的方式放到该目录下,比如/usr/lib64

/usr/lib64

/usr/local/

本地层次结构,系统管理员安装下载的软件建议安装到此目录,这样会便于管理。

/usr/sbin/

非必要的标准系统二进制文件,用于系统修复、恢复、安装或其他基本功能所需的系统管理程序,也就是用于系统管理的命令。

/usr/share/

独立于架构的数据,主要放置只读数据文件,当然也包括共享文件,在这个目录下放置的数据几乎不分硬件架构均可读取的数据,因为几乎都是文本文件,例如:

/usr/share/man:在线帮助文档

/usr/schare/doc:软件的说明文档

/usr/schare/zoneinfo:与时区有关的时区文件

/usr/games/

与游戏比较相关的数据存储目录

/usr/include/

由其他程序运行的二进制文件目录,包括由用户或shell脚本执行的二进制文件。C/C++等程序语言的头文件header与包含文件include存储目录

/usr/libexec/

某些不被一般用户常用的执行文件和脚本文件存储目录,比如X窗口下面的操作命令很多都放在这个目录下

/usr/src/

源代码存储目录

2.6FHS标准中/var目录下必须存在的子目录

目录

应该放置的文件内容

/var/cache/

应用程序的缓存数据

/var/lib/

程序执行过程中,需要使用到的数据文件存储目录,在此目录下的软件应该要有各自的目录,比如MySQL数据库放置到/var/lib/mysql,而rpm数据库则存放到/var/lib/rpm中。

/var/lock/

某些设备或文件只能被一个程序使用,如果同时有两个程序来使用该设备时就可能报错,因此就得要将该设备上锁,确保该设备只会被一个程序使用,比如使用刻盘机刻盘。

/var/log/

日志文件目录,这是一个非常重要的目录。

/var/mail/

存放个人邮件的目录,不过这个目录也被放置到/var/spool/mail/目录,这两个目录通常相互关联文件。

/var/run/

正在运行的程序进程相关数据存储的目录,比如pid

/var/spool/

这个目录通常存储一些队列数据,这些数据被使用后通常会被删除,比如系统收到新邮件时会存放到/var/spool/mail/中,当用户收下该邮件后该封邮件原则上就会被删除

 

 三、Linux的基本命令

3.1【tty】打印连接到标准输入的终端文件名,比如有键盘、鼠标等文件。

3.2【echo】输出一行文本,类似一些编程语言中的console.log()的作用,也可以用来创建一个文本文件。

3.3【startx】初识化X会话(用来初识化可视化终端的相关设置,也就是初识化屏幕相关配置信息)

3.3【ifconfig】配置网络接口,可以用来查看当前虚拟机和主机的IP地址(相关内容在Linux操作系统(二)中的3.2),关于这个命令的详细内容在后面的Linux网络相关博客中会介绍。

3.4【ip 】显示/操作路由、设备、策略路由和隧道,可以用来查看当前虚拟机和主机的IP地址(相关内容在Linux操作系统(二)中的3.2),关于这个命令同样在后面的Linux网络相关博客中做详细介绍。

3.5【ping】向主机发送ICPM(TCP/IP协议)请求报文,用于探测与主机连接的网络是否连通。

3.6关机操作的一系列命令:systemctl poweroff 、systemctl reboot、poweroff、halt、reboot,相关内容在Linux操作系统(二)中的2.7。

3.7【su】用于切换用户和用户组的shell命令,相关内容在Linux操作系统(二)中的2.7。

3.8【type】查看命令是內置命令还是外部命令。

3.9【cd】切换工作路径的命令,当使用cd不加任何选项和参数时会回到当前用户的home目录下

4.0【touch】创建一个文件,这个命令本来是用来修改文件时间戳的,但也可以用来创建一个文件

4.1 来自其他相关博客的命令列表26个命令,可能与前面有重复,【Linux操作系统(三):文件、目录】的1.0部分。

更多基本命令待补充...

 

posted @ 2022-06-02 11:52  他乡踏雪  阅读(264)  评论(0编辑  收藏  举报