Linux 系统操作指北

前言

  Linux 操作系统是全球使用最广泛的服务器操作系统,本文将介绍Linux 操作系统,学习Linux操作常用命令。本文是对Linux 系统长期使用和学习的积累,分享给需要的朋友。

Linux

​ 1991年芬兰赫尔辛基大学的 Linus Torvalds 开发了 Linux 操作系统(当时22岁)。

Linus Torvalds

Linux之父:Linus Torvalds

Linux 标志

Linux 的标志是一只小企鹅,由 Linus Torvalds 设计。

发行版

Linux 发行版有很多种,几个主流的Linux 发行版如下:

更多发行版请在 https://mirrors.kernel.org 网址查看。另外,Android 也是基于Linux 内核开发的开源操作系统,主要用于移动设备。

# 查看Linux 发行版的几种方式:
cat /etc/issue
cat /proc/version
lsb_release -a
cat /etc/os-release   # 通常查看容器

内核

Linux 发行版有很多种,但他们都使用相同的内核(版本不同),Linux内核官网:kernel.org

CentOS

​ CentOS 是 Community Enterprise Operating System的缩写,意为社区企业操作系统。旨在与RHEL(Red Hat Enterprise Linux)在功能上兼容。目前已不再提供支持!

Alpine

​ Alpine Linux 是一个基于 musl libc 和 busybox 的面向安全的轻量级 Linux 发行版。官方的描述是:小、简单、安全

本文基于CentOS 7.x 进行研究和学习

Fedora

​ Fedora Linux 发行版由Fedora项目社群开发、红帽公司赞助,目标是创建一套新颖、多功能并且自由(开放源代码)的操作系统。Fedora是商业化的Red Hat Enterprise Linux发行版的上游源码(不太稳定)。

​ Fedora对于用户而言,是一套功能完备、更新快速的免费操作系统;而对赞助者Red Hat公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到Red Hat Enterprise Linux中。Fedora大约每六个月发布新版本。

常用热键与帮助

man 操作手册

​ 几乎所有软件在发布时都会将操作手册(manual)一起发布,使用 man 命令可以查看命令的操作手册,

# 查看 java 命令的操作手册
man	java

help 寻求帮助

​ 绝大多数的命令都可以使用 --help 选项查看帮助文档,当你忘记命令的相关选项时,使用 help 选项可以快速查看和确认。当你想查看该命令的详细介绍时,使用 man 命令打开操作说明。

tab键 快速联想

Tab键 可以快速补齐,枚举出相关的内容。

whereis 查看命令位置

whereis 用于查看命令的二进制文件,源文件和操作手册文件的位置。

常用选项

# 只查看命令的二进制文件的位置
-b
# 只查看命令的源文件的位置
-s
# 只查看命令的操作手册文件的位置
-m

示例:

# 查看命令的二进制文件,源文件和操作手册文件的位置
[root@iz2ze98 ~]# whereis java
java: /usr/bin/java /usr/java/jdk1.8.0_131/bin/java /usr/share/man/man1/java.1
[root@iz2ze98 ~]# whereis -b java
java: /usr/bin/java /usr/java/jdk1.8.0_131/bin/java
[root@iz2ze98 ~]# whereis -m java
java: /usr/share/man/man1/java.1

which 用于查看命令的可执行文件的完整路径

# 查看命令的可执行文件的完整路径
[root@iz2ze98 ~]# which java
/usr/java/jdk1.8.0_131/bin/java

命令总览

命令 描述
cd 切换目录
ls / ll 查看当前目录的文件列表
pwd 查看当前目录的绝对路径
chmod 修改文件基本权限
chown 修改文件所属用户
chgrp 修改文件所属用户组
su
sudo
find 查找文件
grep
gzip 解压缩文件
gunzip 解压文件
zip 压缩文件
unzip 解压文件
tar 打包/压缩文件
top 查看系统硬件运行状态
free 查看内存使用情况

注:

