Linux基础知识

在后端开发过程之中需要知道的 Linux 基础知识

Posted by Haiming on September 27, 2019

要做一个合格的后端开发,只会一点 Java 是远远不够的。Linux 作为一种历史”长远“的操作系统,若想将每个细节都说清楚属实太难,本篇文章之中,将一些基础的 Linux 概念和使用方法进行一定的梳理,感谢下面的参考资料: 后端程序员必备的Linux基础知识

1. 从认识操作系统开始

……这里就不多讲了,再多讲就像科普了……

1.1 操作系统简介

下面是作者的四点操作系统介绍:

  1. 操作系统(Operation System) 的定义:是管理计算机硬件和软件资源的程序,是计算机系统的内核和基石
  2. 操作系统的本质是运行在计算机上的软件程序
  3. 操作系统为用户提供一个和系统交互的操作界面(并不是GUI才算操作界面,命令行也是)
  4. 操作系统分为 内核外壳, 我们可以把 外壳 理解成围绕着 内核 的应用程序,而 内核 就是能操作 硬件 的程序。

æ“ä½œç³»ç»Ÿåˆ†å†…æ ¸ä¸Žå¤–å£³

1.2 操作系统简单分类

  1. Windows
  2. Unix:最早的 多用户,多任务操作系统。按照操作系统的分类,属于 分时操作系统。 其在 创建互联网,计算机网络或者 Client/Server 模型方面发挥着重要作用。
  3. Linux:Linux 是一套免费使用和自由传播的类 Unix 操作系统。 Linux 存在着许多不同的 Linux 版本,但是都使用了 Linux 内核。严格意义来说,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

2. 初探 Linux

2.1 Linux 简介

  • 类 Unix 系统: Linux 是一种自由,开放源码的,类似于 Unix 的操作系统
  • Linux 内核: 严格而言, Linux 这个词只表示 Linux 内核。

2.2 Linux 的分类

Linux 根据原生程度,分为两种:

  1. 内核版本:Linux 严格意义而言,不是一个操作系统,只是一个操作系统之中的内核。

    内核建立了计算机软件和硬件之间通讯的平台,内核提供系统服务,比如文件管理,虚拟内存,设备 I/O 等等。

  2. 发行版本: Linux 发行版本有很多种:

    Linux发行版本

3. Linux 文件系统概览

3.1 Linux 文件系统简介

下面是一个基本概念:

在 Linux 操作系统之中,所有被 操作系统 管理的资源,例如网卡,磁盘驱动器,打印机, I/O 设备,普通文件,或者目录,都被看作是一个文件。

也就是说,在 Linux 之中有一个重要的概念: 一切都是文件。

这个概念是从 UNIX 之中得来,因为 Linux 是重写 UNIX, 所以这个概念也就传承了下来。在 UNIX 之中,把一切资源都看作文件,包括硬件设备,通常称为设备文件。这样用户就可以使用读写文件的方式实现对硬件的访问。

3.2 文件类型和目录结构

Linux 支持5种文件类型:

文件类型

下面是一点个人的理解:

  • 普通文件:就是普通文件,和我们一般意义上面的普通文件并没有什么不同。
  • 目录文件: 用于表示和管理系统之中的文件目录,相当于文件夹
  • 链接文件:链接有软链接和硬链接两种,在之前的项目之中有使用过。例如 Angular 的 node_modules 需要很长时间来下载或者从一处复制到另一处,可以直接创建一个 soft link,链接到这里,那么就可以直接连接到这个文件。
  • 设备文件: 用来访问硬件设备,包括各种外设等等。
  • 命名管道(FIFO): 在我之前的后端面试之中的部分知识点梳理 之中提到过,是一种特殊类型的文件,进程之间的通信可以通过该系统完成。

Linux 的目录结构如下:

Linux 的文件系统层次鲜明,像一颗倒立的树。最顶层是 root目录。

Linux的目录结构

