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 | 卸载文件系统 |
发送或接收邮件 |
文件权限与目录
目录结构
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 -l
或 ll
可以查看文件的属性和权限,第一个字符表示文件的类型:
[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 里的快捷方式;
查看文件内容
查看文件内容的命令有很多,常用的有如下三组:
head
和tail
cat
和tac
less
和more
每组功能都是相对的,
# 正向查看文件的全部内容
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 中压缩文件有多种方式,常用的有 gzip
、bzip
和 xz
,zip
是Windows 系统常用的压缩方式,在Linux上也可以使用。下面详细介绍 gzip 和 zip 两种方式。
gzip
和 gunzip
是一对命令,zip
和 unzip
是一对命令,都用于压缩和解压文件;不过 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