​ Linux 命令的选项普遍有一个特点,单横杠 - 表示缩写,双横杠 – 表示全拼,如 -h 等价于 –help, -l 等价于 –list,- a 等价于 –all 等;但单横杠的缩写选项只能代替一部分双横杠的全拼选项,稍微复杂或指定参数值的选项还是得用全拼形式。

命令 描述
alias 设置系统别名
unalias 取消系统别名
date 查看或设置系统时间
history 查看命令历史记录(默认显示最近1000个)
time 计算命令执行时间
nc 功能强大的网络工具
export 设置或者显示环境变量。
unset 删除变量或函数
type 判断一个命令是否为内置命令
ps 显示进程的快照
nohup 忽略挂起信号执行命令
sync 将内存缓冲区的数据写入磁盘
swapon 启用交换分区
swapoff 禁用交换分区
mount 挂载文件系统
umount 卸载文件系统
mail 发送或接收邮件

文件权限与目录

目录结构

​ Linux操作系统的目录结构是按照一定的层次组织的,各个目录有不同的用途和存储内容。以下是常见的Linux目录结构及其存储内容的示例:

FHS 标准

FHS (Filesystem Hierarchy Standard 文件系统层次结构标准)的主要目的是规范一套人们都去遵循的标准,让用户了解到已安装的软件通常放置在哪些目录下。FHS 标准希望独立于软件开发商、操作系统开发者和维护者,希望大家都能够遵循一套标准规范。FHS 一直在持续改版,就像Java开发手册一样,一直在改版和完善。

系统目录说明

目录 描述
/ 系统根目录
/root 超级用户 root的主目录
/home 用户的主目录,每个用户在此目录下有一个独立的子目录。
/etc 存放系统管理和配置文件,如网络配置、用户配置、服务配置等。
/usr 存放系统应用程序
/opt 额外安装的可选应用程序存放在这里,如 Tomcat
/proc 虚拟文件系统目录,是系统内存的映射,可直接访问这个目录来获取系统信息
/dev 存放设备文件,用于访问计算机硬件设备。device
/bin 存放二进制可执行文件
/sbin 存放系统管理员使用的系统管理命令。
/srv 存放服务相关的数据。
/lib 存放系统运行的库文件
/var 存放运行时需要改变的数据的文件,比如日志文件等
/tmp 临时文件存放点
/mnt 挂载其他文件系统的目录
/lost+found 这个目录平时是空的, 系统非正常关机而遗留的文件存放在这里
/boot 包含启动Linux系统所需的内核文件和引导加载程序。非常重要

目录基本操作

使用 cd 命令切换目录:

# 切换到指定目录
cd /usr
# 切换到上级目录
cd ..
# 切换到上一次操作目录
cd -
# 切换到系统根目录
cd /
# 切换用户主目录 (root用户就会切换到/root)
cd
cd ~

注:

​ 切换到指定目录,目录位置可以是绝对路径,也可以是相对路径。使用相对路径时,. 表示当前目录,.. 表示上级目录。使用绝对路径时,第一个字符肯定是 / ,如 /root,/usr/lib。

. 开头的文件属于隐藏文件,使用 ll -a 才能看到。

# 创建文件夹
mkdir dir_name
# 删除
rm -rf
# 查找
find 

树形查看目录

使用 tree 命令查看目录结构。-L 选项控制查看层级。

[root@iZ2aaZ education]# pwd
/root/education
[root@iZ2aaZ education]# tree . -L 3
.
├── Dockerfile
├── jdk-11.0.18_linux-x64_bin.tar.gz
├── manage
│   ├── backend
│   │   ├── config
│   │   └── online-education-manage-service-1.0.0-SNAPSHOT.jar
│   └── frontend
│       ├── deploy
│       └── dist.zip
└── study
    ├── backend
    │   ├── config
    │   ├── Dockerfile
    │   ├── online-education-learn-service-1.0.0.jar
    │   ├── re-build.sh
    │   └── startup.sh
    ├── compose.yaml
    ├── dist.zip
    └── frontend
        ├── deploy
        ├── dist
        └── Dockerfile

11 directories, 11 files

