Linux运维初步----Linux的基础(第一周) - Go语言中文社区

Linux运维初步----Linux的基础(第一周)


Linux运维入门初步---第一周

标签(空格分隔): Linux 运维 Linux入门


写作:N27_李伟 2017-7-4

Linux入门之计算机硬件系统组成

Linux是一种计算机操作系统,操作系统简单讲是控制计算机硬件系统和人类进行交互、反馈的重要界面层。通过操作系统的处理,将人的信息通过操作系统界面转换为机器可以理解和执行的机器语言代码,然后交由机器进行处理运算。再通过操作系统的处理,将机器运算结果转换成人类可以理解的信息:如文字、图像、声音,通过显示器等硬件设备反馈给人类。如果没有操作系统,计算机的使用会变得不可想象。
既然操作系统和计算机硬件紧密关联,就需要对计算机的组成有所了解。亦有助于对操作系统的学习。

计算机硬件的组成体系

现代计算机依然遵守约翰.冯.诺依曼所制定的体系。

  • 使用二进制数字来表示数据和指令;既“0”和“1”的组合来表示各种信息和指令

  • 计算机硬件由运算器、存储器、控制器、输入设备、输出设备五大部分组成

  • 将指令和数据存放在存储器中,计算机自动地逐条取出指令和数据进行分析、处理和执行; 即存储程序的计算机工作原理设计思想。存储程序思想是指把解决问题的程序和需要加工处理的原始数据存入存储器中,这是计算机能够自动、连续工作的先决条件。


  • 运算器的功能:又称算术逻辑单元,是计算机对数据进行加工处理的部件,它的主要功能是对二进制数码进行加、减、乘、除等算术运算和与、或、非等基本逻辑运算,实现逻辑判断。

  • 控制器的功能:用来处理计算机各部分协调工作,并使整个处理过程有序进行。其基本功能是从内存中取指令和执行指令,根据该指令的功能向有关部件发出控制命令,执行指令。同时也接收部件提供的反馈信息。

  • 存储器的功能:具有记忆功能,可以记忆存储信息。如指令、数据、运算结果。计算器内部采取二进制来表示信息,既一系列的“0”和“1”的组合,计算机不能识别其他的信息表示方式。规定每一个“1”或“0”称为一位bitbit是计算机内最小的数据单位。但是每一个单独的位是没有意义的,必须组合起来才有意义。对于存储器来说,最小的存储单元是字节,既规定每8个bit为一个字节byte,每1024个字节byte为1KB。

  • 输入和输出设备:简称I/O设备,用户通过输入设备将信息输入计算机,通过输出设备来获取计算机对信息处理的结果。常见的输入设备有键盘、鼠标,输出设备有显示器、打印机。

Linux的历史演进和之间的关系

第一台电子计算机诞生于1946年。1946年2月15日在美国宾西法尼亚大学的试验室投入使用。但是早期的计算机并没有操作系统这个概念。用户是独立的占有计算机,使用纸带、打孔机使用机器语言来向计算机来输入程序,计算机也是通过指示灯、打孔纸带等方式输出二进制的信息。

显然,这种方式操作难度极大,随着计算机硬件的不断发展,功能越来越强大,就出现了一种整合了机器底层硬件驱动让人可以比较简单的和机器进行交互的软件界面。它通常具有的功能是可以驱动硬件、进行进程管理、内存管理、文件系统等。称之为Operating System,简称"OS"。

早期的操作系统都是使用微码语言编写,既使用机器语言或汇编语言编写,各家计算机生产商都有各自的操作系统且不相兼容。但是随着小型机和个人计算机的出现,操件系统也在不断向标准化、易用化发展。

一、UNIX的出现

1969年,unix在AT&T的贝尔实验室诞生。unix操作系统来源于1965年贝尔实验室参于的一项和通用电气(General Electric)和麻省理工学院(MIT)合作
的计划。该项目要建立一套多使用者、多任务、多层次(multi-user、multi-processor、multi-level)的MULTICS操作系统。

直到1969年,因MULTICS计划的工作进度太慢,该计划被停了下来。当时,技术大牛Ken Thompson(后被称为UNIX之父)为了开发其名为一星际旅行的游戏,在一台废弃的PDP-7的机器上开发完成UNIX第一版。

1973年,Ken Thompson 与Dennis Ritchie感到用汇编语言做移植太过于头痛,改用B语言编写。后来Dennis Ritchie觉得B语言还是不能满足要求,于是就改良了B语言,这就是今天的大名鼎鼎的C语言。使用C编写了Unix的第三版内核。至此,Unix这个操作系统修改、移植相当便利,为Unix日后的普及打下了坚实的基础。而Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。

