热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2017-10-23Linux基础知识(8)FHS文件系统

我们回顾一下上一节所讲的知识,我们知道了如何获取帮助,在内部我们可使用helpCOMMAND,而外部命令我们使用man或--help及info,以及可以查看官方自带的文档(ReadM


  我们回顾一下上一节所讲的知识,我们知道了如何获取帮助,在内部我们可使用help COMMAND,而外部命令我们使用man或--help及info,以及可以查看官方自带的文档(ReadME, CHANGELOG, INSTALL),还有就是发行版的文档以及上网搜索(推荐使用谷歌),那么我们如果想查看那个命令在手册中属于那个章节,使用whatis命令就可以。
  在最后我们总结一下基础命令:之后我们这一章开始讲述Linux的文件系统。以及介绍bash特性。

   pwd, cd, ls, echo, date, clock, cal, hwclock, cat, tac, file, type, tty, halt, poweroff, shutdown, reboot

一、Linux文件系统

  我们都知道,程序源码写完之后都要进行编译成二进制程序才能运行,如果不依赖于库文件的话,从系统调用接口直接写程序的话,我们称之为静态编译,也就是说,程序里的库文件是自带的,不过该程序是会很大的,因为它把库文件都编译进去了,好处是不用依赖系统上的库文件,可直接运行。而动态编译是要依赖于调用系统上的库文件进行编译和运行,好处是占用体积较小。那么Linux的库编译是glibc工具,我们将程序执行载入并内存时它就是一个进程,用户人为启动某个程序时,是要通过终端来启动,这就是与终端相关的进程,而终端是一个硬件设备,它关联一个用户的接口,另一种是与终端无关的进程,它是通过操作引导启动过程当中自动启动。没有人为的参与。

1.1 操作系统的层级结构组成

  在我们之前也讲过操作系统的组成部分,从静态角度来说就是内核Kernel和GPL等开源协议的应用程序Application来组成,那么文件系统是内核当中必须有的一个功能,在Linux的层级结构是倒装的数置结构,我们都知道普天之下莫非王土,率土之兵莫非王臣。说明我们访问Linux的文件系统时,一切都是从"根"开始,也就是该符号/,而下面的是根据FHS(文件系统层次化标准)所定制的根一下的目录一下必须存放什么样的数据和目录,成为了各个厂商以及开发者的统一采用标准。如果不是统一,而是根据各个厂商及开发者开发的话,那对于我们使用者来说,是一件痛苦的事情。FHS的层级结构目录如下:

   /bin:所有用户可用的基本程序文件;   /sbin:供系统管理员使用的工具程序;   /dev:存储特殊设备文件;设备有两种过类型:字符设备(线性设备)、块设备(随机设备);   /etc:系统程序的配置文件,只能为静态的文本文件;   /home:普通家目录的集中位置:一般每个普通用户的家目录默认在此目录下与用户名的子目录,/home/USERNAME;   /root:管理员的家目录;可选;   /lib:为系统启动或根文件系统上的应用程序(/bin, /sbin)提供共享库,以及内核提供模块;libc.so.*:动态连接的C库;ld*:运行时链接器/加载器;modules:用于存储内核模块的目录;   /lib64:64位系统特有的存放64位共享库的路径;   /media:便捷式设备的挂载点,cdrom, floppy等;   /mnt:其它文件系统临时挂载点;   /opt:附加应用程序的安装位置;可选路径;   /srv:当前主机为服务器提供的数据;   /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可提供所有用户执行写入操作;有特殊权限;   /usr:usr Hierarchy, 全局共享的只读数据路径;bin, sbinlib, lib64include:C语言程序文件share:命令手册页和自带文档框架持有的文件所存储的位置;local:另一个层级目录;lock:log:run:spool:tmp   /proc:(内核的输出信息是通过内核参数来实现的)   基于内存的虚拟文件系统,用于内核及进程存储其相关信息;它们多位内核参数,例如:net.ipv4.ip_forward,虚拟为net/ipv4/ip_forward,存储于/proc/sys/,因此其完整路径为/proc/sys/net/ip_forward;   /sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于管理Linux设备提供一种统一模型的接口;

  总结:Linux内核中有文件系统功能,而这个文件系统是关联在内核上面,内核可以通过这个文件系统访问任何一个文件,必要的时候让一个程序启动起来,访问自己的配置文件,而内核也不例外,它也是某个磁盘路径下的某个文件,但我们分区时,这些分区不能随意分开并访问,所以一切都从根开始,在根以下的目录找到一个空目录,关联其它设备,称之为挂载(大致上的FHS)。

二、Linux系统上的文件类型

  我们在使用ls -l命令的时候可以详细查看该文件或目录的详细信息及大小,那么其实最左侧的第一个-是系统上的文件类型,有几下几类,如下示例:

   -:常规文件;即f;   d:directory,目录文件;   b:block device,块设备文件,支持以"block"为单位进行随机访问;   c:character device,字符设备文件,支持以"charactor"为单位进行线性访问;major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序;minjor number:次设备号,用于表示同一类型中的不同设备;早期用8位二进制表示:0-255   l:symbolic link,符号设备文件;   p:pipe,命令管道;   s:socket,套接字文件;

2.1 基本命令

2.1.1 alias命令

  我们现在都知道,类型分为内部命令和外部命令,内部命令就是shell内嵌的命令,但shell命令本身是外部的,但在shell内包含着许多命令,那么命令格式我们也讲过,就是type COMMAND如果是内部命令就会显示builtin,那么外部就会显示其命令文件的存放路径,不过需要注意的是,命令是可以有别名的;如果别名可以与原名相同,那么此时原名就会隐藏,以CentOSDebian为例,它们的rm命令的作用是不同的,因为在CentOS中,rm命令其实是别名,它是rm="rm -i"就是将rm -i这个命令替换为rm命令,-i选项是删除之前询问,如果不加入这个选项的话,则会直接删除,Debian就是默认没有这个别名。那么接下来我们如何用别名来将命令进行替换。
  那么获取可用别名的定义我们直接使用
alias来直接查看:

   # alias

  那么我们如何定义别名的格式如下:

   # alias NAME=COMMAND

  需要注意的是,这一类的别名仅对当前的shell进程有效(退出分为两种概念,一种是时间上的终止,还有一个是范围终止这两个概念,时间终止为:shell退出;范围终止:指的是当前shell)。
  撤销别名:

   # unalias NAME

2.1.2 whereis命令

  whereis命令是查找该命令的路径存放的二进制文件,以及手册页等存放的位置,其命令格式为:

   # whereis [OPTIONS] name...

  常用选项:

   -b:仅搜索二进制程序路径;   -m:仅搜索使用手册文件路径;

2.1.3 which命令

  which命令是查找环境变量中的二进制的文件,不过有些命令是别名的默认也是显示出来。

   # which [OPTIONS] [--] programname [...]

  我们最常用的选项:

   --skip-alias:跳过别名;

2.1.4 who命令

  who命令无非就是查看是那个用户在登录,命令使用如下:

   # who [OPTIONS]...

  选项如下:

   -b:系统此次启动的时间;   -r:运行级别;

2.1.5 w命令

  w命令是显示目录登录用户的信息。

三、bash的基础特性

3.1 历史命令

  我们在系统中操作某一个程序或者配置一个服务的时候,如果哪一个步骤出现了错误我们并没有找到的话,我们可以查看一下历史命令来看看我们使用的命令操作是否正确,所以说历史命令是shell进程会其会话中保存此用户提交执行过的命令,而我们使用的命令为:history。同时我们还可以定制history的功能,可通过环境变量来实现:

   HISTSIZE:shell进程可保留的命令历史条数;   HISTFILE:持久保存命令历史的文件;.bash_history   HISTFILESIZE:命令历史文件的大小;

  命令用法:

   # history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]

  常用选项:

   -c:清空命令历史;   -d offset:删除指定命令历史;   -r:从文件读取命令历史至历史列表中;   -w:把历史列表中的命令追加至历史文件中;   history #:显示最近的#条命令;

  我们还可以调用历史列表中的命令,用法如下:

   !#:再一次执行历史列表中的第#条命令;   !!:再一次执行上一条命令;   !STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;

  需要注意的是,命令的重复执行有时候需要依赖于幂等性。幂等性简单理解就是重复命令次数特别高的。
  我们也可以调用上一条命令的最后一个参数,使用如下:

   快捷键:ESC, . 和Alt, .(Linux中)   字符串:!$

  我们还可以控制命令历史的记录方式,可以忽略重复的或者忽略以空白字符开头以及以上两者同时生效的,我们可使用环境变量HISTCONTROL来实现,其更改的值如下:

   ignoredups:忽略重复的命令;   igonresoace:忽略以空白字符开头的命令;   ignoreboth:以上两者同时生效;

  而我们给变量,无论是环境变量还是普通变量,需要注意的是只对当前shell有效,赋予个修改的变量的值如下:

   NAME=`VALUE`

本文出自 “天蝎座” 博客,转载请与作者联系!


推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
于浮浅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有