文件基本权限

Linux 中的每个文件都有属性和权限,文件的基本属性和权限用10个字符表示。

文件类型

使用 ls -lll 可以查看文件的属性和权限,第一个字符表示文件的类型

[root@HAYA-CS ~]# ll
total 2883188
-rw-------. 1 root root       2278 Jul  9  2019 anaconda-ks.cfg
drwxr-xr-x. 2 root root          6 Oct 22  2019 Desktop
-rw-r--r--. 1 root root       2326 Jul 10  2019 initial-setup-ks.cfg

Linux中的文件类型有很多,常见的有如下几种:

文件类型 描述
- 普通文件
d 目录
l 链接文件
b 块设备文件
s 套接字文件, 用于进程间的网络通信
p 管道文件, 用于进程间的通信

文件权限

​ Linux文件的基本权限有9个,分别是所属用户(owner)、所属群组(group)、其他人(other)三种身份各自的读(read)、写(write)、执行(excute)权限。

​ 通过 ll 命令可以查看文件的权限。

[root@HAYA-CS wyc]# ll

drwxr-xr-x 6 root root      134 Sep 12 16:19 apache-zookeeper-3.5.7-bin
-rw-r--r-- 1 root root 29624320 May  6 21:36 apache-zookeeper-3.5.7-bin.tar
-rwxr--r-x 1 root root  2488320 Sep 12 22:11 connections.ncx

# 查看当前目录的文件列表
ls
ll
ll -a
# 修改文件权限
chmod 

chmod 有两种使用方式,一种是字符设置方式,一种是数字设置方式;

字符设置方式:

u	# 所属用户
g	# 所属用户组
o	# 其他人

r	# 读
w	# 写
x	# 执行

示例:

# 所属用户加上执行权限
chmod u+x connections.ncx
# 所属用户组、其他人减去写和执行权限
chmod go-wx connections.ncx
# 给三种身份都加上执行权限
chmod +x connections.ncx

数字设置方式:

文件各权限的数字对照表如下:

r:4
w:2
x:1

示例:

owner = rwx = 4+2+1 = 7
group = rx- = 4+2+0 = 6
other = --- = 0+0+0 = 0

# 修改文件权限 rwxrx----
chmod 760 file
# 修改文件权限 rw-r--r--
chmod 644 file

小结:

​ 可以看出,字符设置方式更适合微调权限,而数字设置方式适合重新设置权限。

使用 chown 和 chgrp 命令修改文件的拥有者和用户组。

# 修改文件拥有者 (-R表示递归修改)
chown [-R] owner_name file_name
# 修改文件用户组
chgrp [-R] group_name file_name

文件

查看文件属性

用法:

ls [OPTION]... [FILE]...

常用选项:

-l	# 以长列表的形式展示更多详细内容
-h	# 文件大小以更友好的方式显示 (K M G单位,而不是字节)
-a	# 显示全部文件,包括隐藏文件

-t	# 按修改时间降序方式排序,最新的文件排在前面
-S 	# 按文件大小降序方式排序,最大的文件排在前面
-r	# 相反方式排序 (-tr表示修改时间升序显示, -Sr表示文件大小升序显示)

注:

​ 因为 ls -l 命令会频繁使用,所以系统默认使用 alias 别名为 ll ,方便使用。

软链接和硬链接

# 创建一个指向文件/目录的软链接
ln -s file1 lnk1
# 创建一个指向文件/目录的硬链接
ln file1 lnk1

什么是软链接和硬链接呢?

硬链接的inode 值与原文件相同, 而软链接的inode 值与原文件不相同.

如果源文件删除或失效,那么软链接也失效; 软链接可以理解为 Windows 里的快捷方式;

查看文件内容

查看文件内容的命令有很多,常用的有如下三组:

  • headtail
  • cattac
  • lessmore

每组功能都是相对的,

# 正向查看文件的全部内容
cat file
# 查看文件的前10行
head -10 file
# 查看文件的最后10行
tail -10 file
# 分页查看文件内容(支持来回翻动,常用)
less file
# 分页查看文件内容(只能往下翻页)
more file