1974年Ken Thompson 与Dennis Ritchie发表了论文向外界介绍了Unix,引起学术界极大兴趣。由于早期Unix完全免费,也就成为各个大学操作系统的主要教学范例,于是开始其广为流行。

但是AT&T公司开始逐渐的重视Unix商业价植,到1979年,AT&T公司开始禁止免费使用Unix,既使是大学中用于教学也不行。由于Unix的高昂的使用费也促使了GNU/GPL开源软件的思想和组织的兴起,也带来Linux的诞生。

二、Linux的出现和发展

1991年8月,芬兰大学生Linux Torvalds宣布成立Linux项目。他在一个用于教学目的简单的类Unix操作系统MINIX系统的基础上,进一步强化了MINIX的功能,针对intel 80386处理器优化,并且将大量的GNU软件进行了移植,比如gcc、bash等。

到了1991 年的10 月5 日 ,Linus 在comp.os.minix 新闻组上发布消息,正式向外宣布Linux 内核系统的诞生(Free minix-like kernel sources for 386-AT)。这段消息可以称为Linux 的诞生宣言,并且一直广为流传。因此10 月5 日对Linux社区来说是一个特殊的日子,许多后来Linux 的新版本发布时都选择了这个日子。

三、Linux主流版本

由于Linux是基于GNU的GPL协议,因此其是一个免费、开放源码的操作系统。但是,Linux只提供了源代码,用户想要使用,就需要自己来编译成可执行的二进制文件。可惜对操作系统源码的编译是非常复杂的,普通用户还是难以使用。

为此,就出现了一些组织或是商业公司给人们提供已经编译好的Linux系统。这称之为发行版。由于Linux源代码开放的原因,任何一个有能力的组织或个人都可以发行自己编译好的Linux系统,也造成了今天市面上存在着数百种的Linux版本。但是常用的基本分为三大系列:

  1. Debian:三大主流版本之一,唯一的社区版。使用难度较大,但是系统比较轻巧。
    - ubuntu:二次发行版
    - knopix:安全性高,短小。
  2. SLACKware :二次开发版S.U.S.E和opensuse,以界面华丽著称,在欧洲很流行。
  3. REDhat: 主要分布于美国、中国,在互联网上的文档也比较多。
    • redhat enterprise:企业版,收费版本,提供服务。每18个月更新一次
    • Centos: 二次开发版,社区版,使用redheat enterprise的源码编译,免费
    • Fedora core: 个人桌面版,每6个月更新一次。
  4. 除了以上几个版本外,还有Gentoo和LFS。这两个版本使用难度均较大,Gentoo需要边编译边安装,LFS则是完全没有二进制文件,仅提供了Linux的源代码和编译指导,需要用户自己完成代码的编译和安装。
  5. 三个流行版本的区别不仅是发行商的不同,重要的是其使用的包管理器也不相同。Debian的包管理器是DEB格式,Slackware、Redhat是rpm格式(也是Linux的工业标准),Redhat还有自己的Yum格式,后期准备升级为DNF格式。

四、 Linux的哲学思想

关于哲学思想,我认为也可以理解为Linux的设计思想。主要包括以下几点:

  1. 一切皆文件的思想。在Linux中,文件不仅是指计算机中存储的信息,而是把计算机的硬件设备、通信接口等等也都看作文件来管理。好处是可以将接口标准化。
  2. 由众多功能单一的程序组成,既一个程序只做一件事情,并且要做好。完成复杂任务是能通过组合小程序来完成的。功能单一的小程序也使得系统的负担减小,使得内核的运行更高效。复杂任务由众多的高效的小程序组成,从而保证了复杂程序也是高效的。
  3. 尽量不与用户交互:易于用编程的方式来完成自动化任务。
  4. 使用文本文件来保存配置信息,这样可以方便高效的对计算机的配置进行修改,而且查看和保存都很方便。

五、Linux系统上命令

ifconfig

~]# ifconfig
获得当前系统的网络配置信息。在Centos6.5中,eth0代表网卡名称,inet addr表示机器的IP地址(IPV4),inet6 addr代表IPV6的地址。

