Linux 简介

  • 最早的操作系统相关是 Unix 操作系统,诞生与 1970 年,是一个比较完善的分时操作系统。(分时操作系统是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统,用来降低使用计算机的成本)

  • 之后 C 语言诞生了,程序员们用这种高效的,可以移植性强的语言代替汇编语言重写了 Unix 系统,美国官方将 Unix,C 语言,ICP/IP 协议,当作标准开始推广。成功对后来的计算机发展产生了深远的影响。

  • 有一天 Unix 突然宣布不开源了,因此有些程序员将 Unix 系统进行改编,于是就有了各种 Unix 的衍生版本,如:Sun Solaris、FreeBSD、IBM AIX、HP-UX 等等。

  • 除此之外,还有一个编写 Unix 衍生版本的计划 GNU 被发起了,而 GNU 则是 GNU Not Unix 的递归缩写。自发起这个计划以来,GNU 开始大量的产生或收集各种系统所必备的组件,像是——函数库(libraries)、编译器(compilers)、调式工具(debugs)、文本编辑器(text editors)、网站服务器(web server),以及一个 Unix 的使用者接口(Unix shell)等等。但由于种种原因,GNU 一直没有开发操作系统的 kernel。正当 Richard Stallman 在为操作系统内核伤脑筋的时候,Linux 出现了。

  • Linus Torvalds 同学在上学时,觉得学校给用的 Unix 衍生操作系统 Minix 太难用了,于是就模仿 Unix 写了自己的操作系统 Linux,并且公开了 Linux 的源代码,允许所有程序员对 Linux 进行修改和完善,成功大火,所以其实可以说,Linux 是 Unix 的一个衍生系统(功能基本相同,但是系统开源)。而因为 Linux 因为借用了很多 GNU 的组件,所以现在 Linux 一般特指 内核层,整个系统则被称为 GNU/Linux。

  • 根据国际公约,南极洲属于全人类的资产,任何国家都不能宣誓主权,于是 Linus 使用南极的特产——小企鹅,作为了 Linux 的 Logo,象征着 Linux 的开源精神。

Linux 的组成

  • 内核层 :内核层是操作系统的核心,是直接依附在计算机的硬件系统上面,负责对计算机硬件资源和软件资源的调用。通过高效有序的控制,来最大化的发挥出来硬件的能力,为用户提供一个安全,可靠,高效的应用环境。
  • Shell(壳)层 : 壳是用来区别核的,而着个 shell 的目的就是链接用户和 Core 核,因此这个 shell 也叫 命令解释器,用来接受用户的命令,然后解释给计算机执行,shell 分为图形界面和命令行界面。
  • 应用层 :应用层用来提供一个图形环境,用来支持操作系统中的各种应用,但是 Linux 不需要安装 GUI 就可以提供完整的功能。

文件系统

在 Linux 中,一切皆文件。

Linux 的分区

Linux 默认是进入根目录 / 所在的分区进行操作的。所以无论是物理扩展硬盘,还是对硬盘进行分区,都只能通过根目录 / 进行访问的。所以这些新的分区,都需要在根目录下面找一个 挂载点,也就是文件夹,作为访问分区的入口。

比如我们新分区一个 100G 的空间,使用了不同的文件系统格式。那么我们怎么访问这 100G 的空间呢,答案就是在根目录下给它找一个文件夹作为挂载点,挂载到主分区上面,这样就可以通过根目录下面的文件夹去访问新分区里面的数据了。

如图:

351.jpg

根目录在 sda2 逻辑分区中,启动操作系统则会进入 sda2 分区的 根目录 / 下面,而其它的分区则挂载到根目录下面的文件夹下面。

再来个例子:Linux 挂载详解

安装 Linux

Linux 系统安装必要的分区:

  1. 根目录分区:启动访问的目录,挂载到 /

  2. 引导分区:系统启动所需,需要挂载到 /boot 下面。文件系统格式可以采用 ext4 或者 xfs

  3. 交换分区:类似于 Win 的虚拟内存,不需要通过根目录访问,所以挂载到 swap 下面,和 / 级别平行。文件系统格式为 swap 格式。

352.jpg

根目录文件结构

  • /bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令的二进制可执行文件。是 /usr/bin 下面的一个链接。

  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev:dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。比如 cpu disk core input output 等等。

  • /etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录,比如我们配置 Redis 加入系统服务就是增加了配置文件 /etc/systemd/system/redis.service

  • /home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。Root 用户自己的目录在 /root 里面。一般用来放专属于某个用户的数据,比如

  • /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库,是 /usr/lib 的链接。

  • /lib64:和 lib 是一样的,不同的是里面是 64位 共享库,是 /usr/lib64 的链接。

  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些关机丢失的文件。

  • /media:linux 系统会自动识别一些媒体设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下,从这个目录下面去访问。

  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,可以将外部设备挂载到 /mnt/ 上面,是一个可自己修改的 /media

  • /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如 MySQL Redis 等等,默认是空的。

  • /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。用来放 Root 用户的资料的。

  • /sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员才能够调用的超级命令,和 /bin 一样,是 usr 文件夹下面的链接。

  • /srv:service 所以,该目录存放一些系统服务启动所需要的数据。

  • /sys:system,系统内核信息的文件夹。安装了新出现的一个文件系统 sys、fs。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。可以设置为下载目录。

  • /usr:usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。除了安装应用程序之外,还有其他的共享资源,比如:/usr/bin/usr/sbin/usr/src(内核源代码)。

  • /var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着、会变化的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