下面是目录说明:

  • /bin: 存放 二进制可执行文件(ls,cat,mkdir 等等),常用的命令一般在这里。
  • /boot: 存放用于 系统引导 时候使用的各种文件
  • /dev: 用于存放 设备文件
  • /etc: 存放系统管理和配置文件
    • /fstab:这个文件包含了电脑上面的存储设备,和文件系统的信息。其是决定一个硬盘被怎样使用,或者如何被整合到整个系统之中的文件。
  • /home: 存放所有用户文件的根目录,是用户主目录的基点。比如用户 user 的主目录就是 /home/user, 可以用 ~user 表示。
  • /lib: 存放着和系统运行相关的库文件。
  • /lost+found: 平时这个目录是空的,系统非正常关机而留下的文件就会放在这里。有点像临时文件存放库
  • /mnt: 系统管理员安装 临时文件系统 的安装点。系统提供这个目录,是让用户临时挂在其他的文件系统。通常来说,挂载 光驱,USB 设备的目录。在加载之后会在这个文件夹之中多出相应设备的目录。
  • /opt: 额外安装的可选应用程序包就放在这里,一般情况下,可以将类似于 tomcat 的程序都安装在这里。
  • /proc: 虚拟文件系统目录,是系统内存的映射。可以直接访问这个目录来获得系统信息。这个系统可以在运行时候访问内核的内部数据结构,改变内核的设置机制。proc 文件系统是一个 伪文件系统, 只存在内存之中,不占用外存空间。
  • /root: 超级用户(系统管理员)的主目录。可以看到和我们上面提到过的不同,系统管理员的目录不在 /home 之中,而是独立出来。
  • /sbin: 存放 二进制可执行文件 ,但是和前面的 /bin 不同,这个里面存放的文件只有 root 才能访问。这里存放的是 系统管理员 使用的系统级别的管理命令和程序,如 ipconfig 等等。
  • /tmp: 用于存放各种临时文件,是公用的 临时文件存储点
  • /usr: 用于存放系统应用程序。曾经的 /usr 之中还是用户文件的目录,但是现在已经被 /home 取代,所以现在的 /usr 只专门用来存放各种数据和程序。
  • /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比如各种服务的日志文件等等。

4. Linux 基础命令

下面只是一些常用命令,命令大全很多网站都有,这里随便放一个作者推荐的:

Linux命令大全:http://man.linuxde.net/

4.1 目录切换命令

  • cd usr :切换到该目录下面的 usr 目录。
  • cd .. : 切换到上一层目录
  • cd / : 切换到系统根目录
  • cd ~: 切换到用户主目录。
  • cd - :切换到上一个操作所在目录

4.2 目录的操作命令(增删改查)

  1. mkdir 目录名称 :增加目录

  2. ls 或者 ll(llls -l 的别名,可以查看该目录下面所有文件和目录的详细信息):查看目录信息

  3. find 目录 参数: 寻找目录

    示例:

    • 列出当前目录和子目录下面的所有文件和文件夹:find .
    • /home 目录下查找以 .txt 结尾的文件名:find /home -name "*.txt"
    • 作用和上面一样,但是是忽略大小写的查找:find /home -iname "*.txt"
    • 当前目录以及子目录下面查找所有以 .txt.pdf 结尾的文件:find . \( -name "*.txt" -o -name "*.pdf" \) 或者 find . -name "*.txt" -o -name "*.pdf"
  4. mv 目录名称 新目录名称: 修改目录的名称

    注意:mv 的语法不仅可以对目录进行重命名,也可以对各种文件, 压缩包等等进行重命名的操作。mv 命令用来对文件或者目录进行重新命名,或者将文件从一个目录转移到另外一个目录之中。

  5. mv 目录名称 目录的新位置: 移动目录的位置:剪切

    注意:mv 语法不仅可以对目录进行剪切操作,对文件或者压缩包等等也都可以进行剪切操作。

  6. cp -r 目录名称 目录拷贝的目标位置: 拷贝目录,-r 代表递归拷贝。

    注意:cp 命令不仅仅可以拷贝目录,还可以拷贝文件,压缩包等等。拷贝文件和压缩包的时候不需要 -r 进行递归。

  7. rm [-rf] 目录: 删除目录

    注意:rm 不仅可以删除目录,还可以删除其他文件或者压缩包。

4.3 文件的操作命令(增删改查)

  1. touch 文件名称 :文件的创建

  2. cat/more/less tail 文件名称: 文件的查看

    1. cat : 查看显示文件内容

    2. more:可以显示百分比,回车键向下一行,空格键向下一页。 Q 退出查看

    3. less:可以用键盘的 PgUpPgDn 向上和向下进行翻页,Q 退出查看。

    4. tail-10 : 查看文件的后 10 行,Ctrl+C 结束。

      注意:til -f 文件 可以对某个文件进行动态监控,例如 tomcat 的日志文件,随着程序的运行,日志会变化,就可以使用这个命令监控文件的变化。

4.4 压缩文件的操作命令

  1. 打包并压缩文件:

    Linux 之中的打包文件一般是以 .tar 结尾的,压缩的命令一般是以 .gz 结尾的。

    而一般情况下,打包和压缩是一起进行的,打包并且压缩之后的文件后缀名一般是 .tar.gz

    命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件

    下面是各种字母的意义:

    z: 调用 gzip 压缩命令进行压缩

    c: 打包文件

    v: 显示运行过程

    f: 指定文件名

  2. 解压压缩包

    命令: tar [-xvf] 压缩文件

    其中:x:代表解压

5. Linux的权限命令

操作系统之中,每个文件都拥有特定的 权限所属用户所属组

权限,是操作系统用来限制资源访问的机制,在 Linux 之中,权限一般分为读(readable),写(writable) 和 执行(excutable)。

