热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

Linux的一些基本知识Linux的目录配置FHSLinux的基本操作命令 一、Linux的一些基本知识1.1Linux的哲学思想一切皆文件: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(可选):备用格式基本共享库,比如支持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/lib一样,作为备用共享模块库目录,/lib都采用链接文件的方式放到该目录下,比如/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目录下

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

 

——生命自会找到蓬勃之路。



推荐阅读
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 最近学习反射机制的时候Properties.load(读取本地文件流的时候怎么也找不到加载文件后面发现IDEA的默认根目录是在它的Project工程下IDEA的文件目录和Ec ... [详细]
author-avatar
梦傲天001_137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有