美文网首页
Linux基础知识

Linux基础知识

作者: 请叫我飘哥 | 来源:发表于2018-12-11 15:22 被阅读0次

    1、计算机的组成及其功能

      说到计算机的组成那就不得不提冯·诺依曼体系结构,美籍匈牙利数学家冯·诺依曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系结构冯·诺依曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行,人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。半个多世纪以来,计算机制造技术发生了巨大变化,但冯· 诺依曼体系结构仍然沿用至今,人们总是把冯· 诺依曼称为“计算机鼻祖”。
      根据冯·诺依曼体系结构特点,计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成,其功能我们如下图所示:


    冯· 诺依曼体系结构
    • 运算器、控制器(CPU中央处理器):负责指令的执行以及指令数据调度控制,我们可以认为它是加工厂的加工车间。
    • 存储器(MEM内存):数据存储,负责存储要加工的数据和已加工完成的数据,我们可以认为它是加工厂的仓库。
    • 输入设备(键盘、鼠标、硬盘):负责数据的输入,我们可以认为它是加工厂的原材料采购部门。
    • 输出设备(显示器、硬盘):负责数据的展示或永久存储,我们可以认为它是加工厂的销售部门。

      以上是计算机的硬件组成及功能,当然光有这些硬件,计算机是不能正常运行的。我们还需要一个非常重要的东西,我们叫做操作系统(kernel也称内核),它负责加载控制使用运算器、控制器、存储器、输入/输出这些硬件设备。那操作系统组成如下图:


    Linux操作系统组成
    • 硬件:既上文提到的CPU、MEM、IO设备。
    • kernel:kernel也就是内核,kernel本身也不对外提供任何服务,kernel是唯一能直接与硬件打交道的程序。它是一个硬件的逻辑层,负责所有硬件的封装,以便上层调用,kernel负责硬件的协调和调度。
    • 系统调用:它是一个实现各种系统功能的子程序。系统调用主要为程序的运行提供服务,典型的服务包括执行新程序、打开文件、读写文件、分配内存、获取当前时间等。操作系统通过一组数量有限并且定义良好的入口点来“暴露”其提供的服务,这些入口点就是系统调用,任何上层程序都不能直接和内核打交道,必须通过系统调用实现。
    • shell:Shell俗称壳(用来区别于核),是指为使用者提供操作界面的软件(命令解析器)。它是用户与操作系统打交道的桥梁。用户通过shell下发指令,shell通过系统调用在到kernel最终告知计算机硬件具体要做什么操作。
    • lib调用:我们称之为库调用,为了方便系统调用而设计的,建立在系统调用之上,其内部可能会调用一个或多个系统调用,通常用于为应用程序提供一些更加方便的功能。因此,库调用过程可以是对系统调用的“包装”,从而为应用程序提供一些更加实用和便捷的服务。
    • 应用程序:这个是我们比较熟悉的,应用程序通过对系统进行调用或者通过lib调用来对外提供某种服务,我们可以认为它是服务器提供服务的入口点,建立在操作系统之上。它主要实现对外的各种服务。比如数据库服务,web服务等等。

    2、Linux的发行版,及不同发行版之间的联系与区别

    2.1、什么是Linux发行版

      Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件。一般用户不需要重新编译,在直接安装之后,只需要小幅度更改设置就可以使用,通常以软件包管理系统来进行应用软件的管理。Linux发行版通常包含了包括桌面环境、办公包、媒体播放器、数据库等应用软件。这些操作系统通常由Linux内核、以及来自GNU计划的大量的函数库,和基于X Window的图形界面。有些发行版考虑到容量大小而没有预装 X Window,而使用更加轻量级的软件,如:busybox, uclibc,dietlibc。现在有超过300个Linux发行版(Linux发行版列表)。大部分都正处于活跃的开发中,不断地改进。

    2.2、Linux发行版的三个主流分支

      从上图Linux发行版列表我们可以看到,有三个linxu发行版的主流分支,它们分别如下:

    2.2.1、Debian

      Debian由Lan Murdock与1993年创建,有stable(稳定分支),testing(测试分支)和unstable(不稳定分支)三个版本分支,该发行版主要以社区方式运作,没有商业公司支持,目前最流行的为其中一个分支Ubuntu,主要针对桌面和服务器。

    2.2.2、Slackware

      是由Patrick Volkerding开发的GNU/Linux发行版。它的最大特点就是安装灵活,目录结构严谨,版本力求稳定而非追新,其代表分支S.u.S.E,它又包含商业版(SLES)和开源版(openSUSE)。

    2.2.3、Redhat

      Redhat是由美国Red Hat(RHT)公司出品的计算机操作系统,一系列包括Redhat Enterprise Linux(收费)、Fedora Core(免费)、CentOS(免费)。国内使用的人数较多,资料非常丰富。目前国内用得比较多的为CentOS,Centos是基于Red hat Linux提供的可自由使用源代码的企业级Linux发行版本。每个版本的Centos都会获得十年的支持(通过安全更新的方式)。新版本的Centos大约每两年发行一次,而每个版本的Centos会定期(大概6个月)更新一次,以支持新的硬件。

    2.2.4、其他有代表的发行版本

    • Gentoo:Gentoo的哲学是自由和选择。得益于一种称为Portage的技术,Gentoo能成为理想的安全服务器、开发工作站、专业桌面、游戏系统、嵌入式解决方案或者别的东西--你想让它成为什么,它就可以成为什么。由于它近乎无限的适应性,可把Gentoo称作元发行版。
    • Arch:Arch以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅和代码最小化的设计宗旨。

    2.3、Linux发行版之间的联系与区别

    • 联系:Linux的内核源代码和Linux的应用程序都可以自由获得,因此很多公司组织开发了属于自己的Linux发行版;所有发行版都是使用基于同一段Linux内核代码进行修改而来,都需要遵循GNU的GPL协定;所有的发行版都有自己的版本号,版本格式约定基本一样(主版本号.次版本号.发行号.修正号)。
    • 区别:发行版的本质区别,在于继承不同版本的内核,库、程序的组成,不同发行版本它们的侧重点不同,比如有的侧重漂亮、操作方便的桌面,有的侧重安全的系统环境等等,不同发行版几乎采用了不同包管理器,SLES、Fedora、openSUSE、centos、RHEL使用rmp包管理系统,包文件以RPM为扩展名;Ubuntu系列,Debian系列使用基于DPKG包管理系统,包文件以deb为扩展名。

    3、Linux的哲学思想

    • 1、一切皆文件:在Linux操作系统中,普通的文件,目录、字符设备、块设备、Linux 中都是以文件被对待,所有的设备都以一个文件的形式展露给用户,其内存中的变化信息也可以通过/porc目录下的文件来展示等等。

    • 2.、文本的形式保存配置数据:在Linux操作系统中所有的配置修改都可以通过修改某个配置文件来实现。

    • 3、提供机制,而非策略:所谓机制,就是“提供什么功能”,策略就是“实现什么功能”,我们是通过linux它提供的功能来实现某些功能,而并非用已经定义打包好的策略,这种独特的设计思想为设计者提供了更大的空间使其更好的实现它。

    • 4、尽可能避免与用户交互:Linux上支持的脚本语言种类十分丰富、易学简单,易于使用者已脚本的方式自动完成众多功能。

    • 5、单一目的的小程序:一个单一的程序或者可执行的文件,就可以完成某个功能或任务,不会太过于复杂和过大,这样才会保证Linux的高速运转。

    • 6、组合小程序完成复杂任务:Linxu将多个小程序进行组合起来,通过连接很多是简单程序来实现复杂程序的运转,保证了简单功能的高效性的同时,复杂的程序也必然是高效性的、松耦合的。

    • 7、自由:Linux最大的特点之一就在于它的开源共享精神,这也可以说是它最重要的思想,它开源的特点,将软件程序与源代码一起打包提供,让用户可以不受限制的使用某个软件的功能并且随意修改,甚至修改成衍生产品再发布出去

    4、Linux系统上命令的使用格式,及常用命令示例

    4.1、命令提示符

    登录系统后,第一眼看到的内容是:

    [root@node01 ~]# 
    

    上图就是 Linux 系统的命令提示符。那么,这个提示符的含义是什么呢?

    • []:这是提示符的分隔符号,没有特殊含义。
    • root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录。
    • @:分隔符号,没有特殊含义。
    • node1:当前系统的简写主机名node1。
    • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
    • ]#:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。

    4.2、命令的语法通用格式

    ~]# COMMAND [OPTIONS] [ARGUMENTS]
    ~]# 命令名 [选项] [参数]
    命令格式中的 [] 代表可选项,也就是有些命令可以不写选项或参数,也能执行。例如:

    [root@node01 ~]# ls
    abc  anaconda-ks.cfg
    [root@node01 ~]
    

    接着,我们就用 Linux 中最常见的 ls 命令来解释一下命令的格式。

    • 选项的作用
    [root@node01 ~]# ls -l
    总用量 8
    -rw-r--r--. 1 root root   20 11月 30 14:35 abc
    -rw-------. 1 root root 1647 11月 28 14:46 anaconda-ks.cfg
    [root@node01 ~]# 
    

    如果加一个"-l"选项,则可以看到显示的内容明显增多了。"-l"是长格式(long list)的意思,也就是显示文件的详细信息。至于"-l"选项的具体含义,我们稍后再详细讲解。可以看到选项的作用是调整命令功能。如果没有选项,那么命令只能执行最基本的功能;而一旦有选项,则可以显示更加丰富的数据。

    • 参数的作用
      参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作。例如:
    [root@node01 ~]# ls -l /root
    总用量 8
    -rw-r--r--. 1 root root   20 11月 30 14:35 abc
    -rw-------. 1 root root 1647 11月 28 14:46 anaconda-ks.cfg
    [root@node01 ~]# 
    

    但是为什么一开始 ls 命令可以省略参数?那是因为有默认参数。命令一般都需要加入参数,用于指定命令操作的对象是谁。如果可以省略参数,则一般都有默认参数ls -l 后面默认是以当前目录为参数。

    4.3、常用基本命令示例

    • ifconfig
      用于配置和显示Linux内核中网络接口的网络参数,一般用来查看网卡信息
      ifconfig [-v] [-a] [-s] [interface]
      ifconfig [-v] interface [aftype] options | address ...
      常用示例:
      查看网卡ens32的详细信息
    [root@node01 ~]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.192.2.222  netmask 255.255.255.0  broadcast 10.192.2.255
            inet6 fe80::58e9:fb25:8d97:81fa  prefixlen 64  scopeid 0x20<link>
            ether 00:50:56:84:af:8b  txqueuelen 1000  (Ethernet)
            RX packets 54298  bytes 12290214 (11.7 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 9123  bytes 1309540 (1.2 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@node01 ~]# 
    

     给网卡ens32设置IP地址

    [root@node01 ~]# ifconfig  ens32 10.192.2.224/24
    [root@node01 ~]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.192.2.224  netmask 255.255.255.0  broadcast 10.192.2.255
            inet6 fe80::58e9:fb25:8d97:81fa  prefixlen 64  scopeid 0x20<link>
            ether 00:50:56:84:af:8b  txqueuelen 1000  (Ethernet)
            RX packets 55775  bytes 12408989 (11.8 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 9757  bytes 1399059 (1.3 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    
    • echo
      显示文本行
      echo [SHORT-OPTION]... [STRING]...
      echo LONG-OPTION
      -e 表示激活转义符
      常用示例:
      换行输出
    [root@node01 ~]# echo -e "hello\nworld"
    hello
    world
    

    打印上一个命令执行状态

    [root@node01 ~]# ls -l
    总用量 8
    -rw-r--r--. 1 root root   20 11月 30 14:35 abc
    -rw-------. 1 root root 1647 11月 28 14:46 anaconda-ks.cfg
    [root@node01 ~]# echo "$?"
    0
    [root@node01 ~]# 
    ps:""表示弱引用,''表示强引用,0表示执行状态成功,非0表示执行状态错误。
    
    • tty
      显示出连接到当前标准输入的终端设备文件名
      tty [OPTION]...
      常用示例:
      显示当前tty版本信息及当前终端设备号
    [root@node01 ~]# tty --version
    tty (GNU coreutils) 8.22
    Copyright (C) 2013 Free Software Foundation, Inc.
    许可证:GPLv3+:GNU 通用公共许可证第3 版或更新版本<http://gnu.org/licenses/gpl.html>。
    本软件是自由软件:您可以自由修改和重新发布它。
    在法律范围内没有其他保证。
    
    由David MacKenzie 编写。
    [root@node01 ~]# tty
    /dev/pts/0
    [root@node01 ~]# 
    ps:pts表示伪终端。
    
    • startx
      启动图形界面,前提是系统安装了X环境
      startx [ -d Display:0 ] [ -t | -w ] [ -x Startup | [ -r Resources ] [ -m Window_Manager ] ] [ -wait ]
      -d Display :0 指定在启动过程中传递给 X 客户机的 X 服务器的显示名称。
      -m Window_Manager 当未找到 startup 脚本时,启动窗口管理器。
      -r Resources 当未找到 startup 脚本时,装入资源文件。
      -t 为一个 X 终端启动 X 客户机。
      -w 为工作站上的 X 窗口会话启动 X 服务器和 X 客户机。
      -wait 当 xdm 命令调用 startx 时,防止重新启动 X 会话。
      -x Startup 使用 startup 脚本启动 X 窗口会话。
      ps:由于图形界面的启动会占用系统资源,并导致系统的不稳定,一般服务器都采用最小化安装,图形界面基本不需要安装。
    • export
      用于设置或显示环境变量
      export [-fnp][变量名称]=[变量设置值]
      -f 代表[变量名称]中为函数名称。
      -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
      -p 列出所有的shell赋予程序的环境变量
      常用示例:
      修改当前shell的语言为中文
    [root@node01 ~]# date
    Tue Dec 11 11:33:25 CST 2018
    [root@node01 ~]# export LANG="zh_CN.UTF-8"
    [root@node01 ~]# date
    2018年 12月 11日 星期二 11:33:48 CST
    [root@node01 ~]# 
    
    • pwd
      显示当前工作目录的完整路径
      pwd [OPTION]...
      常用示例:
      通常在脚本中调用当前工作目录位置
    [root@node01 ~]# cd /etc/sysconfig/
    [root@node01 sysconfig]# echo "$(pwd)"
    /etc/sysconfig
    [root@node01 sysconfig]#
    
    • history
      显示在命令行输入并执行过的命令
      history [-c] [-d 偏移量] [n]

    或 history -anrw [文件名]

    或 history -ps 参数 [参数...]

    -c:清空内存中的命令历史,不会清空历史文件中的记录

    -d:删除制定命令历史记录,不会清空历史文件中的记录

    -r:从历史命令文件中读取历史命令到内存中

    -w:将内存中历史命令追加至历史命令文件中
    常用示例:
    查看并清除当前shell用户的历史命令

    [root@node01 ~]# history 
        1  history -w
        2  ls
        3  cd
        4  pwd
        5  ls -ld
        6  history 
    [root@node01 ~]# history -c
    [root@node01 ~]# history -w
    [root@node01 ~]# history 
        1  history -w
        2  history 
    [root@node01 ~]# 
    [root@node01 ~]# cat .bash_history 
    history -w
    
    • shutdown
      操作系统关机命令
      shutdown [OPTIONS...] [TIME] [WALL...]
      -[HhP] 都为关机命令
      -[time] 我们可以指定多少分钟以后进行关机操作
      -[wall] 关机时附带的警告信息,通知所有用户。
      -r 相当于reboot 重启服务器
      -k 并非真的关机,主要起发起警告作用
      常用示例:
      关机前发送停机广播
    [root@node01 ~]# shutdown -k 5 Pay attentionman shutdownsystemctl restart network well shutdown after 5min.
    Shutdown scheduled for 二 2018-12-11 09:59:26 CST, use 'shutdown -c' to cancel.
    [root@node01 ~]# 
    Broadcast message from root@node01 (Tue 2018-12-11 09:54:26 CST):
    
    Pay attentionman shutdownsystemctl restart network well shutdown after 5min.
    The system is going down for power-off at Tue 2018-12-11 09:59:26 CST!
    

     立即关闭机器

    [root@node01 ~]# shutdown -h now
    
    Connection closed by foreign host.
    
    Disconnected from remote host(10.192.2.224:22) at 10:12:42.
    
    • poweroff
      操作系统关机命令
      poweroff [OPTIONS...]
      --[half|poweroff] 直接关机命令
      -p 直接关机
      -f 强制关机
      常用示例:
    [root@node01 ~]# poweroff 
    
    Connection closed by foreign host.
    
    Disconnected from remote host(10.192.2.222:22) at 10:28:43.
    
    • reboot
      重启命令
      reboot [OPTIONS...]
      -p 相当于poweroff后,在开机。
      -f 强制重启
      常用示例:
      强制重启
    [root@node01 ~]# reboot -f
    
    Connection closed by foreign host.
    
    Disconnected from remote host(10.192.2.222:22) at 10:34:06.
    
    • hwclock
      hwclock [function] [option...]
      -r 读取硬件时钟并打印结果
      -s 从硬件时钟设置系统时间
      -w 从当前系统时间设置硬件时钟
      常用示例:
      查看当前系统及硬件时钟,并从当前系统时间设置硬件时钟
    [root@node01 ~]# date 
    2018年 12月 11日 星期二 10:55:00 CST
    [root@node01 ~]# hwclock -r
    2018年12月11日 星期二 10时49分05秒  -0.240715 秒
    [root@node01 ~]# hwclock -w
    [root@node01 ~]# hwclock -r
    2018年12月11日 星期二 10时55分46秒  -0.927907 秒
    

    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的

    5.1、命令帮助

    • 内部命令
      help COMMAND
      如判断是否内部命令:type COMMAND
    [root@node01 ~]# type history
    history 是 shell 内嵌
    [root@node01 ~]#
    
    • 外部命令
      • 1、命令自带简要格式的使用帮助
        COMMAND --help

      • 2、使用帮助手册(manual)
        man CHAPTER COMMAND

      • 3、info COMMAND
        获取命令的在线文档

      • 4、很多应用程序会自带帮助文档:/usr/share/doc/APP-VERSION
        README:程序的相关的信息
        INSTALL:安装帮助
        CHANGES:版本迭代时的改动信息;

      • 5、主流发行版官方文档,例如redhat官方文档
        http://www.redhat.com/doc

      • 6程序官方的文档
        官方站点上的"Document"

      • 7、搜索引擎
        Google、百度等等

    5.2、man手册使用

    使用手册(manual),手册压缩格式的文件,有章节之分。手册分为man1-man8。

    • man1:用户命令
    • man2:系统调用
    • man3:C库调用
    • man4:设备文件及特殊文件
    • man5:文件格式:(配置文件格式)
    • man6:游戏使用帮助
    • man7:杂项
    • man8:管理工具及守护进行
      帮助手册路径:/usr/share/man
      语法格式:#man COMMAND
      1、并非每个COMMAND在所有章节下都有手册。
      2、可以通过whatis查看命令存在哪些章节。
      3、whatis执行过程是查询数据进行的,但是如果有新命令需要手动更新数据库:#makewhatis

    6、Linux发行版的基础目录名称命名法则及功用规定

    6.1、命名法则

      Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。参考:Filesystem Hierarchy Standard 故根据这个标准,Linux目录名如下图:

    Filesystem Hierarchy Standard(文件系统层次化标准)

    6.2、目录功用规定描述

    • / 主层次的根,也是整个文件系统层次结构的根目录

    • /bin 存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat、ls、cp等等

    • /boot 存放引导加载程序文件,例如kernels、initrd等

    • /dev 存放必要的设备文件,例如/dev/null

    • /etc 存放主机特定的系统级配置文件

    • /home 普通用户的家目录的集中位置

    • /lib 二进制文件的必需的库文件

    • /media 可移动的多媒体(如CD-ROMs)的挂载点

    • /mnt 临时挂载的文件系统

    • /opt 可选的应用程序软件包

    • /proc 以文件形式提供进程以及内核信息的虚拟文件系统

    • /root root用户的主目录

    • /sbin 必要的系统级二进制文件

    • /srv 系统提供的站点特定数据

    • /tmp 临时文件,所有用户该目录都有写权限

    • /usr 二级层级存储用户的只读数据; 包含(多)用户主要的公共文件以及应用程序

      • /usr/bin 非必要的命令二进制文件 (在单用户模式中不需要用到的);用于所有用户
      • /usr/include 标准的包含文件
      • /usr/lib 库文件,用于/usr/bin/ 和 /usr/sbin/中的二进制文件
      • /usr/lib<架构位数> 备用格式库(可选的)
      • /usr/local 用于本地程序数据目录
      • /usr/local/sbin 非必要系统的二进制文件,比如用于不同网络服务的守护进程
      • /usr/share 架构无关的 (共享) 数据.
      • /usr/src 源代码,比如内核源文件以及与它相关的头文件
      • /usr/X11R6X Window系统,版本号:11,发行版本:6
    • /var 各式各样的变量(Variable)文件,随着系统常规操作而持续改变的文件比如日志文件

      • /var/cache 应用程序缓存数据
      • /var/lib 状态信息,随着程序的运行而不停地改变,比如,数据库,软件包系统的元数据等等
      • /var/lock 锁文件,这些文件用于跟踪正在使用的资源
      • /var/log 日志文件,包含各种日志
      • /var/spool 该spool主要用于存放将要被处理的任务,比如打印队列以及邮件外发队列
      • /var/spool/mail 内含用户邮箱的相关文件
      • /var/run 存放当前系统上次启动以来的相关信息,例如当前登入的用户以及当前运行的daemons(守护进程)

    相关文章

      网友评论

          本文标题:Linux基础知识

          本文链接:https://www.haomeiwen.com/subject/gdbrhqtx.html