[root@loong ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D8:3F:1E  
          inet addr:192.168.31.115  Bcast:192.168.31.255                     Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed8:3f1e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:42 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5917 (5.7 KiB)  TX bytes:6565 (6.4 KiB)
          Interrupt:19 Base address:0x2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

tty####

外部命令,显示出连接到当前标准输入的终端设备文件名。终端指的是键盘加显示器所构成的一组设备。来自Unix的多用户的概念。每个用户视为一个终端设备。当计算机启动时,称为物理终端(/dev/console),也叫控制台。启动后,显示的界面为虚拟终端(/dev/tty#(16)),Linux中共有6个,可以用Ctrl+ALT+F1F6来切换,Ctrl+ALT+F7是切换到图形终端。图形界面中打开的终端称为伪终端(/dev/pts)。
例如,在Xshell远程连接中执行tty

[root@loong ~]# tty
/dev/pts/0

在Centos下执行tty

[root@loong ~]# tty
/dev/tty1

echo####

显示文本,将输入的字符串送往标准输出显示。输出的字符串间以空白字符隔开,并在最后加上换行符号。
echo: echo [-neE] [arg ...]
选项: -n代表不在输出后换行
例如:

[root@loong ~]# echo -n "hello Linux"
hello Linux[root@loong ~]# (命令提示符在一行中出现)
[root@loong ~]# echo "hello Linux"
hello Linux  (输出后换行)
[root@loong ~]#  

选项:-e 使字符中的转义字符生效
例如:hello Linux中加入n,表示显示hello后换行输出Linux.如不加-e参数则无效。

[root@loong ~]# echo -e "hello nLinux"
hello 
Linux
[root@loong ~]# 
[root@loong ~]# echo "hello nLinux"
hello nLinux
[root@loong ~]#

startx####

启动x windows图形界面。一般后不加参数,但如启动第二个x windows时可以加"--:1",也可以用"--vt8"的形式,指定要在哪个虚拟终端启动。

enport####

设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可以新增、修改、删除环境变量,供后续程序使用。exprot的修改仅对本次登录有效。
选项:-p 列出所有shell赋于程序的环境变量
-n 删除指定变量。实际并末删除,只是不会输出到后续命令的执行环境中

例如

[root@loong ~]# export -p
declare -x CVS_RSH="ssh"
declare -x DISPLAY="localhost:10.0"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="loong"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x QTDIR="/usr/lib/qt-3.3"
declare -x QTINC="/usr/lib/qt-3.3/include"
declare -x QTLIB="/usr/lib/qt-3.3/lib"
declare -x SELINUX_LEVEL_REQUESTED=""
declare -x SELINUX_ROLE_REQUESTED=""
declare -x SELINUX_USE_CURRENT_RANGE=""
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.31.225 49247 22"
declare -x SSH_CONNECTION="192.168.31.225 49247 192.168.31.115 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"

pwd####

输出当前工作目录的绝对路径。

[root@loong ~]# pwd
/root
[root@loong ~]# cd /etc/sysconfig
[root@loong sysconfig]# pwd
/etc/sysconfig
[root@loong sysconfig]# 

history####

列出之前使用过的命令。这些信息默认存储在使用者根目录的.bash_history文件中,默认存储1000条命令。
常用选项:-a:在History文件中加上记录
-r:仅读取,不加上记录
-w:覆盖原有的History文件
N: 显示最近N次输入的记录,!N为执行第N条记录
例如:

[root@loong sysconfig]# history
    1  ifconfig
    2  man ifconfig
    3  cd /etc
    4  whereis dir
    5  type dir
    6  dir --help
    7  tty
    8  cd /etc
    9  cd sysconfig
   10  ls
   11  cd network-scripts
   12  ls
   13  vi ifcfg-eth0
   14  service network restart
   15  ifconfig
   16  ssh -n
   17  ssh

显示最近的10条命令,并执行其中一条

[root@loong ~]# history 10
   53  clear
   54  pwd
   55  cd /etc/sysconfig
   56  pwd
   57  help history
   58  history
   59  cd-
   60  cd -
   61  ls
   62  history 10
[root@loong ~]# !61
ls
anaconda-ks.cfg  install.log  install.log.syslog
[root@loong ~]# 

shutdown####

系统关机命令。这是一种安全的关机方式。所有用户将收到警告信息,新的用户登录被阻止。
常用选项
-f:重启时不执行fsck
-F:重启时执行fsck
-h:关机后关闭电源
-c:取消关机。对于"shutdown -h 11:20 &"的形式将shutdown放入后台执行的情况,要先使用"shutdown -c"将前一个关机命令取消。
-r:关机后重新开机(重启)
hh:mm:指定时间关机,也可以用+M的说明M分钟后关机
-t<秒数>:送出关机警告信息后多少秒关机
例如:5分钟后关机、关闭电源,并显示"goodbye everyone"

[root@loong /]# shutdown -h +5 "goodbye everyone"

Broadcast message from root@loong
    (/dev/pts/0) at 5:16 ...

The system is going down for halt in 5 minutes!
goodbye everyone 

poweroff####

Usage: poweroff [OPTION]...
立既关闭系统,关闭系统电源
Options:
-n, --no-sync 关闭系统时不执行SYNC操作
-f, --force 强制关机或重启,不调用Shutdown
-p, --poweroff 关机后关闭电源
-w, --wtmp-only 不实际执行关机操作,仅将记录写入/var/log/wtmp

[root@loong ~]# poweroff -w (并末关机)
[root@loong ~]# 
[root@loong ~]# 

reboot####

Usage: reboot [OPTION]...
重新启动系统

Options:
-n, --no-sync 重启时不检查是否有末结束的程序
-f, --force 强制重启,不调用Shutdow
-w, --wtmp-only 不实际执行关机操作,仅将记录写入/var/log/wtmp

hwclock####

显示和设置硬件时钟
Usage: hwclock [function] [options...]
funtion:
-s | --hctosys:把硬件时钟设定给系统时钟
-w | --systohc:把系统时间设定给硬件时钟

设置硬件时钟日期和时间
[root@loong ~]# hwclock --set --date "7/10/2017 16:05:00"
[root@loong ~]# hwclock
2017年07月10日 星期一 16时05分06秒  -1.039608 seconds
显示硬件时间和系统时间,并把硬件时间设定给系统时间 
[root@loong ~]# hwclock     显示硬件时间
2017年07月10日 星期一 17时27分34秒  -0.989145 seconds
[root@loong ~]# date        显示系统时间
2015年 06月 07日 星期日 07:29:02 CST
[root@loong ~]# hwclock -s  把硬件时间设定给系统时间
[root@loong ~]# date        系统时间显示已调整为硬件时间
2017年 07月 10日 星期一 17:28:06 CST
[root@loong ~]# hwclock
2017年07月10日 星期一 17时28分22秒  -0.129154 seconds
[root@loong ~]# 

date####

显示和设定系统的日期和时间
显示时间和时间:date [OPTION]... [+FORMAT]
设定日期和时间:date [MMDDhhmm[[CC]YY][.ss]]
+FORMAT:指格式符
%H 小时(00-23)
%I 小时(00-12)
%j 按年计的日期(001-366)
%k 时(0-23)
%l 时(1-12)
%m 月份(01-12)
%M 分(00-59)
%n 换行
%N 纳秒(000000000-999999999)
%p 当前locale 下的"上午"或者"下午",未知时输出为空
%P 与%p 类似,但是输出小写字母
%r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
%R 24 小时时间的时和分,等价于 %H:%M
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S 秒(00-60)
%d 按月计的日期(例如:01)
%D 按月计的日期;等于%m/%d/%y
%e 按月计的日期,添加空格,等于%_d
%F 完整日期格式,等价于 %Y-%m-%d
例如:

自1970-1-1 00:00:00到现时经过的秒数(时间戳)
[root@loong ~]# date +%s
1499676946
[root@loong ~]#
显示年月日时分秒
[root@loong ~]# date +"%Y-%m-%d %H:%M:%S"
2017-07-10 17:01:12
[root@loong ~]# 
设置指定的日期和时间
[root@loong ~]# date +"%Y-%m-%d %H:%M:%S"
2017-07-10 17:01:12                      当前系统时间
[root@loong ~]# date 060707102015.23     指定为2015-6-7 7:10:23
2015年 06月 07日 星期日 07:10:23 CST
[root@loong ~]# date                     显示系统时间,已经更改
2015年 06月 07日 星期日 07:10:28 CST
[root@loong ~]# hwclock                  系统硬件时间还是2017年时间
2017年07月10日 星期一 17时09分14秒  -0.581742 seconds
[root@loong ~]# 

六、Linux中获取帮助信息

Linux中分为外部命令和内部命令两种。外部命令是外加的程序,具有路径,而内部命令是shell的内嵌命令。一般可以用type、whereis查看区分。
[root@loong ~]# type history
history is a shell builtin
表示history是一个内嵌命令
[root@loong ~]# type tty
tty is /usr/bin/tty
显示出tty程序的路径,则是外部命令。

获取命令帮助的方式####

  1. 对于内部命令使用help command格式获得简易帮助
       [root@loong ~]# help pwd
pwd: pwd [-LP]
    Print the name of the current working directory.
    
    Options:
      -L    print the value of $PWD if it names the current working
        directory
      -P    print the physical directory, without any symbolic links
    
    By default, `pwd' behaves as if `-L' were specified.
    
    Exit Status:
    Returns 0 unless an invalid option is given or the current directory
    cannot be read.
[root@loong ~]# 
  1. 对于外部命令使用 --help参数来获得简易帮助
     [root@loong ~]# tty --help
用法:tty [选项]...
显示出连接到当前标准输入的终端设备文件名。

  -s, --silent, --quiet 什么也不显示,只返回退出状态值
      --help        显示此帮助信息并退出
      --version     显示版本信息并退出

请向bug-coreutils@gnu.org 报告tty 的错误
GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告tty 的翻译错误
要获取完整文档,请运行:info coreutils 'tty invocation'
[root@loong ~]# 
  1. 使用man命令获得详细帮助
    语法:man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list] [section] name ...

符号标记说明####

[ ]:可选内容; < >:必须提供的内容; a|b|c..:多项内容选一;
...:同类内容可以有多个; { }:分组

man文档的章节分类####

man帮助文档的路径一般在/usr/share/man下,根据man文档的不同章节内容又分别保存在/man/man1/man2...等目录下。
man1:用户命令说明;
man2:系统调用说明;
man3:c库调用;
man4:设备文件和特殊文件说明;
man5:配置文件格式;
man6:游戏的说明;
man7:杂项说明;
man8:管理工具及守护进行;

常用man文档操作####

查看指定的章节:例如:]#man 5 命令
帮助手册列表: ~]# whatis command
建立whatis数据库:makewhatis

