要做一个合格的后端开发,只会一点 Java 是远远不够的。Linux 作为一种历史”长远“的操作系统,若想将每个细节都说清楚属实太难,本篇文章之中,将一些基础的 Linux 概念和使用方法进行一定的梳理,感谢下面的参考资料: 后端程序员必备的Linux基础知识
1. 从认识操作系统开始
……这里就不多讲了,再多讲就像科普了……
1.1 操作系统简介
下面是作者的四点操作系统介绍:
- 操作系统(Operation System) 的定义:是管理计算机硬件和软件资源的程序,是计算机系统的内核和基石
- 操作系统的本质是运行在计算机上的软件程序
- 操作系统为用户提供一个和系统交互的操作界面(并不是GUI才算操作界面,命令行也是)
- 操作系统分为 内核 和 外壳, 我们可以把 外壳 理解成围绕着 内核 的应用程序,而 内核 就是能操作 硬件 的程序。
1.2 操作系统简单分类
- Windows
- Unix:最早的 多用户,多任务操作系统。按照操作系统的分类,属于 分时操作系统。 其在 创建互联网,计算机网络或者 Client/Server 模型方面发挥着重要作用。
- 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 根据原生程度,分为两种:
-
内核版本:Linux 严格意义而言,不是一个操作系统,只是一个操作系统之中的内核。
内核建立了计算机软件和硬件之间通讯的平台,内核提供系统服务,比如文件管理,虚拟内存,设备 I/O 等等。
-
发行版本: 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
目录。
下面是目录说明:
- /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 目录的操作命令(增删改查)
-
mkdir 目录名称
:增加目录 -
ls
或者ll
(ll
是ls -l
的别名,可以查看该目录下面所有文件和目录的详细信息):查看目录信息 -
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"
- 列出当前目录和子目录下面的所有文件和文件夹:
-
mv 目录名称 新目录名称
: 修改目录的名称注意:mv 的语法不仅可以对目录进行重命名,也可以对各种文件, 压缩包等等进行重命名的操作。mv 命令用来对文件或者目录进行重新命名,或者将文件从一个目录转移到另外一个目录之中。
-
mv 目录名称 目录的新位置
: 移动目录的位置:剪切注意:mv 语法不仅可以对目录进行剪切操作,对文件或者压缩包等等也都可以进行剪切操作。
-
cp -r 目录名称 目录拷贝的目标位置
: 拷贝目录,-r 代表递归拷贝。注意:cp 命令不仅仅可以拷贝目录,还可以拷贝文件,压缩包等等。拷贝文件和压缩包的时候不需要 -r 进行递归。
-
rm [-rf] 目录
: 删除目录注意:rm 不仅可以删除目录,还可以删除其他文件或者压缩包。
4.3 文件的操作命令(增删改查)
-
touch 文件名称
:文件的创建 -
cat/more/less tail 文件名称
: 文件的查看-
cat
: 查看显示文件内容 -
more
:可以显示百分比,回车键向下一行,空格键向下一页。 Q 退出查看 -
less
:可以用键盘的PgUp
和PgDn
向上和向下进行翻页,Q 退出查看。 -
tail-10
: 查看文件的后 10 行,Ctrl+C
结束。注意:
til -f 文件
可以对某个文件进行动态监控,例如 tomcat 的日志文件,随着程序的运行,日志会变化,就可以使用这个命令监控文件的变化。
-
4.4 压缩文件的操作命令
-
打包并压缩文件:
Linux 之中的打包文件一般是以 .tar 结尾的,压缩的命令一般是以 .gz 结尾的。
而一般情况下,打包和压缩是一起进行的,打包并且压缩之后的文件后缀名一般是
.tar.gz
。命令:
tar -zcvf 打包压缩后的文件名 要打包压缩的文件
下面是各种字母的意义:
z: 调用 gzip 压缩命令进行压缩
c: 打包文件
v: 显示运行过程
f: 指定文件名
-
解压压缩包
命令:
tar [-xvf] 压缩文件
其中:x:代表解压
5. Linux的权限命令
操作系统之中,每个文件都拥有特定的 权限, 所属用户 和 所属组。
权限,是操作系统用来限制资源访问的机制,在 Linux 之中,权限一般分为读(readable),写(writable) 和 执行(excutable)。
分为三组,分别对应文件的 owner, group 和 其他用户(other)。可以通过 ls -l
来查看某个目录下面的文件,或者目录的权限。
下面是示例:
第一列的内容信息解释如下:
文件的类型:
- 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
上述示例还可以使用数字表示:
chmod 764 aaa.txt
补充一个比较常用的东西:
假如我们装了一个zookeeper,我们每次开机到要求其自动启动该怎么办?
- 新建一个脚本zookeeper
- 为新建的脚本zookeeper添加可执行权限,命令是:
chmod +x zookeeper
- 把zookeeper这个脚本添加到开机启动项里面,命令是:
chkconfig --add zookeeper
- 如果想看看是否添加成功,命令是:
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
-