注:

cat :一次性展示文件的全部内容,适合文本内容少的情况使用;

less:man 用户手册命令就是调用 less 来显示用户操作手册的.

# 查看文件的最后10行
tail -10 file
# 以追加的方式打开文件 (打开期间文件有任何变化都会直接显示出来,常用于查看服务的日志文件)
tail -f file

查找文件

find 和 grep 命令用于查找文件

选项:

-name	# 指定文件名
*		# 通配符:匹配任意字符
?		# 通配符:匹配一个字符
-i   	# 不区分大小写

-user 	# 指定所有者查找
-nouser	# 排除所有者
-mtime	# 指定修改文件内容时间
-ctime	# 指定修改文件属性时间
-atime 	# 指定文件访问时间

-size	# 指定文件大小

+		# 大于
-		# 小于
-a		# 并且
-o 		# 或

使用

# 
find / -name *java -mtime -10 -size -10k
# 

创建和删除文件

在Linux中,一切皆文件.

# 创建文件
touch jack.conf
# 删除文件
rm jack.conf
# 删除目录及其所含所有内容 -r 表示递归
rm -r ./jack

注:

​ 在线上环境,使用 rm 删除命令需额外小心,如果勿删重要的数据(如数据库文件),后果会非常严重。

复制和移动文件

mv 命令用于移动文件或修改文件名称;

cp 命令用于复制文件:

# 移动文件
mv jack.tar /var
# 修改文件名称
mv jack.tar jackpot.tar
# 复制文件
cp jack.tar /var
# 复制目录下的所有文件到 /var
cp -r ./jack /var
# 
cp -rf ./app/* /var
# 复制到当前目录并重命名
cp -a jack.tar jack2.tar

-f		 #  强制覆盖已经存在的目标文件而不给出提示
-i       #  如果已存在相同文件名,覆盖前提示用户进行确认:    cp 的别名就是 cp -i 
-b       #  如果已存在相同文件名,则覆盖前进行备份(备份的文件名为原文件名加~)
-u       # 比较原文件与目标文件修改时间,如果目标文件较新则不覆盖
-r       # 复制目录下的所有子目录和文件

注: 在命令前加 \ 符号系统就不使用别名运行了.

\cp -rf ./app/* ./app_back/

远程文件拷贝

​ 远程文件拷贝也就是传输文件,如果服务器没有开启ftp服务或共享文件,使用scp 命令可以远程传输文件;

​ scp 是 secure copy 的简写,意为安全拷贝,是一个远程文件拷贝程序,它使用 ssh 进行数据传输,并使用与 ssh 相同的身份验证提供相同的安全性,所以使用 scp 同样会询问用户名密码。

# 复制远程文件到本机
scp -P 9722 root@www.jackpot.com:/home/jackpot/jackpot.tar /home/jackpot
# 复制本机文件到远程
scp -P 9722 /home/jackpot/jackpot.tar root@www.jackpot.com:/home/jackpot/
# 如果传输的文件很大,传输时间长,推荐使用 & 后台任务模式之心,使用 jobs 命令查看任务状态;

注:

​ -P 要大写, 指定的端口为目标主机的ssh 端口号, root@www.jackpot.com 为目标主机的用户名@ip地址, 后面使用冒号紧跟要复制的文件的完整路径, 最后指明文件要复制的本机什么文位置。

-C

​ 使用-C 选项启用压缩,告诉SSH 启用压缩。

# 使用公钥传输(公钥文件的权限不能过大)
chmod 600 beecode_rsa_ssh
# 传输文件
scp -i /root/nr/beecode_rsa_ssh -P 22 root@123.57.57.101:/root/gms/ynwm/backend/app/test.txt /root/nr
# 传输文件夹
scp -r -i /root/nr/beecode_rsa_ssh -P 22 root@123.57.57.101:/root/gms/fb/pro_dist/ /root/fb/frontend

解压缩文件

​ Linux 中压缩文件有多种方式,常用的有 gzipbzipxzzip 是Windows 系统常用的压缩方式,在Linux上也可以使用。下面详细介绍 gzip 和 zip 两种方式。

gzipgunzip 是一对命令,zipunzip 是一对命令,都用于压缩和解压文件;不过 gunzip 可以用 gzip -d 代替,用来解压文件;

gzip 用法:

gzip [option] [command]

常用选项:

	# 无选项表示压缩
-v	# 显示操作详情
-r  # 递归操作,用于压缩整个目录
-1  # 压缩级别为1级,压缩率最低,但速度最快
-9  # 压缩级别为9级,压缩率最高,但速度最慢
-d	# 解压

使用示例:

# 压缩文件,文件名为jack.tar.gz
gzip jack.tar
# 压缩文件时显示详情内容
gzip -v jack.tar
# 解压文件到当前目录,文件名为jack.tar
gzip -dv jack.tar.gz

zip 用法:

zip [option] [command]

常用选项:

	# 无选项表示压缩
-v	# 显示压缩包中的内容,但不解压
-r  # 递归操作,用于压缩整个目录
-1  # 压缩级别为1级,压缩率最低,但速度最快
-9  # 压缩级别为9级,压缩率最高,但速度最慢

使用示例:

# 将多个文件压缩
zip jack.zip aaa bbb
# 压缩文件夹
zip -r jack.zip ./test 
# 选项为1-9的整数表示压缩级别,值越大压缩率越高,速度会变慢
zip -1 aaa.zip aaa 
zip -9 aaa.zip aaa 

# 解压
unzip test.zip
# 查看压缩包中的内容,不解压
unzip -v test.zip
# 解压文件到指定目录下
unzip ./jack.zip -d /var

注:

​ gzip 和 zip 在使用上有一个明显的区别是,gzip 不会保留原文件,产生的压缩包也是自动命名的;而 zip 会保留原文件,产生的压缩包是自己定义的。

bz2 解压缩

bz2 压缩工具的显著特点是免费、无损压缩、高压缩比。

  • 免费
  • 无损压缩
  • 高压缩比(可压缩至原容量的10%-15%)

bzip2 比传统的 gzip 和 zip 压缩率更高,

用法:

bzip2 [OPTION...] [FILE...]

常用选项:

	# 无选项表示直接压缩
-v	# 显示操作详情
-1	# 更快压缩,压缩率低
-9  # 更好压缩,压缩率高,速度变慢
-k	# 保留原文件
-d  # 解压

打包文件

tar 是Linux 下的归档打包工具。

用法:

tar [OPTION...] [FILE...]

常用选项:

-c	# 打包
-f	# 指定要操作的文件
-v  # 显示已处理的文件详情
-z	# 使用gzip压缩文件 (-j使用bzip2压缩;-J使用xz压缩)
-t  # 列出tar包中的内容
-x  # 从tar包中提取文件
-C  # 指定打包输出目录

例子:

# 打包文件
tar -cvf archive.tar foo bar
# 打包并使用gzip压缩文件
tar -zcvf archive.tar foo bar
# 显示tar包中的所有文件
tar -tvf archive.tar
# 从tar包中提取文件到指定目录下
tar -xvf archive.tar -C /var

tar -xzvf 

调用压缩指令

​ tar 本身没有压缩功能,通过选项调用压缩命令进行压缩。

选项 压缩方式 文件命名
-z 使用 gzip 压缩 file.tar.gz
-j 使用 bzip2 压缩 file.tar.bz2
-J 使用 xz 压缩 file.tar.xz

关于文件后缀名

​ Linux 系统与 Windows 一个很重要的区别是,Windows 运行程序时很看重文件的后缀名,而Linux则不一样,在Linux系统中,一切皆文件,而文件取什么后缀名并不影响文件的执行,所以理论上Linux的文件后缀名你可以随便取。但由于规范的文件名更方便维护和使用,所以日常使用中我们还是要命名规范的文件后缀名。

文本处理

sed 命令

sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。

sed [option][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e