文件编辑

vim 编辑器

有三种模式,一般模式,编辑模式,指令模式。

一般模式:一进来就处于的模式,用于整体的操作文本。比如复制粘贴剪贴删除:段、行、词。和光标再文本中的移动。

编辑模式:按 i 进入编辑模式,可以输入内容。按 ESC 退出。

指令模式:按 : / 任意一个进入命令模式,后面跟着对应命令,回车执行。按 ESC 退出。

一般模式

语法 功能
Ctrl f Front 向下翻一页
Ctrl b Back 向回翻一页
G 光标移动到最后一行
gg 光标移动到第一行
p 在光标处粘贴
u 撤销
Ctrl r 取消撤销

编辑模式

使用 i insert 进入编辑模式。然后直接输入内容即可。使用 ESC 退出编辑模式。

指令模式

使用 : / 进入命令模式,不同命令可以组合使用。

语法 功能
:! 强制执行命令
:w write 保存内容到硬盘上
:q quit 退出 vim
:w [filename] 另存为 filename
:r [filename] 读取外部 file 并写入到当前光标后
/[Regex] 按照正则表达式匹配文本内容,n 下一个 N 上一个
:set nu 开启行号
:noh No High 取消高亮

Linux 命令

bash or shell

上面说了 shell 是壳,而 shell 有很多实现,在 Unix 中叫做 Bourre Shell。而 Linux 中重写了 Unix 的 shell,所以叫做 Bourre Again Shell,取首字母变为了 Bash,特指 Linux 的 shell。

所有的 bash 命令都是 sh->bash 应用程序负责的。你甚至可以嵌套调用 bash,不过需要 exit 好几次才能退出来就是了。

内嵌命令

一部分基础功能的系统命令是直接内嵌在 shell 中的,系统加载启动之后会随着 shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in)命令”,比如 cd、history、exit。

而其他的命令,则是在 /usr/bin/ 目录下面的应用程序了。比如 cat touch vim 等。

POSIX 命令

POSIX 指的是 Portable Operating System Interface of UNIX,可移植 Unix 操作系统接口。是为了应用程序在各个类 Unix 系统上都能运行的一套标准,这套标准也规定了一些都必须有的 shell 命令,比如 cd 这些基础命令,它们也被成为 POSIX 命令。

帮助

内嵌命令使用 help xxx 查看,其他命令使用 man xxx 查看。

常用系统工作命令

  1. date 显示当前的时间。
  2. reboot 重启计算机。
  3. poweroff 关闭系统关闭电源
  4. halt 只关闭系统不关电源。
  5. shutdown 有条件的关闭系统关闭电源
  6. ps 用来查看系统中的进程状态。
  7. top 强化版本的任务管理器。
  8. pidof 后面加某一进程的名称,然后返回这一进程的 PID 值。
  9. kill 后面加后一进程的 PID 值,用来杀掉该进程。
    • killall 后面加某一应用的名称,会杀掉所有该应用的进程。
  10. echo 后面加想要输出的内容,可以是变量,可以是字符串。

系统状态检测命令

  1. ifconfig 可以获取网卡配置和网络状态信息,inet 后面是 IP 地址,ether 后面是 MAC 地址。
  2. uname -a 可以查看当前系统的系统内核和版本什么的信息。
  3. free -h 用来显示当前主机的内存使用的相关信息。
  4. who 用来查看当前使用这台计算机的用户信息。
  5. last 用来查看最近的所用用户登录记录(这是个可修改的文档)
  6. history 可以展示你最近执行的进 1000 条命令。
    • history -c 删除最近执行的命令记录。

打包压缩与搜索命令

  1. grep string/expression file 用来对文件的内容进行搜索,非常强大,可以是需要匹配的字符串string或者正则表达式expression,file则是需要匹配的文件或者文件夹!

    • -c 显示找到的行数,也就是一共有多少行成功匹配到了关键字符串。
    • -i 匹配时忽略大小写。
    • -n 显示行号。
    • -v 反向选择。
  2. find 用来查找文件,如果不加任何参数的话,回将当前目录下所有能找到的文件全部列出来。

    • -name匹配名称。
    • -perm 匹配权限。
    • -user 匹配所有者。
    • -group 匹配所有组。
    • -mtime -n +n 匹配修改内容的时间,-n 表示在 n 天以内,+n 表示 n 天以前。
    • -atime -n +n 匹配访问内容的时间,-n 表示在 n 天以内,+n 表示 n 天以前。
    • -ctime -n +n 匹配修改文件的权限的时间,-n 表示在 n 天以内,+n 表示 n 天以前。
    • -type b/d/c/p/l/f 匹配文件类型(后面的字幕参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
    • -size 匹配文件大小(+50kb 表示文件大于,- 表示小于)

路径相关

绝对路径使用 / 开头,表示根目录,而相对路径不用任何字符开头。

其中 ./ 表示当前目录,而 ../ 表示上一级目录。

使用 pwd (print work directory) 命令可以现实当前所在目录的绝对路径。

链接

连接,将一个表面文件和另外一个目标文件关联,点击表面文件打开目标文件。

硬链接:在当前目录下面添加一个目标文件的目录项(索引),从始至终只有一个文件:目标文件。

软连接:真的建立了一个文件(又有文件节点),将自己文件路径名链接到了目标文件。