分为三组,分别对应文件的 owner, group其他用户(other)。可以通过 ls -l 来查看某个目录下面的文件,或者目录的权限。

下面是示例:

img

第一列的内容信息解释如下:

img

文件的类型:

  • d: 代表目录
  • -: 代表文件
  • l:代表软连接(类似于快捷方式)

Linux 之中权限也分为下面几种:

  • r: 代表权限是刻度,r 也可以用数字 4 表示。
  • w: 代表权限是可写,w 也可以用数字 2 表示
  • x: 代表权限是可执行,x 也可以用数字 1 表示

文件和目录权限的区别:

对于文件和目录而言,读,写,执行代表不同的意义。

对于文件:

权限名称 可执行操作
r 可以使用cat查看文件的内容
w 可以修改文件的内容
x 可以将其运行为二进制文件

对于目录:

权限名称 可执行操作
r 可以查看目录下列表
w 可以创建和删除目录下文件
x 可以使用cd进入目录

需要注意的是,超级用户 可以无视普通用户的权限,即使文件目录权限是 000, 以及可以访问。在 linux 之中的每个用户必须属于一个组,不能独立于组外。 在 Linux 之中每个文件有 所有者所在组其他组的概念。

  • 所有者

    文件的创建者。可以用 chown 用户名 文件名 来修改文件的所有者

  • 文件所在组

    当某个用户创建了一个文件之后,这个文件的所在组就是用户所在的组。 可以用 chgrp 组名 文件名 来修改文件所在的组

  • 其他组

    除了文件的所有者和所在组的用户之外,系统的其他用户都是文件的其他组

下面是如何修改文件/目录的权限:

修改文件/目录权限的命令:chmod

示例:

修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限, 其他用户只有读的权限

chmod u=rwx,g=rw,o=r aaa.txt

img

上述示例还可以使用数字表示:

chmod 764 aaa.txt

补充一个比较常用的东西:

假如我们装了一个zookeeper,我们每次开机到要求其自动启动该怎么办?

  1. 新建一个脚本zookeeper
  2. 为新建的脚本zookeeper添加可执行权限,命令是:chmod +x zookeeper
  3. 把zookeeper这个脚本添加到开机启动项里面,命令是: chkconfig --add zookeeper
  4. 如果想看看是否添加成功,命令是:chkconfig --list

6. Linux 用户与用户组管理

6.1 Linux 用户管理

Linux 是一个 多用户多任务 的 分时操作系统。任何一个要使用系统资源的用户,都必须先向系统管理员申请一个账号。

用户的账号一方面可以给系统管理员做用户使用情况跟踪,并控制其对于资源的访问,另一个方面也可以帮助用户组织文件,并且为用户提供安全性保护。

Linux 用户管理相关命令:

  • useradd 选项 用户名: 添加用户账号
  • userdel 选项 用户名: 删除用户账号
  • usermod 选项 用户名: 修改账号
  • passwd 用户名:更改或者创建用户的密码
  • passwd -S 用户名:显示用户账号密码信息
  • passwd -d 用户名: 清除用户密码

useradd 命令适用于 Linux 之中创建新的系统用户,useradd 可以用来建立用户账号。账号建立好之后,再用 passwd 设定账号的密码,或者使用 userdel 删除账号。

使用 useradd 建立的账号,保存在 /etc/passwd 文本文件之中。

passwd 命令适用于设置用户的认证信息,包括 用户密码密码过期时间 等等。 系统管理者则可以用它管理系统用户的密码。

只有管理者可以指定用户名称,一般用户只能变更自己的密码。

6.2 Linux 系统用户组管理

每个用户都有一个用户组,可以对一个用户组之中的所有用户进行集中管理。

用户组的管理涉及用户组的 添加删除修改 。 组的增加,删除和修改,实际上就是对 /etc/group 文件的更新。

Linux 系统用户组的管理相关命令

  • groupadd 选项 用户组: 增加一个新的用户组
  • groupdel 用户组: 要删除一个已有的用户组
  • groupmod 选项 用户组: 修改用户组的属性

7. 其他常用命令:

  • pwd :显示当前位置

  • grep 要搜索的字符串 要搜索的文件 --color: 搜索命令,–color 代表高亮显示

  • ps -ef / ps -aux :这两个命令都是查看当前系统之中正在运行的进程,两者的区别是展示格式不同。

    • 想查看特定进程可以使用这种格式:ps aux|grep redis(查看包括”redis” 字符串的进程)

    如果直接使用 ps(process status) 命令,会显示所有进程的状态,通常结合 grep 命令查看某个进程的状态。

  • kill -9 进程的pid: 杀死进程(-9代表强制终止)

  • 网络通信命令:

    • 查看当前系统的网卡信息:ifconfig

    • 查看当前系统的端口使用:netstat -an