感谢狂神的分享:B站视频地址
推荐博客:C语言中文网–Linux简介
为什么要学Linux
linux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了。但在服务器端、在开发领域linux倒是越来越受欢迎。linux在开源社区的地位依然岿然不动。尤其是作为一个后端程序员,是必须要掌握Linux的!
Linux简介
Linux 发行版
推荐文章:常见Linux发行版本
Linux 的发行版说就是:将 Linux 内核与应用软件做一个打包。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等
Linux 应用领域
今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。
环境搭建
环境使用阿里云服务器。如果购买之后设置登录密码、安全组规则,然后通过 xShell工具连接、xFtp 工具传输文件。
开机
关机
关机指令为:shutdown 。不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中:
sync # 将数据由内存同步到硬盘中。
shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 # 这个命令告诉大家,计算机将在10分钟后关机
shutdown –h now # 立马关机
shutdown –h 20:25 # 系统会在今天20:25关机
shutdown –h +10 # 十分钟后关机
shutdown –r now # 系统立马重启
shutdown –r +10 # 系统十分钟后重启
reboot # 就是重启,等同于 shutdown –r now
halt # 关闭系统,等同于shutdown –h now 和 poweroff
系统目录结构
cd
( Change Directory 的缩写),用来切换工作目录
cd 命令的基本格式如下:
[root@localhost ~]# cd [相对路径或绝对路径]
命令 | 作用 |
---|---|
cd [~] | 表示回到自己的主目录。对于 root 用户,其主目录为 /root |
cd ~vbird | 切换到 vbird 这个用户的主目录,亦即 /home/vbird |
cd . . | 返回上级目录 |
cd . | 进入当前目录(目录没有变化,"."代表当前目录) |
cd - | 回到刚刚的那个目录 |
当用户登陆 Linux 系统之后,其当前目录就是它的主目录。也可以使用 Linux 系统的 pwd
命令来显示当前目录的绝对路径。
pwd
(Print Working Directory 的缩写),功能是显示用户当前所处的工作目录。该命令的基本格式为:
[root@localhost ~]# pwd
whoami 命令用于确定当前登陆的用户。可以看到,root 用户当前所在目录是它的主目录 /root。
[root@localhost ~]# whoami
root
[root@localhost ~]# pwd
/root
ls
(list 的缩写)。其主要功能是显示当前目录下的内容。此命令的基本格式为:
[root@localhost ~]# ls [选项] 目录名称
ls 命令常用的选项,以及各自的功能如下:
【注意】当 ls
命令不使用任何选项时,默认只会显示非隐藏文件的名称,并以文件名进行排序,同时会根据文件的具体类型给文件名配色(蓝色显示目录,白色显示一般文件)
mkdir
(make directories 的缩写),用于创建新目录。命令格式为:
[root@localhost ~]# mkdir [-mp] 目录名
-m
:用于手动配置所创建目录的权限,而不再使用默认权限。
-p
:递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo
[root@localhost ~]# mkdir -m 711 test2
[root@localhost ~]# ls -l
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
rmdir
(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为:
[root@localhost ~]# rmdir [-p] 目录名
-p 选项用于递归删除空目录。
【注】命令执行成功与否,取决于要删除目录是否是空目录,因为 rmdir 命令只能删除空目录!
# 递归删除下面的目录,要列出从相对路径到最下级的目录:
[root@localhost ~]# rmdir -p lm/movie/jp/cangls
参考文章:Linux cp命令:复制文件和目录
rm 命令,可以永久性地删除指定的文件或目录。在使用 rm 命令时,系统不会产生任何提示信息。此命令的基本格式为:
[root@localhost ~]# rm[选项] 文件或目录
mv 命令(move 的缩写)。既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。该命令的基本格式如下:
[root@localhost ~]# mv [选项] 源文件 目标文件
变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等。值得一提的是,Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范
。
使用 env 命令,可以查看 Linux 系统中所有的环境变量:
[root@localhost ~]# env
ORBIT_SOCKETDIR=/tmp/orbit-root
HOSTNAME=livecd.centos
GIO_LAUNCHED_DESKTOP_FILE_PID=2065
TERM=xterm
SHELL=/bin/bash
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用 ll
或者 ls -l
命令来显示一个文件的属性以及文件所属的用户和组:
第一个红框中的10个字符,代表了不同的意思:
该文件的硬链接个数
,而目录的引用计数代表该目录有多少个一级子目录
。chgrp(change group 的缩写),用于修改文件(或目录)的所属组,基本格式如下:
[root@localhost ~]# chgrp [-R] 所属组 文件名(目录名)
【注意】-R(大写)用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息。
chown(change owner 的缩写),主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。
Linux 系统中,文件的基本权限由 r、w、x
三个字符组成,分别有对应的数字:
使用数字修改文件权限, chmod
的命令基本格式如下:
-R(注意是大写)选项表示连同子目录中的所有文件,也都修改设定的权限。
[root@localhost ~]# chmod [-R] 权限值 文件名
在 Linux 中,文本处理无非是对文本内容做查看、修改等操作。本章将介绍Linux中常用的文本处理命令,以及被称为 Linux三剑客 的 grep、sed 和 awk
命令。
cat( concatenate — 连接、连续)可以用来显示文本文件的内容(类似于 DOS 下的 type 命令);也可以把几个文件内容附加到另一个文件中,即连接合并文件。基本格式如下:
[root@localhost ~]# cat [选项] 文件名
或者
[root@localhost ~]# cat 文件1 文件2 > 文件3
## 注: > 是覆盖, >> 是追加
more 命令可以分页显示文本文件的内容,此命令的基本格式如下:
[root@localhost ~]# more [选项] 文件名
head 命令可以显示指定文件前若干行的文件内容,其基本格式如下:
[root@localhost ~]# head [选项] 文件名
参考文章:Linux less命令:查看文件内容
使用 more 命令浏览文件内容时,只能不断向后翻看;而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。为了方面用户浏览文本内容,less 命令还提供了以下几个功能:
less 命令的基本格式如下:
[root@localhost ~]# less [选项] 文件名
tail 命令用来查看文件末尾的数据,其基本格式如下:
[root@localhost ~]# tail [选项] 文件名
可以看到,使用 tail -n 3 /etc/passwd
命令和 tail -3 /etc/passwd
的效果是一样的。
参考文章:Linux grep命令详解:查找文件内容
参考文章:Linux sed命令完全攻略(超级详细)
参考文章:Linux awk命令详解
Vim文本编辑器, vi 的升级版。具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器等特点。
yum install vim # 此命令有时需要手动确认一些信息
yum -y install vim # 全自动安装,省略手动确认部分
使用 Vim 编辑文件时,存在 3 种工作模式,分别是 命令模式(Command mode),输入模式 (Insert mode)和 底线命令模式(Last line mode),这 3 种工作模式可随意切换:
命令模式
输入模式
底线命令模式
对于新手来说,经常不知道自己处于什么模式,可以按一次 Esc 键返回命令模式。如果你多按几次 Esc 键后听到"嘀----"的声音,则代表你已经处于命令模式了。
在 Vim 命令模式下键入不同的键,可以进入不同的可视化模式,进行选中文本的操作:
命令 | 作用 |
---|---|
v(小写) | 字符可视化模式 ,选择文本的是以字符为单位的,(要一个个字符的选中要操作的文本) |
V(大写) | 行可视化模式 ,选择文本的选择是以行为单位的,(可以一行一行的选中要操作的文本) |
Ctrl+v(组合键) | 块可视化模式 ,可以选中文本的一个矩形区域作为目标文本: 以按下 Ctrl+v 位置作为矩形的一角,光标移动的终点位置作为它的对角。 |
查找文本
快捷键 | 作用 |
---|---|
/abc | 从光标所在位置向前查找字符串 abc |
?abc | 从光标所在位置,向后查找字符串 abc |
/^abc | 查找以 abc 为行首的行 |
/abc$ | 查找以 abc 为行尾的行 |
n | 向同一方向重复上次的查找指令 |
N | 向相反方向重复上次的查找指令 |
替换&替换
快捷键 | 作用 |
---|---|
r | 替换光标所在位置的字符(替换一个 ) |
R | 从光标所在位置开始替换字符,按“Esc”可以结束(替换多个 ,类似windows的Insert ) |
: s /a1 /a2 /g | 将当前光标所在行的,所有 a1 替换为 a2 |
:n1,n2s/a1/a2/g | 将文件中 n1 到 n2 行中,所有 a1 替换为 a2 |
:g/a1/a2/g | 将文件中,所有 a1 替换为 a2 |
删除文本
快捷键 | 作用 |
---|---|
x | 删除光标所在位置的字符 |
dd | 删除光标所在行 |
ndd | 删除当前行(包括此行)后 n 行文本 |
dG | 删除 光标所在行至文件末尾 的所有内容 |
D | 删除光标位置到行尾的内容 |
:a1,a2d | 删除 a1 行 至 a2 行 的文本内容 |
复制和粘贴文本
快捷键 | 作用 |
---|---|
y | 复制已选中的文本到剪贴板 |
yy | 复制光标所在行板。此命令前加数字 n,可复制多行 |
yw | 复制光标位置的单词 |
p(小写) | 将剪贴板中的内容,粘贴到光标 后 |
P(大写) | 将剪贴板中的内容,粘贴到光标 前 |
保存退出文本
Vim 的保存和退出,是在 底线命令模式
中进行的:
快捷键 | 作用 |
---|---|
:wq | 保存并退出 Vim 编辑器 |
:wq! | 保存并 强制 退出 Vim 编辑器 |
:q | 不保存就退出 Vim 编辑器 |
:q! | 不保存,且强制退出 Vim 编辑器 |
:w | 保存但不退出 Vim 编辑器 |
:w! | 强制保存文本 |
:w filename | 另存到 filename 文件 |
x! | 保存文本并退出 Vim 编辑器(更通用的一个 vim 命令) |
ZZ | 直接退出 Vim 编辑器 |
光标以单词为单位移动
快捷键 | 作用 |
---|---|
w 或 W | 光标移动至下一个单词的单词首 |
b 或 B | 光标移动至上一个单词的单词首 |
e 或 E | 光标移动至下一个单词的单词尾 |
nw 或 nW | n 为数字,表示光标向右移动 n 个单词 |
nb 或 nB | n 为数字,表示光标向左移动 n 个单词 |
光标移动至行首、行尾
快捷键 | 作用 |
---|---|
0 或 ^ | 光标移动至当前行的行首 |
$ | 光标移动至当前行的行尾 |
n$ | 光标移动至当前行之后 n 行的行尾,n为数字 |
光标移动至指定字符
快捷键 | 作用 |
---|---|
fx | 光标移动至当前行中下一个 x 字符处 |
Fx | 光标移动至当前行中上一个 x 字符处 |
光标移动到指定行
快捷键 | 作用 |
---|---|
gg | 光标移动到文件开头 |
G | 光标移动至文件末尾 |
nG | 光标移动到第 n 行,n 为数字 |
:n | 编辑模式下的快捷键 ,可以将光标快速定义到指定行的行首 |
撤销和恢复撤销
命令模式下,撤销和反撤销快捷键如下:
快捷键 | 作用 |
---|---|
u(小写) | (undo)撤销一次对文本的修改( 类似 Windows 中 Ctrl + z) |
Ctrl+R | (Redo)恢复最近一次的撤销操作。(类似Windows 中 Ctrl +y) |
U(大写) | 第一次会撤销对光标所在行做过的全部操作, 第二次使用该命令会恢复对该行文本做过的所有操作。 |
参考文章:Vim命令速查表
UID 和 GID
用户 ID
(User ID)和组 ID
(Group ID),分别存储在 /etc/passwd
和 /etc/group
文件中。这与文件的 属主 、 属组 两种属性相对应。/etc/passwd
:
"划分为 7 个字段,每个字段的含义如下:用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
/etc/shadow
/etc/group
:
" 作为分隔符,分为 4 个字段:组名:密码:GID:该用户组中的用户列表
/etc/gshadow
组名:加密密码:组管理员:组附加用户列表
/etc/login.defs
[root@localhost ~]#passwd [选项] 用户名
[root@localhost ~]#usermod [选项] 用户名
passwd -S
),也可以修改用户密码:[root@localhost ~]#chage [选项] 用户名
userdel :删除用户的相关数据。此命令只有 root 用户才能使用
,基本格式:
[root@localhost ~]# userdel -r 用户名
id 命令:查询用户的UID、GID 和附加组的信息:
[root@localhost ~]# id 用户名
[root@localhost ~]# su [选项] 用户名
su 和 su - 的区别
使用 su 命令时,有 - 和没有 - 是完全不同的。-
选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。
ls -r
可以看到文件的大小的,但目录的大小基本都是 4KB。这是因为目录下的 子目录名 和 子文件名 是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。[root@localhost ~]# du
# 统计当前目录及所有子目录的磁盘占用量大小,但不统计子文件
[root@localhost ~]# du -a
# 统计当前目录的总大小,以及所有子文件、子目录 所占磁盘的大小。默认单位为 KB
[root@localhost ~]# du -sh
# 只统计磁盘占用量总的大小,同时使用习惯单位显示
mount
挂载命令。进程管理:http://c.biancheng.net/view/1061.html
程序和进程
PID
(进程 ID)。在操作系统中,所有可以执行的程序与命令都会产生进程。子进程
,而把这个进程称作父进程
。子进程是依赖父进程而产生的,如果父进程不存在,那么子进程也不存在了。手工启动进程
手工启动进程:指的是由用户输入命令直接启动一个进程,根据所启动的进程类型和性质的不同,其又可以细分为 前台启动 和 后台启动 2 种方式。
调度启动进程
博客:ps命令详解
ps (Process Status):可以查看所有运行进程的详细信息。基本格式如下:
[root@localhost ~]# ps [选项]
#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~]# ps aux
#查看系统中所有的进程,使用 Linux 标准命令格式
[root@localhost ~]# ps -le
# 只查看到当前 Shell 产生的进程
[root@localhost ~]# ps -l
# 查询相关信息:
[root@localhost ~]# ps-aux|grep mysql
[root@localhost ~]# ps -ef |grep mysql
ps -aux
ps -le
与 “ps aux” 一样, “ps -le
” 命令也能看到系统中所有的进程,且看到的信息更加详细,比如父进程的 PID、优先级等。两个命令掌握其中一个就行。
pstree :以树形结构显示程序和进程之间的关系:
[root@localhost ~]# pstree [选项] [PID或用户名]
使用 pstree 时,如果不指定 PID ,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;若指定 PID 或 用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。
使用 pstree 查看某个用户都启动了哪些进程,以 mysql 用户为例:
[root@1ocalhost ~]# pstree mysql
mysqid---6*[{mysqid}]
kill 命令的执行原理是:向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作:
[root@localhost ~]# kill [信号] PID
killall :通过程序的进程名来杀死一类进程,常与 ps、pstree 等命令配合使用:
[root@localhost ~]# killall [选项] [信号] 进程名
【注意】:killall 的信号类型同 kill 一样。常用的选项有如下 2 个:
tar :最常用的归档( 打包 )命令,可以将许多文件一起保存到一个单独的磁带或磁盘中进行归档。不仅如此,该命令还可以从归档文件中还原所需文件,也就是打包的反过程,称为 解打包。
tar命令做 打包 操作
使用 tar 命令归档的包通常称为 tar 包(tar 包文件都是以“.tar”结尾的),基本格式为:
[root@localhost ~]# tar [选项] 源文件或目录
tar命令做 解打包 操作
当 tar 命令用于对 tar 包做 解打包 操作时,格式如下:
[root@localhost ~]#tar [选项] 压缩包
tar命令做 打包和压缩(解压缩和解打包)操作
你可能会觉得 Linux 实在太不智能了,一个打包压缩,居然还要先打包成 “.tar” 格式,再压缩成 “.tar.gz” 或 “.tar.bz2” 格式。
其实 tar 命令是可以同时打包压缩的,前面的讲解之所打包和压缩分开,是为了让大家了解在 Linux 中打包和压缩的不同。
“.zip” 格式文件是 Windows 和 Linux 系统都通用的压缩文件类型,是一种相当简单的分别压缩每个文件的存储格式,几种主流的压缩格式(zip、rar等)之一。
zip 压缩
【注意】zip 压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以便解压缩时使用。
[root@localhost ~]#zip [选项] 压缩包名 源文件或源目录列表
// 压缩单个文件
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
// 同时压缩多个文件到test.zip压缩包中, 文件用空格隔开
[root@localhost ~]# zip test.zip install.log install.log.syslog
// 使用 zip 命令压缩目录,需要使用“-r”选项
[root@localhost ~]# mkdir dir1 // 创建目录
[root@localhost ~]# zip -r dir1.zip dir1 // 压缩目录
unzip 查看和解压缩
[root@localhost ~]# unzip [选项] 压缩包名
// 不论是文件、目录压缩包,都可以直接解压缩
[root@localhost ~]# unzip dir1.zip
// 使用 -d 指定解压缩位置
[root@localhost ~]# unzip -d /tmp/ ana.zip
gzip:压缩文件
[root@localhost ~]# gzip [选项] 源文件
命令中的源文件:当进行压缩操作时,指的是普通文件;当进行解压缩操作时,指的是压缩文件。
#压缩instal.log 文件
[root@localhost ~]# gzip install.log
[root@localhost ~]# ls #压缩文件生成,但是源文件也消失了
install.log.gz
# 使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中,这样可以缩文件的同时不删除源文件
[root@localhost ~]# gzip -c anaconda-ks.cfg >anaconda-ks.cfg.gz
# 压缩文件和源文件都存在
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz
gunzip:解压缩文件或目录
gunzip
用于解压被 gzip 压缩过的文件(扩展名为 .gz),( 也能用 gzip 自己: gzip -d 压缩包
):[root@localhost ~]# gunzip [选项] 文件
[root@localhost ~]# gunzip install.log.gz
[root@localhost ~]# gzip -d install.log.gz
" .bz2 "格式是 Linux 的另一种压缩格式。从理论上来讲," .bz2 "格式的算法更先进、压缩比更好;而 ".gz"格式相对来讲的时间更快。
bzip2 :压缩文件
[root@localhost ~]# bzip2 [选项] 源文件
【例 1】直接压缩文件,同时删除源文件 ".bz2"格式
[root@localhost ~]# bzip2 anaconda-ks.cfg
【例 2】压缩的同时,保留源文件。
[root@localhost ~]# bzip2 -k install.log.syslog
bunzip2:bz2格式的解压缩命令
bzip2 -d
命令一样,都能解压“.bz2”格式的压缩包文件[root@localhost ~]# bunzip2 [选项] 源文件
# 解压缩 .bz2 格式压缩包,下面两条命令效果相同:
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
# 使用 bzcat 命令,不解压就可查看".bz2"格式的纯文本压缩包(和".gz"格式类似)
[root@localhost ~]# bzcat install.log.syslog.bz2
java -version 检测当前系统是否存在Java环境 和windows命令一样
#如果有的话就需要卸载
rpm -qa|grep jdk 查看JDK版本信息
rpm -e --nodeps jdk_ 卸载
# 卸载完毕后可安装JDK
rpm -ivk rpm包
JAVA_HOME=/usr/java/jdk1.8.0_351-amd64
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export JAVA_HOME CLASSPATH PATH # 导出这几个变量
【注】:使用冒号 “ :
”分开,不是分号“ ; ”
4. 使环境变量生效:
[root@localhost ~]# source /etc/profile
【注】如果环境变量配置错误,导致Linux基本命令失效,运行下面的命令:
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
tar apache-tomcat-9.0.69.tar.gz
# 开启防火墙端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 查看所有开启的端口。如果是阿里云,需要配置安全组规则
firewall-cmd --list-ports
./startup.sh #执行
./shutdown.sh #停止
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# yum install 安装命令 -y 所有的提示都为y
yum -y install 包名
yum -y install gcc
yum -y install gcc-c++
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils \device-mapper-persistent-data \lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce docker-ce-Cli containerd.io
systemctl start docker
docker version
docker run hello-world
docker images
echo
grep