进入man文档后的操作####

空格:翻屏,向文件尾部翻屏;
b: 向文件首部翻屏;
ctrl+d:向文件尾部翻半屏;
ctrl+u:向文件首部翻半屏;
回车键:向文件尾部翻一行;
k: 向文件首部翻一行;
g: 到最后一行;
ng: 到指定行数,n指数字;
/keyword:在man文档中搜索;
?keyword:在man文档中搜索;

  1. 程序自带的帮助文档,在/usr/share/doc/
  2. 获取命令的在线文档,info 命令名称

Linux发行版的基础目录和功能####

1、Linux的设计思想是一切皆文件,Linux将计算机的硬件、软件的一切资源视为不同的文件。因此,Linux对计算机的管理实际上通过一套方件系统来管理的。这个文件系统必定有一个启点,系统由此启动,而后系统将不同的硬件资源\软件映射成不同的文件或目录来挂载到该文件系统的启点上,形成一个完整的文件系统供用户访问使用。这个启点称为/(根)分区,Linux系统必须具备/分区,否则系统无法启动。各种的设备或者软件作为/下的不同的目录或者文件被用户访问或被系统所调用。

但由于Linux是源码开发的自由软件,可以众多不同的版本。而且,每个发行版之间都可以自定义,但是这样的话必然会导致Linux版本间的混乱和不规范,不利于Linux的普及和使用。为了规范不同发行商之间、不同发行版本之间的Linux文件系统的标准,由LSB定义了Linux发行版基础目录名称命名法则和功用规定,该标准称为FHS(Filesystem Hierarchy Standard),中文名为文件系统层次化标准。

FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。如下图:



FHS定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置文件,/bin与/sbin则应该要放置可执行文件等等。
第二层则是针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等。

2、Linux基础目录的名称和功能说明
如果查看/下的文件会看到一系列的目录,既便是不同版本的系统,其目录都遵守FHS标准,要具有以下标准目录结构。
/bin: 供所有用户使用的基本命令程序文件
/sbin: 供系统管理员使用的命令程序
/boot: 引导加载器所用到的静态文件。如kernel,initramfs,grub等。
/dev: 硬件设备文件或特殊文件
/etc: 系统的静态配置文件,不能为二进制文件。其也为层级结构
/home: 普通用户的家目录的集中位置。层级结构。不是必须的
/lib: 基本的共享库和内核模块(和启动有关)。64位系统还有/lib64
- libc.so.* 动态链接库文件;
- ld*:运行时链接器/加载器;
- /modules:存放内核模块
/media 为便携式设备提供挂载点
/mnt 其他文件系统提供的临时挂载点
/opt 附加程序的安装位置,可选路径
/root 管理员的家目录,可选
/srv 当前主机为服务提供的数据
/tmp 为产生临时文件的程序提供的存储临时文件的目录,所有用户都可以使用。
/usr(层级)全局共享的只读数据路径;也包括bin,sbin,lib,lib64,share,includ(c程序头文件),share(命令手册、命令自带说明),local系统管理员安装应用程序用
/var(层级)存储经常变化的数据

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/a3a3880cac32
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 13:11:34
  • 阅读 ( 1305 )
  • 分类:运维

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