Linux
- 前言
- Linux初探
- Linux内核
- GNU实用工具
- shell
- Linux发行版
- bash shell 基础
- Linux文件系统
- Linux文件操作命令
前言
在阅读诸如docker之类的书的时候,经常碰到Linux的知识。同时,大部分的盲区也是在Linux方面。因此就想稍微了解一下这个广为人使用的操作系统吧。
众所周知,不经常使用的话,遗忘的速度让我们都惊讶不已呀!现在你去看看你一个月前写的一个项目代码试试(狗头保命!)。因为,由于目前阶段我对Linux使用的需求还不是很大。所以也清楚对于诸多书里边实战的部分,如果我在假期学习了开学也是基本忘记了。因此,我目前是让我对Linux初步有一个了解,而不再是门外汉之类的水平,让我能在其余的技术中不至于被卡壳即可了。(但是,看看还是必要的,看时候翻起来找也方便嘛)
好了,废话到此!
Linux初探
首先Linux系统大致可以划分为以下四个部分(有的书忽略了GNU,或者严格的说是没有单独列出来吧)
- Linux内核
- GNU工具
- 图形化桌面环境
- 应用软件
各个部分的协作构成如下图
Linux内核
内核主要负责以下4个功能
- 系统内存管理
- 软件程序管理
- 硬件设备管理
- 文件系统管理
-
系统内存管理:操作系统内核的主要功能之一是内存管理。内核不仅管理服务器上的可用物理内存,还可以创建并管理虚拟内存(实际并不存在的内存)。
内核通过硬盘上称为交换空间(swap space)的存储区域来实现虚拟内存。内核在交换空间和实际的物理内存之间反复交换虚拟内存中的内容。这使得系统以为自己拥有比物理内存更多的可用内存。 -
软件程序管理。Linux操作系统称运行中的程序为进程。进程可以在后台运行,也可以在后台运行。内核控制着Linux系统如何管理运行在系统中的所有进程。
内核创建第一个进程(称为init进程)来启动系统中所有其他进程。当内核启动时,会将init进程载入虚拟内存。内核在启动其他进程时,会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。 -
硬件设备管理。内核的另一职责是管理硬件。任何Linux系统需要与之通信的设备都必须在内核代码中加入其驱动程序。驱动程序相当于应用程序和硬件设备的“中间人”,允许内核同设备之间交换数据。目前流行的想Linux内核中插入设备驱动的方法为将设备驱动模块加入内核。
为此,开发人员提出了内核模块的概念。允许在无须重新编译内核的情况下将驱动程序插入运行中的内核。
Linux将硬件设备视为一种特殊文件,称为设备文件。其大致分为三种:①字符设备文件;②块设备文件;③网络设备文件。 -
文件系统管理。不同于其他一些操作系统,Linux内核支持通过不同类型的文件系统读写硬盘数据。除了自有的多种文件系统,Linux还能够读写其他操作系统(比如Microsoft Windows)的文件系统。内核必须在编译时就加入对所有要用到的文件系统的支持。
GNU实用工具
除了由内核来控制硬件设备,操作系统还需要实用工具来实现各种标准功能,比如控制文件和程序。而,Linus的Linux内核和GNU操作系统实用工具结合在一起,产生了一款完成且功能丰富的自由操作系统。
供Linux系统实用的这组GNU核心工具称为core utilities 软件包。其由三部分构成
- 文件实用工具
- 文本实用工具
- 进程实用工具
其中我们最为熟悉的无疑是其中的交换工具---- shell了。
shell
GNU/Linux shell是一种特殊的交互式工具,为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统中的进程的途径。shell的核心是命令行提示符,负责shell的交互部分,允许用户输入文本命令,然后解释命令并在内核中执行。
- shell包含一组内部命令,可用于完成复制文件、移动文件、重命名文件、显示和终止系统中正在运行的程序这类操作。除此之外,shell也允许在命令行提示符中输入程序的名称,它会将程序名称传递给内核以启动程序。
- 也可以将多个shell命令放入文件中作为程序执行。这些文件称作shell脚本。凡是能在命令行中执行的命令都可放入shell脚本中作为一组命令执行。这为创建通常需要执行多个命令的实用工具提供了极大的便利。
- 在Linux系统中,有相当多的shell可供使用。不同的shell有不同的特性,有些适用于创建脚本,有些则适用于管理进程。所有Linux发行版默认的shell都是bash shell。bash !!!
Linux发行版
我们将完整的Linux系统包称为发行版。大量不同的Linux发行版可以满足你可能存在的各种计算需求。
大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或者普通家庭用户。每种定制的发行版都包含了支持特定功能所需的各种软件包,比如多媒体爱好者要用到的音频和视频编辑软件,软件开发人员要用到的编译器和集成开发环境(IDE)。
不同的Linux发行版通常分为两类。
- 完整的核心Linux发行版
- 特定用途的Linux发行版
如下两张图片分别为常见的完整版和特定用途版
图一:完整的核心Linux发行版
图二:特定用途的核心Linux发行版
bash shell 基础
GNU bash shell是一个程序,提供了对Linux系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。(也就是说,我们可以通过这里查看默认启动的shell程序或者更改默认启动的shell程序)
/etc/passwd文件包含了所有系统用户账户以及每个用户的基本配置信息。
- 默认的 bash shell 提示符是美元符号($),这个符号表明shell在等待用户输入命令。(不同的Linux发行版会采用不同格式的提示符)。一般这还能提供额外的辅助信息。如当前用户名、主机名。波浪号(~)表明shell会话当前位于主目录中。如Ubuntu中的提示符:
christine@UDesktop:~$
- man命令可以访问Linux系统的手册主页。在man命令之后跟上想要查看的命令名,就可以显示相应的手册页。
Linux文件系统
Linux的路径中不使用驱动器盘符。在Windows中,计算机上安装的物理驱动器的分区决定了文件路径。Windows会为每个物理磁盘分区分配一个盘符,每个分区都有自己的目录结构,用于访问存储在其中的文件。
而Linux则采用另一种方式。Linux会将文件存储在名为虚拟目录(virtual directory)的单个目录结构中。虚拟目录会将计算机中所有存储设备的文件路径都纳入单个目录结构。
Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照其访问路径一一列出,这点跟Windows类似。
这是一个Linux中的文件路径:/home/rich/documents/test.doc
’
这表明文件test.doc位于Documents目录,该目录位于rich目录,而rich目录则包含在home目录中。
要注意两点:①Linux使用正斜线来分隔文件路径中的目录。反斜线是用作反义字符的;尔②文件路径本身并没有提供任何有关文件真实存放在哪个物理磁盘中的信息。
- Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备。我们称在Linux系统中安装的第一块硬盘为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。如下图
- Linux会使用根驱动器上一些特别的目录作为挂载点(mount point)。挂载点是虚拟目录中分配给额外存储设备的目录。Linux会让文件和目录出现在这些挂载点目录中,即便它们位于其他物理驱动器中。
系统文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中,如下图 - 在切花目录的时候,
cd
命令我们应该都是很熟悉的了。其中地址分为绝对地址和相对地址。其中有两个特殊字符可用于相对路径中:①单点号(.),表示当前目录;②双点号(…),表示当前目录的父目录。如使用../etc
表示去到该目录的上一级,从中选择etc目录
Linux文件操作命令
1.pwd:显示出shell会话的当前目录,该目录称为当前工作目录。
2. ls :①直接使用ls命令显示当前目录下的文件和子目录(不包括隐藏文件)。会按字母进行排序;②ls -F
:使用-F选择会在目录名之后添加正斜线,类似地还会在可执行文件之后添加星号(*) ;③ls -a
:会显示隐藏的文件。一般隐藏文件是文件名以点号(.)开始的文件;④ls -F -R
:可以列出当前目录所包含的子目录中的文件;
3. touch:创建文件
4. 复制文件:cp source destination
5. 文件重命名(移动):在Linux中,重命名文件称为移动。因为在当前目录在,移动到的目的也是该目录,同时文件名变化了。这不就是重命名嘛。mv
6. 删除文件:rm
。
7. 创建目录:mkdir
8. 删除目录:rmdir
。在默认情况下,该命令只删除空目录。
9. 查看文件类型:file
10.查看整个文件:cat
。该命令会一次性加载显示全部内容。而more
则是可以进行翻页来进行查看。
11. 查看部分文件:tail
默认查看文件的末尾10行;head
会默认显示文件前10行的内容。