Linux入门
感谢狂神的分享:B站视频地址
推荐博客:C语言中文网–Linux简介
1. 概述
为什么要学Linux
linux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了。但在服务器端、在开发领域linux倒是越来越受欢迎。linux在开源社区的地位依然岿然不动。尤其是作为一个后端程序员,是必须要掌握Linux的!
Linux简介
- Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
- Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
- Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
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)组合。
2. 走近 Linux
环境搭建
环境使用阿里云服务器。如果购买之后设置登录密码、安全组规则,然后通过 xShell工具连接、xFtp 工具传输文件。
- 如果前期不好操作,可以安装 宝塔面板:安装教程
开机
- 开机会启动许多程序。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
- 开机成功后,它会显示一个文本登录界面,会提示用户输入用户名作为参数传给login程序来验证身份,密码是不显示的,输完回车即可!一般来说,用户的登录方式有三种:
- 命令行登录
- ssh登录
- 图形界面登录
关机
关机指令为: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
系统目录结构
- /bin:Binary的缩写, 这个目录存放着最经常使用的命令。
- /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /dev : Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
- /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
- /opt:这是给主机额外安装软件的目录。比如你安装一个 MySQL 数据库则就可以放到这个目录下。
- /proc:这是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
- /root:该目录为系统管理员,也称作超级权限者的用户主目录。
- /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /srv:该目录存放一些服务启动之后需要提取的数据。
- /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
- /tmp:这个目录是用来存放一些临时文件的。
- /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /usr/bin: 系统用户使用的应用程序。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src: 内核源代码默认的放置目录。
- /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
- /www:存放服务器网站相关的资源,环境,网站的项目
3. 常用基本命令
cd:切换目录
cd
( Change Directory 的缩写),用来切换工作目录
cd 命令的基本格式如下:
[root@localhost ~]# cd [相对路径或绝对路径]
cd 命令后面可以跟一些特殊符号,表达固定的含义:
命令 | 作用 |
---|---|
cd [~] | 表示回到自己的主目录。对于 root 用户,其主目录为 /root |
cd ~vbird | 切换到 vbird 这个用户的主目录,亦即 /home/vbird |
cd . . | 返回上级目录 |
cd . | 进入当前目录(目录没有变化,"."代表当前目录) |
cd - | 回到刚刚的那个目录 |
pwd:显示当前绝对路径
当用户登陆 Linux 系统之后,其当前目录就是它的主目录。也可以使用 Linux 系统的 pwd
命令来显示当前目录的绝对路径。
pwd
(Print Working Directory 的缩写),功能是显示用户当前所处的工作目录。该命令的基本格式为:
[root@localhost ~]# pwd
whoami 命令用于确定当前登陆的用户。可以看到,root 用户当前所在目录是它的主目录 /root。
[root@localhost ~]# whoami
root
[root@localhost ~]# pwd
/root
ls:查看目录下文件
ls
(list 的缩写)。其主要功能是显示当前目录下的内容。此命令的基本格式为:
[root@localhost ~]# ls [选项] 目录名称
ls 命令常用的选项,以及各自的功能如下:
【注意】当 ls
命令不使用任何选项时,默认只会显示非隐藏文件的名称,并以文件名进行排序,同时会根据文件的具体类型给文件名配色(蓝色显示目录,白色显示一般文件)
mkdir:创建目录(文件夹)
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:删除空目录
rmdir
(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为:
[root@localhost ~]# rmdir [-p] 目录名
-p 选项用于递归删除空目录。
【注】命令执行成功与否,取决于要删除目录是否是空目录,因为 rmdir 命令只能删除空目录!
# 递归删除下面的目录,要列出从相对路径到最下级的目录:
[root@localhost ~]# rmdir -p lm/movie/jp/cangls
touch:创建文件及修改文件时间戳
touch命令,用来创建文件、修改文件的时间参数:
ln:创建软、硬连接文件
cp:复制文件和目录
参考文章:Linux cp命令:复制文件和目录
rm:删除文件或目录
rm 命令,可以永久性地删除指定的文件或目录。在使用 rm 命令时,系统不会产生任何提示信息。此命令的基本格式为:
[root@localhost ~]# rm[选项] 文件或目录
mv:移动文件或改名
mv 命令(move 的缩写)。既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。该命令的基本格式如下:
[root@localhost ~]# mv [选项] 源文件 目标文件
env:查看环境变量
变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 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
4. 基本属性
概述
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用 ll
或者 ls -l
命令来显示一个文件的属性以及文件所属的用户和组:
第一个红框中的10个字符,代表了不同的意思:
- 第1个字符代表这个文件是目录、 文件或链接文件等等:
- [d] 是目录
- [-] 是文件;
- [l] 表示为链接文档( link file);
- [b] 表示为装置文件里面的可供储存的接口设备(可随机存取装置) ;
- [c] 表示为装置文件里面的串行端口设备,例如键盘、鼠标( 一次性读取装置)。
- 后面9字符中,以三个为一组,且均为[rwx] 的三个参数的组合,规定了不同的用户对文件所拥有的权限。
- 其中,[r] 可读(read)、[w] 可写(write)、[x] 可执行(execute)。
- 这三个权限的位置不会改变。如果没有权限,就会出现减号[-]。
- 每个文件的属性由左边第一部分的10个字符来确定 (如下图) :
- 第二个绿框:引用计数。文件的引用计数代表
该文件的硬链接个数
,而目录的引用计数代表该目录有多少个一级子目录
。 - 第三个绿框:所有者、所属组
- 所有者:这个文件属于哪个用户(默认所有者是文件的建立用户)
- 所属组:默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组
- 第四个红框:大小,默认单位是字节
- 第五个红框:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
- 最后一列:文件名或目录名
chgrp:修改文件(或目录)的所属组
chgrp(change group 的缩写),用于修改文件(或目录)的所属组,基本格式如下:
[root@localhost ~]# chgrp [-R] 所属组 文件名(目录名)
【注意】-R(大写)用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息。
- 需要注意的一点是:要被改变的群组名必须是真实存在的,否则命令无法正确执行,会提示 “invaild group name”。
chown :修改文件和目录 的 所有者和所属组
chown(change owner 的缩写),主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。
chmod:修改文件或目录的权限
Linux 系统中,文件的基本权限由 r、w、x
三个字符组成,分别有对应的数字:
- r --> 4
- w --> 2
- x --> 1
使用数字修改文件权限, chmod
的命令基本格式如下:
-R(注意是大写)选项表示连同子目录中的所有文件,也都修改设定的权限。
[root@localhost ~]# chmod [-R] 权限值 文件名
5. 文本处理
在 Linux 中,文本处理无非是对文本内容做查看、修改等操作。本章将介绍Linux中常用的文本处理命令,以及被称为 Linux三剑客 的 grep、sed 和 awk
命令。
cat:连接文件并打印输出
cat( concatenate — 连接、连续)可以用来显示文本文件的内容(类似于 DOS 下的 type 命令);也可以把几个文件内容附加到另一个文件中,即连接合并文件。基本格式如下:
[root@localhost ~]# cat [选项] 文件名
或者
[root@localhost ~]# cat 文件1 文件2 > 文件3
## 注: > 是覆盖, >> 是追加
【注】cat命令正序输出;tac命令倒序输出
more:分屏显示文件内容
more 命令可以分页显示文本文件的内容,此命令的基本格式如下:
[root@localhost ~]# more [选项] 文件名
head:显示文件开头的内容
head 命令可以显示指定文件前若干行的文件内容,其基本格式如下:
[root@localhost ~]# head [选项] 文件名
less:查看文件内容
参考文章:Linux less命令:查看文件内容
使用 more 命令浏览文件内容时,只能不断向后翻看;而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。为了方面用户浏览文本内容,less 命令还提供了以下几个功能:
less 命令的基本格式如下:
[root@localhost ~]# less [选项] 文件名
tail:显示文件结尾的内容
tail 命令用来查看文件末尾的数据,其基本格式如下:
[root@localhost ~]# tail [选项] 文件名
可以看到,使用 tail -n 3 /etc/passwd
命令和 tail -3 /etc/passwd
的效果是一样的。
grep:查找文件内容(三剑客)
grep:查找文件内容(三剑客)
grep:查找文件内容(三剑客)
参考文章:Linux awk命令详解
6. Vim 编辑器
三种工作模式
Vim文本编辑器, vi 的升级版。具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器等特点。
- 如未安装Vim编辑器,CentOS 中使用如下命令安装Vim:
yum install vim # 此命令有时需要手动确认一些信息
yum -y install vim # 全自动安装,省略手动确认部分
使用 Vim 编辑文件时,存在 3 种工作模式,分别是 命令模式(Command mode),输入模式 (Insert mode)和 底线命令模式(Last line mode),这 3 种工作模式可随意切换:
命令模式
- 使用 Vim 编辑文件,默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置。还可以对文件内容进行复制、粘贴、替换、删除等操作。
- 此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i 被当作了一个命令。
输入模式
底线命令模式
- 在命令模式下按英文 "
:
" 键,进入底线命令模式。此时 Vim 窗口的左下方出现一个 " : " 符号
- 指令执行后 Vim 会自动返回命令模式。如想直接返回,按 Esc 即可
对于新手来说,经常不知道自己处于什么模式,可以按一次 Esc 键返回命令模式。如果你多按几次 Esc 键后听到"嘀----"的声音,则代表你已经处于命令模式了。
可视化模式
在 Vim 命令模式下键入不同的键,可以进入不同的可视化模式,进行选中文本的操作:
命令 | 作用 |
---|---|
v(小写) | 字符可视化模式 ,选择文本的是以字符为单位的,(要一个个字符的选中要操作的文本) |
V(大写) | 行可视化模式 ,选择文本的选择是以行为单位的,(可以一行一行的选中要操作的文本) |
Ctrl+v(组合键) | 块可视化模式 ,可以选中文本的一个矩形区域作为目标文本: 以按下 Ctrl+v 位置作为矩形的一角,光标移动的终点位置作为它的对角。 |
Vim 快捷键
查找文本
快捷键 | 作用 |
---|---|
/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 键盘图
参考文章:Vim命令速查表
7. 用户和用户组
1)概述
- 向管理员申请账户,才能使用系统资源。每个用户有唯一的 用户名和密码,登录成功默认进入自己的主目录。
- 通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
- 用户组是具有相同特征用户的逻辑集合。
UID 和 GID
- 登陆 Linux 系统时,虽然输入的是用户名和密码,但 Linux 并不认识用户名,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 将用户名与 ID 的对应关系,存储在 /etc/passwd 文件中。说白了,用户名并无实际作用,仅是为了方便用户的记忆而已。
- Linux 中,每个用户的 ID 细分为 2 种:分别是
用户 ID
(User ID)和组 ID
(Group ID),分别存储在/etc/passwd
和/etc/group
文件中。这与文件的 属主 、 属组 两种属性相对应。
/etc/passwd
- Linux 中 /etc/passwd 是系统用户配置文件,存储了所有用户的基本信息,并且所有用户都可以对此文件执行读操作。每行记录对应一个用户。
- 每行用户信息都以 "
:
"划分为 7 个字段,每个字段的含义如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
- 具体含义,参考:Linux /etc/passwd 内容解释
/etc/shadow
- /etc/shadow (又称为“影子文件”),用于存储 Linux 中用户的密码。
- 只有 root 用户拥有读权限,保证了密码的安全性
- 具体含义参考:Linux /etc/shadow 内容解析
/etc/group
- /ect/group 文件是用户组配置文件,存放用户组的所有信息(是记录 GID 和 组名相对应的文件)。
- 每一行各代表一个用户组, "
:
" 作为分隔符,分为 4 个字段:
组名:密码:GID:该用户组中的用户列表
- 具体含义参考: Linux /etc/group文件解析
/etc/gshadow
- 组用户信息存储在 /etc/group 中,而组用户的密码信息存储在 /etc/gshadow 文件中
- 每行代表一个组用户的密码信息,用 “:” 分隔为 4 个字段,含义如下:
组名:加密密码:组管理员:组附加用户列表
- 具体含义参考:Linux /etc/gshadow文件内容解析
/etc/login.defs
- /etc/login.defs 用于在创建用户时,对用户的一些基本属性做默认设置。
- 指定用户 UID 和 GID 范围、用户的过期时间、密码最大长度。。。
2)用户管理
useradd:添加新用户
- 详细参考:Linux useradd命令详解
passwd:修改密码
- passwd: 修改用户密码,基本格式如下:
[root@localhost ~]#passwd [选项] 用户名
usermod:修改用户信息
- usermod:修改 已存在用户 的信息,命令格式如下:
[root@localhost ~]#usermod [选项] 用户名
chage:修改用户密码状态 & 强制用户修改密码
- chage:可以显示更加详细的用户密码信息(类似
passwd -S
),也可以修改用户密码:
[root@localhost ~]#chage [选项] 用户名
userdel:删除用户
userdel :删除用户的相关数据。此命令只有 root 用户才能使用
,基本格式:
[root@localhost ~]# userdel -r 用户名
id:查看用户的UID和GID
id 命令:查询用户的UID、GID 和附加组的信息:
[root@localhost ~]# id 用户名
su:用户间切换
- su:用户间切换,命令格式如下:
[root@localhost ~]# su [选项] 用户名
- 普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码;从 root 用户切换至其他用户,无需知晓对方密码。
su 和 su - 的区别
使用 su 命令时,有 - 和没有 - 是完全不同的。-
选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。
whoami 和 who am i
- whoami :打印当前执行操作的用户名
- who am i :打印登陆当前 Linux 系统的用户名
- 执行 whoami 命令,等同于执行 id -un 命令;执行 who am i 命令,等同于执行 who -m 命令。
3)用户组管理
groupadd:添加用户组
groupmod:修改用户组
groupdel:刪除用户组
gpasswd:把用户添加进组或从组中删除
newgrp:切换用户的有效组
8. 磁盘管理
df :查看文件系统硬盘使用情况
- df 命令:用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。
- 与整个文件系统有关的数据,都保存在 Super block(超级块)中,而 df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。
du:统计目录或文件所占磁盘空间大小
- 使用
ls -r
可以看到文件的大小的,但目录的大小基本都是 4KB。这是因为目录下的 子目录名 和 子文件名 是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。 - du :统计文件、目录及子目录和子文件 所占磁盘空间的实际大小:
[root@localhost ~]# du
# 统计当前目录及所有子目录的磁盘占用量大小,但不统计子文件
[root@localhost ~]# du -a
# 统计当前目录的总大小,以及所有子文件、子目录 所占磁盘的大小。默认单位为 KB
[root@localhost ~]# du -sh
# 只统计磁盘占用量总的大小,同时使用习惯单位显示
mount:挂在设备
- 所有的硬件设备必须挂载之后才能使用,只不过,有些硬件设备(比如硬盘分区)在每次系统启动时会自动挂载,而有些(比如 U 盘、光盘)则需要手动进行挂载。
- 通过学习 Linux 文件系统,我们可以对挂载的含义进行引申: 挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。 而要将文件系统挂载到 Linux 系统上,就需要使用
mount
挂载命令。
mount 挂在设备:
unmount:卸载已挂在的硬件设备
9. 进程管理
进程管理:http://c.biancheng.net/view/1061.html
概述
程序和进程
- 程序:使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合
- 进程:进程是正在执行中的程序。操作系统给这个进程分配一个 ID,称为
PID
(进程 ID)。在操作系统中,所有可以执行的程序与命令都会产生进程。 - 子进程:某些进程会产生一些新的进程,称为
子进程
,而把这个进程称作父进程
。子进程是依赖父进程而产生的,如果父进程不存在,那么子进程也不存在了。
手工启动进程
手工启动进程:指的是由用户输入命令直接启动一个进程,根据所启动的进程类型和性质的不同,其又可以细分为 前台启动 和 后台启动 2 种方式。
- 前台启动进程:这是手工启动进程最常用的方式,因为当用户输入一个命令并运行,就已经启动了一个进程,而且是一个前台的进程。此时系统其实已经处于一个多进程的状态(一个是 Shell 进程,另一个是新启动的进程)。
- 后台启动进程:进程直接从后台运行。用的相对较少,除非该进程非常耗时,且用户也不急着需要其运行结果的时候。
调度启动进程
- 在 Linux 系统中,任务可以被配置在指定的时间、日期或者系统平均负载量低于指定值时自动启动。
- 例如,Linux 预配置系统任务的运行,使系统能够实时被更新;系统管理员也可以使用自动化任务,定期备份数据。
ps:查看正在运行的进程
博客: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:查看进程树
pstree :以树形结构显示程序和进程之间的关系:
[root@localhost ~]# pstree [选项] [PID或用户名]
-
使用 pstree 时,如果不指定 PID ,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;若指定 PID 或 用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。
-
init 进程是系统启动的第一个进程(PID 为 1),也是系统中所有进程的父进程。
-
使用 pstree 查看某个用户都启动了哪些进程,以 mysql 用户为例:
[root@1ocalhost ~]# pstree mysql
mysqid---6*[{mysqid}]
kill :终止进程
kill 命令的执行原理是:向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作:
[root@localhost ~]# kill [信号] PID
killall :终止特定的一类进程
killall :通过程序的进程名来杀死一类进程,常与 ps、pstree 等命令配合使用:
[root@localhost ~]# killall [选项] [信号] 进程名
【注意】:killall 的信号类型同 kill 一样。常用的选项有如下 2 个:
- -i:交互式,询问是否要杀死某个进程;
- -I:忽略进程名的大小写;
10. 打包和压缩
- 归档(打包)指的是将多个文件和目录集中存储在一个文件中
- 压缩:利用算法对文件进行处理,从而缩减占用的磁盘空间。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。
tar:打包命令
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 压缩与解压
“.zip” 格式文件是 Windows 和 Linux 系统都通用的压缩文件类型,是一种相当简单的分别压缩每个文件的存储格式,几种主流的压缩格式(zip、rar等)之一。
zip 压缩
【注意】zip 压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以便解压缩时使用。
[root@localhost ~]#zip [选项] 压缩包名 源文件或源目录列表
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
.gz 压缩与解压
gzip:压缩文件
- gzip 命令只能用来压缩文件,不能压缩目录。即便指定了目录,也只能压缩目录内的所有文件。
- 压缩得到的新文件,其扩展名通常标记为 “ .gz ”
[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 压缩与解压
" .bz2 "格式是 Linux 的另一种压缩格式。从理论上来讲," .bz2 "格式的算法更先进、压缩比更好;而 ".gz"格式相对来讲的时间更快。
bzip2 :压缩文件
- bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件。当执行压缩任务完成后,会生成一个以“.bz2”为后缀的压缩包:
[root@localhost ~]# bzip2 [选项] 源文件
【例 1】直接压缩文件,同时删除源文件 ".bz2"格式
[root@localhost ~]# bzip2 anaconda-ks.cfg
【例 2】压缩的同时,保留源文件。
[root@localhost ~]# bzip2 -k install.log.syslog
bunzip2:bz2格式的解压缩命令
- bunzip2 与
bzip2 -d
命令一样,都能解压“.bz2”格式的压缩包文件 - bunzip2 命令只能用于解压文件,即便解压目录,也是解压该目录以及所含子目录下的所有文件:
[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
11. 环境安装
JDK (rpm安装)
- 下载地址:JDK官方下载
- 安装java环境
java -version 检测当前系统是否存在Java环境 和windows命令一样
#如果有的话就需要卸载
rpm -qa|grep jdk 查看JDK版本信息
rpm -e --nodeps jdk_ 卸载
# 卸载完毕后可安装JDK
rpm -ivk rpm包
3. 配置环境变量 :/etc/profile
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
Tomcat(解压缩安装)
- 官网地址:Apache Tomcat
- 上传到服务器中,自定义目录下(如 “/home/ide/”),解压缩
tar apache-tomcat-9.0.69.tar.gz
- 开启防火墙
--zone 作用域
--add-port-80/tcp 添加端口, 格式为:端口/通讯协议
--permanent 永久生效,没有此参数重启后失效
使用域名解析:如果端口是80 (http)或者443(https)可以直接访问;如果是9000 8080 ,就需要通过Apcahe或者Nginx做一下反向代理
# 开启防火墙端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 查看所有开启的端口。如果是阿里云,需要配置安全组规则
firewall-cmd --list-ports
- 进入Tomcat的bin目录下,启动Tomcat
./startup.sh #执行
./shutdown.sh #停止
docker(yum 安装)
- 检查 CentOS 版本(Linux各发行版本,命令不同)
[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++
- 卸载以前的docker
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安装包
yum makecache fast
- 安装 docker ce
yum -y install docker-ce docker-ce-Cli containerd.io
- 启动docker
systemctl start docker
- 测试
docker version
docker run hello-world
docker images
常用命令
echo
grep