2. Linux介绍
Linux 主要的发行版(release):
Ubuntu(乌班图)、 RedHat(红帽)、 CentOS、 Debain[蝶变]、 Fedora、 SuSE、 OpenSUSE [示意图]
Linux和Unix
Unix怎么来的:
Linux怎么来的:
Linux 和 Unix 关系图 :
3. VM和Linux的安装
网络连接三种方式解释:
虚拟机克隆
方案一:直接拷贝一份安装好的虚拟机文件
方案二: 使用 vmware 的克隆操作, 注意, 克隆时, 需要先关闭 linux 系统
虚拟机快照
如果你在使用虚拟机系统的时候(比如 linux), 你想回到原先的某一个状态, 也就是说你担心可能有些误操作造成系统异常, 需要回到原先某个正常运行的状态, vmware 也提供了这样的功能, 就叫快照管理 。
类似于Git的项目管理。
虚拟的迁移和删除
虚拟系统安装好了, 它的本质就是文件(放在文件夹的)。 因此虚拟系统的迁移很方便, 你可以把安装好的虚拟系统这个文件夹整体拷贝或者剪切到另外位置使用。 删除也很简单, 用 vmware 进行移除, 再点击菜单->从磁盘删除即可, 或者直接手动删除虚拟系统对应的文件夹即可。
安装 vmtools
vmtools 安装后, 可以让我们在 windows 下更好的管理 vm 虚拟机 。
可以设置 windows 和 centos 的共享文件夹 。
注意事项:
Windows 和 CentOS就可以共享文件了, 但是在实际开发中, 文件的上传下载是需要使用 远程方式完成的 。
4. 目录结构
- linux 的文件系统是采用级层式的树状目录结构, 在此结构中的最上层是根目录“/” , 然后在此目录下再创建其他的
目录。 - 深刻理解 linux 树状文件目录是非常重要的, 这里我给大家说明一下。
- 记住一句经典的话: 在 Linux 世界里, 一切皆文件(!!)
具体的目录结构(知道即可)
1) /bin [常用] (/usr/bin 、 /usr/local/bin)
是 Binary 的缩写, 这个目录存放着最经常使用的命令。
2) /sbin (/usr/sbin 、 /usr/local/sbin)
s 就是 Super User 的意思, 这里存放的是系统管理员使用的系统管理程序。
3) /home [常用]
存放普通用户的主目录, 在 Linux 中每个用户都有一个自己的目录, 一般该目录名是以用户的账号命名
4) /root [常用]
该目录为系统管理员, 也称作超级权限者的用户主目录
- /lib
系统开机所需要最基本的动态连接共享库, 其作用类似于 Windows 里的 DLL 文件。 几乎所有的应用程序都需要
用到这些共享库
- /lost+found
这个目录一般情况下是空的, 当系统非法关机后, 这里就存放了一些文件
-
/etc [常用]
所有的系统管理所需要的配置文件和子目录, 比如安装 mysql 数据库 my.conf -
/usr [常用]
这是一个非常重要的目录, 用户的很多应用程序和文件都放在这个目录下, 类似与 windows 下的 program files 目录。 -
/boot [常用]
存放的是启动 Linux 时使用的一些核心文件, 包括一些连接文件以及镜像文件
- /proc [不能动]
这个目录是一个虚拟的目录, 它是系统内存的映射, 访问这个目录来获取系统信息
- /srv [不能动]
service 缩写, 该目录存放一些服务启动之后需要提取的数据
- /sys
[不能动]这是 linux2.6 内核的一个很大的变化。 该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs =》【别动】
- /tmp
这个目录是用来存放一些临时文件的
-
/dev
类似于 windows 的设备管理器, 把所有的硬件用文件的形式存储 -
/media [常用]
linux 系统会自动识别一些设备, 例如 U 盘、 光驱等等, 当识别后, linux 会把识别的设备挂载到这个目录下
-
/mnt [常用]
系统提供该目录是为了让用户临时挂载别的文件系统的, 我们可以将外部的存储挂载在/mnt/上, 然后进入该目录就 可以查看里的内容了。 d:/myshare -
/opt
这是给主机额外安装软件所存放的目录。 如安装 ORACLE 数据库就可放到该目录下。 默认为空
-
/usr/local [常用]
这是另一个给主机额外安装软件所安装的目录。 一般是通过编译源码方式安装的程序 -
/var [常用]
这个目录中存放着在不断扩充着的东西, 习惯将经常被修改的目录放在这个目录下。 包括各种日志文件 -
/selinux [security-enhanced linux]
SELinux 是一种安全子系统,它能控制程序只能访问特定文件, 有三种工作模式, 可以自行设置.
5. 远程登陆Linux
为什么要远程登录
-
linux 服务器是开发小组共享
-
正式上线的项目是运行在公网
-
因此程序员需要远程登录到 Linux 进行项目管理或者开发
-
画出简单的网络拓扑示意图(帮助理解)
- 远程登录客户端有 Xshell, Xftp , 我们学习使用 Xshell 和 Xftp6 , 其它的远程工具大同小异、
远程登录
说明: Xshell 是目前最好的远程登录到 Linux 操作的软件, 流畅的速度并且完美解决了中文乱码的问题, 是目前程 序员首选的软件。 Xshell 是一个强大的安全终端模拟软件, 它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。 Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器, 从而比较好的达到远程控制终端的目的。
Xshell的使用:
主机填的是连接的远程Linux的ip地址,可利用Linux终端输入ifconfig查看ip地址。
XFTP的使用:
和Xshell类似,连接即可。
解决XFTP乱码问题步骤:
6. Vi和Vim编辑器
Linux 系统会内置 vi 文本编辑器。
Vim 具有程序编辑的能力, 可以看做是 Vi 的增强版本, 可以主动的以字体颜色辨别语法的正确性, 方便程序设计。代码补完、 编译及错误跳转等方便编程的功能特别丰富, 在程序员中被广泛使用。
Vim的三种模式
正常模式
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。 在这个模式中, 你可以使用『上下左右』 按键来移动光标, 你可以使用『删除字符』 或『删除整行』 来处理档案内容, 也可以使用『复制、 粘贴』 来处理你的文件数据
插入模式
按下 i, I, o, O, a, A, r, R 等任何一个字母之后才会进入编辑模式, 一般来说按 i 即可.
命令行模式
输入 esc 再输入: 在这个模式当中, 可以提供你相关指令, 完成读取、 存盘、 替换、 离开 vim 、 显示行号等的动作则是在此模式中达成的。
模式的切换
快捷键
1 yy: 拷贝当前行 数字d+yy: 拷贝当前行向下的 d 行
-
p: 粘贴
-
dd: 删除当前行 数字d + dd:删除d行
-
:/单词: 查找单词输入 n 就是查找下一个匹配的单词
4):set nu:打开文件的行号 :set nonu取消文件的行号
-
G: 末尾行 gg:首行
-
u:撤销
-
数字d+字母G(或数字d + gg):跳到d行 数字d+ 方向:移动d个单位
-
更多的看整理的文档
-
快捷键的键盘对应图
扩展:
(1) i:进入编辑模式
(2) ESC:进入一般命令模式
(3) h 或 左箭头键:光标向左移动一个字符
(4) j 或 向下箭头:光标向下移动一个字符
(5) k 或 向上箭头:光标向上移动一个字符
(6) l 或 向右箭头:光标向右移动一个字符
(7) n<Space>:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
(8) 0 或 功能键[Home]:光标移动到本行开头
(9) $ 或 功能键[End]:光标移动到本行末尾
(10) G:光标移动到最后一行
(11) :n 或 nG:n为数字,光标移动到第n行
(12) gg:光标移动到第一行,相当于1G
(13) n<Enter>:n为数字,光标向下移动n行
(14) /word:向光标之下寻找第一个值为word的字符串。 :noh 消除光标
(15) ?word:向光标之上寻找第一个值为word的字符串。
(16) n:重复前一个查找操作
(17) N:反向重复前一个查找操作
(18) :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
(19) :1,$s/word1/word2/g:将全文的word1替换为word2
(20) :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。
(21) v:选中文本
(22) d:删除选中的文本
(23) dd: 删除当前行
(24) y:复制选中的文本
(25) yy: 复制当前行
(26) p: 将复制的数据在光标的下一行/下一个位置粘贴
(27) u:撤销
(28) Ctrl + r:取消撤销
(29) 大于号 >:将选中的文本整体向右缩进一次
(30) 小于号 <:将选中的文本整体向左缩进一次
(31) :w 保存
(32) :w! 强制保存
(33) :q 退出
(34) :q! 强制退出
(35) :wq 保存并退出
(36) :set paste 设置成粘贴模式,取消代码自动缩进
(37) :set nopaste 取消粘贴模式,开启代码自动缩进
(38) :set nu 显示行号
(39) :set nonu 隐藏行号
(40) gg=G:将全文代码格式化
(41) :noh 关闭查找关键词高亮
(42) Ctrl + q:当vim卡死时,可以取消当前正在执行的命令
作者:yxc
来源:AcWing
7. 开机、重启、用户登录注销
关机重启命令
-
shutdown – h now 立该进行关机
-
shudown -h 1 “hello, 1 分钟后会关机了”
-
shutdown – r now 现在重新启动计算机
-
halt 关机, 作用和上面一样.
-
reboot 现在重新启动计算机
-
sync 把内存的数据同步到磁盘 、
细节:
不管是重启系统还是关闭系统, 首先要运行 sync 命令, 把内存中的数据写到磁盘中。目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync。建议以防万一,还是关机前运行sync命令。
用户登录和注销
-
登录时尽量少用 root 帐号登录, 因为它是系统管理员, 最大的权限, 避免操作失误。 可以利用普通用户登录, 登录后再用” su - 用户名’ 命令来切换成系统管理员身份。
-
在提示符下输入 logout 即可注销用户
细节:
- logout 注销指令在图形运行级别无效, 在运行级别 3 下有效。
8. 用户管理
Linux 系统是一个多用户多任务的操作系统, 任何一个要使用系统资源的用户, 都必须首先向系统管理员申请一个账号, 然后以这个账号的身份进入系统 。
添加用户
添加用户:useradd 用户名
细节:
- 当创建用户成功后, 会自动的创建和用户同名的家目录
- 也可以通过 useradd -d 指定目录 新的用户名, 给新创建的用户指定家目录
指定/修改密码
指定/修改密码:passwd 用户名
删除用户
userdel 用户名 (管理员权限)
-
删除用户 milan, 但是要保留家目录, userdel milan
-
删除用户以及用户主目录, 比如 tom, userdel -r tom
一般情况下, 我们建议保留家目录
查询用户信息指令
id 用户名
切换用户
su - 切换的用户
-
从权限高的用户切换到权限低的用户, 不需要输入密码, 反之需要。
-
当需要返回到原来用户时, 使用 exit/logout 指令
查看当前用户/登录用户
who am i/ whoami
用户组
新增组:groupadd 组名
增加用户并加上组:useradd – g 用户组 用户名
注意:创建一个新用户如果未指定组,则会默认加入以该用户为名的组
修改用户组:usermod -g 用户组 用户名
用户和组相关文件
/ect/passwd文件:
用户(user) 的配置文件, 记录用户的各种信息。
每行的含义: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell
/etc/shadow 文件:
口令的配置文件
每行的含义: 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group 文件:
组(group)的配置文件, 记录 Linux 包含的组的信息
每行含义: 组名:口令:组标识号:组内用户列表
9. 实用指令
指定系统运行级别
运行级别说明:
0 : 关机
1 : 单用户【找回丢失密码】
2: 多用户状态没有网络服务
3: 多用户状态有网络服务
4: 系统未使用保留给用户
5: 图形界面
6: 系统重启
常用运行级别是 3 和 5 , 也可以指定默认运行级别。
CentOS7以前,在/etc/inittab 文件中。
7以后进行了简化 , 如下:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
# To view current default target, run: (查看当前运行级别)
systemctl get-default
# To set a default target, run: (设置运行界别)
systemctl set-default TARGET.target
案例:systemctl set-default graphical.target
帮助指令
基本语法: man [命令或配置文件]
(功能描述: 获得帮助信息)
案例: 查看 ls 命令的帮助信息man ls
在 linux 下, 隐藏文件是以.开头 , 选项可以组合使用 比如 ls -al, 比如 ls -al /root
help 指令
基本语法: help 命令
(功能描述: 获得 shell 内置命令的帮助信息)
文件目录类
pwd指令
基本语法 : pwd
(功能描述: 显示当前工作目录的绝对路径)
ls 指令
基本语法:ls [选项] [目录或文件]
常用选项:
-a : 显示当前目录所有的文件和目录, 包括隐藏的。
-l : 以列表的方式显示信息
cd 指令
基本语法:cd [参数]
(功能描述: 切换到指定目录)
cd ~ 或者 cd
: 回到自己的家目录, 比如 你是 root , cd ~ 到 /root
cd ..
: 回到当前目录的上一级目录
mkdir指令
mkdir 指令用于创建目录
基本语法: mkdir [选项] 要创建的目录
常用选项
-p : 创建多级目录
rmdir 指令删除空目录
基本语法:rmdir [选项] 要删除的空目录
使用细节
rmdir 删除的是空目录, 如果目录下有内容时无法删除的。
提示: 如果需要删除非空目录, 需要使用 rm -rf
要删除的目录
比如:rm -rf /home/animal
解释: -r 递归删除 -f 强制删除
touch 指令
创建空文件
基本语法:touch 文件名称
cp指令
cp 指令拷贝文件到指定目录
cp [选项] source dest
-r : 递归复制整个文件夹
使用细节
强制覆盖不提示的方法: cp -r /home/bbb /opt
rm指令
说明: rm 指令移除文件或目录
rm [选项] 要删除的文件或目录
常用选项:
-r : 递归删除整个文件夹
-f : 强制删除不提示
使用细节:
强制删除不提示的方法: 带上 -f 参数即可
mv指令
mv 移动文件与目录或重命名
mv oldNameFile newNameFile
(功能描述: 重命名)
mv /temp/movefile /targetFolder
(功能描述: 移动文件)
cat指令
cat 查看文件内容
cat [选项] 要查看的文件
常用选项
-n : 显示行号
使用细节:
cat 只能浏览文件, 而不能修改文件, 为了浏览方便, 一般会带上 管道命令 | more,cat -n /etc/profile | more
[进行交互]
more指令
more 指令是一个基于 VI 编辑器的文本过滤器, 它以全屏幕的方式按页显示文本文件的内容。 more 指令中内置了若干快捷键(交互的指令)。
基本语法:more 要查看的文件
操作说明:
less指令
less 指令用来分屏查看文件内容, 它的功能与 more 指令类似, 但是比 more 指令更加强大, 支持各种显示终端。 less指令在显示文件内容时, 并不是一次将整个文件加载之后才显示, 而是根据显示需要加载内容, 对于显示大型文件具有较高的效率。
基本语法:less 要查看的文件
echo 指令
echo 输出内容到控制台
基本语法:echo [选项] [输出内容]
head指令
head 用于显示文件的开头部分内容, 默认情况下 head 指令显示文件的前 10 行内容。
基本语法:
head 文件
(功能描述: 查看文件头 10 行内容)
head -n 5 文件
功能描述: 查看文件头 5 行内容, 5 可以是任意行数
tail 指令
tail 用于输出文件中尾部的内容, 默认情况下 tail 指令显示文件的末尾 10 行内容 。
1) tail 文件
(功能描述: 查看文件尾 10 行内容)
-
tail -n 5 文件
(功能描述: 查看文件尾 5 行内容, 5 可以是任意行数) -
tail -f 文件
(功能描述: 实时追踪该文档的所有更新)
> 指令 和 >> 指令
> 输出重定向和 >> 追加
基本语法
1) ls -l >文件
(功能描述: 列表的内容写入文件 a.txt 中(覆盖写) )
-
ls -al >> 文件
(功能描述: 列表的内容追加到文件 aa.txt 的末尾) -
cat 文件 1 > 文件 2
(功能描述: 将文件 1 的内容覆盖到文件 2)
4)echo "内容" >> 文件
(追加)
ln 指令
ln -s [原文件或目录] [软链接名]
(功能描述: 给原文件创建一个软链接) 即快捷方式
细节:当我们使用 pwd 指令查看目录时, 仍然看到的是软链接所在目录。
**history 指令 **
查看已经执行过历史命令,也可以执行历史指令
history
(功能描述: 查看已经执行过历史命令)
history 10
:显示最近使用过的10个指令
!5
:执行历史编号为5的指令
时间日期类
date 指令-显示日期
显示当前日期。
基本语法:
-
date
(功能描述: 显示当前时间) -
date +%Y
(功能描述: 显示当前年份) -
date +%m
(功能描述: 显示当前月份) -
date +%d
(功能描述: 显示当前是哪一天) -
date "+%Y-%m-%d %H:%M:%S"
(功能描述: 显示年月日时分秒)
date指令-设置日期
date -s 字符串时间
cal 指令
查看日历指令 cal
cal [选项]
:功能描述: 不加选项, 显示本月日历
显示 2020 年日历 :cal 2020
搜索查找类
find 指令
find 指令将从指定目录向下递归地遍历其各个子目录, 将满足条件的文件或者目录显示在终端。
基本语法:find [搜索范围] [选项]
选项:
案例 1: 按文件名: 根据名称查找/home 目录下的 hello.txt 文件 : find /home -name hello.txt
locate 指令
locate 指令可以快速定位文件路径。 locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。 Locate 指令无需遍历整个文件系统, 查询速度较快。 为了保证查询结果的准确度, 管理员必须定期更新 locate 时刻。
基本语法:lcoate 搜索文件
由于 locate 指令基于数据库进行查询, 所以第一次运行前, 必须使用 updatedb
指令创建 locate 数据库。
which 指令
可以查看某个指令在哪个目录下, 比如 ls 指令在哪个目录: which ls
grep 指令和 管道符号 |
grep 过滤查找 , 管道符, “|”, 表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法
grep [选项] 查找内容 源文件
案例:cat /home/hello.txt | grep "yes"
压缩和解压类
gzip/gunzip 指令
zip 用于压缩文件, gunzip 用于解压的
基本语法
gzip 文件
(功能描述: 压缩文件, 只能将文件压缩为*.gz 文件)
gunzip 文件.gz
(功能描述: 解压缩文件命令)
zip/unzip 指令
zip 用于压缩文件/目录, unzip 用于解压的, 这个在项目打包发布中很有用的 。
基本语法:
zip [选项] xxx.zip 将压缩的文件/目录
unzip [选项] xxx.zip
案例1:
将 /home 下的 所有文件/文件夹进行压缩成 myhome.zip
zip -r myhome.zip /home/
案例2:
将 myhome.zip 解压到 /opt/tmp 目录下
unzip -d /opt/tmp /home/myhome.zip
tar指令
tar 指令 是打包指令, 最后打包后的文件是 .tar.gz 的文件。
基本语法:
tar [选项] XXX.tar.gz 打包的内容
(功能描述: 打包目录, 压缩后的文件格式.tar.gz, 打包多个文件用空格分开)
选项内容:
案例1:压缩多个文件, 将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
案例 2: 将/home 的文件夹 压缩成 myhome.tar.gz
tar -zcvf myhome.tar.gz /home/
案例 3: 将 pc.tar.gz 解压到当前目录
tar -zxvf pc.tar.gz
案例4: 将myhome.tar.gz 解压到 /opt/tmp2目录下
(1) mkdir /opt/tmp
(2) tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
(-C 指令目标目录)
10.组管理和权限管理
组基本介绍
在 linux 中的每个用户必须属于一个组, 不能独立于组外。 在 linux 中每个文件 有所有者、 所在组、 其它组的概念 。
文件/目录 所有者
一般为文件的创建者,谁创建了该文件, 就自然的成为该文件的所有者。
查看文件的所有者
指令: ls –ahl
(第一个root为文件所有者,第二个为文件所在的组)
修改文件所有者
指令: chown 用户名 文件名
应用案例 要求: 使用 root 创建一个文件 apple.txt , 然后将其所有者修改成 tom
chown tom apple.txt
组的创建
groupadd 组名
创建一个用户 fox , 并放入到 monster 组中
useradd -g monster fox
文件/目录 所在组
当某个用户创建了一个文件后, 这个文件的所在组就是该用户所在的组(默认)。
基本指令
ls –ahl
修改文件/目录所在组
基本指令
chgrp 组名 文件名
其它组
除文件的所有者和所在组的用户外, 系统的其它用户都是文件的其它组。
改变用户所在组
在添加用户时, 可以指定将该用户添加到哪个组中, 同样的用 root 的管理权限可以改变某个用户所在的组。
usermod -g 新组名 用户名
usermod -d 目录名 用户名
:改变该用户登录的初始目录。 特别说明:用户需要有进入到新目录的权限。
权限基本介绍
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
0-9 位说明:
第 0 位确定文件类型(d, - , l , c , b)
- l 是链接, 相当于 windows 的快捷方式
- d 是目录, 相当于 windows 的文件夹
- c 是字符设备文件, 鼠标, 键盘
- b 是块设备, 比如硬盘
- -为普通文件
第 1-3 位确定所有者**(该文件的所有者**) 拥有该文件的权限。 —User
第 4-6 位确定所属组(同用户组的) 拥有该文件的权限, —Group
第 7-9 位确定其他用户拥有该文件的权限 —Other
rwx权限详解
rwx作用到文件:
-
[ r ] 代表可读(read): 可以读取,查看
-
[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限, 才能删除该文件.
-
[ x ]代表可执行(execute):可以被执行
rwx作用到目录:
-
[ r ]代表可读(read): 可以读取, ls 查看目录内容
-
[ w ]代表可写(write): 可以修改, 对目录内创建+删除+重命名目录
-
[ x ]代表可执行(execute): 可以进入该目录
案例:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
第一个字符代表文件类型: - l d c b
其余字符每 3 个一组(rwx) 读® 写(w) 执行(x)
第一组 rwx : 文件拥有者的权限是读、 写和执行
第二组 rw- : 与文件拥有者同一组的用户的权限是读、 写但不能执行
第三组 r-- : 不与文件拥有者同组的其他用户的权限是读不能写和执行
可用数字表示为: r=4,w=2,x=1 因此 rwx=4+2+1=7 , 数字可以进行组合
其他说明:
1 文件:硬连接数 或 目录:子目录数 + 文件数
root 用户
root 组
1213 文件大小(字节),如果是文件夹,显示 4096字节
Feb 2 09:39 最后修改日期
abc 文件名
修改权限chmod
通过 chmod 指令, 可以修改文件或者目录的权限。
第一种方式: + 、 -、 = 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、 g、 o 的总和)
1) chmod u=rwx,g=rx,o=x 文件/目录名
-
chmod o+w 文件/目录名
-
chmod a-x 文件/目录名
案例:d
- 给 abc 文件 的所有者读写执行的权限, 给所在组读执行权限, 给其它组读执行权限。
chmod u=rwx,g=rx,o=rx abc
- 给 abc 文件的所有者除去执行的权限, 增加组写的权限
chmod u-x,g+w abc
- 给 abc 文件的所有用户添加读的权限
chmod a+r abc
第二种方式: 通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于chmod 751 文件/目录名
修改所有者-chown
chown newowner 文件/目录
改变所有者
chown newowner:newgroup 文件/目录
改变所有者和所在者
-R 如果是目录 则使其下所有子文件或目录递归生效
案例:
请将 /home/abc.txt 文件的所有者修改成 tom
chown tom /home/abc.txt
修改所在组-chgrp
chgrp newgroup 文件/目录
改变文件/目录所在组
案例:请将 /home/test 目录下所有的文件和目录的所在组都修改成 shaolin(少林)
chgrp -R shaolin /home/test
11. 定时任务调度
crond任务调度
crontab 进行 定时任务的设置
任务调度: 是指系统在某个时间执行的特定的命令或程序。
任务调度分类: 1.系统工作: 有些重要的工作必须周而复始地执行。 如病毒扫描等
个别用户工作: 个别用户可能希望执行某些程序, 比如对 mysql 数据库的备份。
基本语法
crontab [选项]
如: crontab -e */1 * * * * ls –l /etc/ > /tmp/to.txt
意思说每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
参数细节说明
特殊符号说明
案例
实例
每隔 1 分钟, 将当前日期和日历都追加到 /home/mycal 文件中。
步骤:
(1) vim /home/my.sh
写入内容: date >> /home/mycal
和 cal >> /home/mycal
(2) 给 my.sh 增加执行权限, chmod u+x /home/my.sh
(3) crontab -e 增加 */1 * * * * /home/my.sh
crond相关指令
crontab -r
:终止任务调度
crontab -l
:列出当前有哪些任务调度
service crond restart
: 重启任务调度
at定时任务
介绍
-
at 命令是一次性定时计划任务, at 的守护进程 atd 会以后台模式运行, 检查作业队列来运行。
-
默认情况下, atd 守护进程每 60 秒检查作业队列, 有作业时, 会检查作业运行时间, 如果时间与当前时间匹配, 则运行此作业。
-
at 命令是一次性定时计划任务, 执行完一个任务后不再执行此任务了
-
在使用 at 命令的时候, 一定要保证 atd 进程的启动 , 可以使用相关指令来查看
ps -ef | grep atd
:可以检测 atd 是否在运行
- 画一个示意图
命令格式
at [选项] [时间]
Ctrl+D 来结束 at命令的输入,要输两次
at 命令选项
atq
:查看系统未执行的任务
atrm 编号
:删除指定编号未执行的任务
at时间定义
-
接受在当天的 hh:mm(小时:分钟) 式的时间指定。 假如该时间已过去, 那么就放在第二天执行。 例如: 04:00
-
使用 midnight(深夜) , noon(中午) , teatime(饮茶时间, 一般是下午 4 点) 等比较模糊的词语来指定时间。
-
采用 12 小时计时制, 即在时间后面加上 AM(上午) 或 PM(下午) 来说明是上午还是下午。 例如: 12pm
-
指定命令执行的具体日期, 指定格式为 month day(月 日) 或 mm/dd/yy(月/日/年) 或 dd.mm.yy(日.月.年) , 指定的日期必须跟在指定时间的后面。 例如: 04:00 2021-03-1
-
使用相对计时法。 指定格式为: now + count time-units , now 就是当前时间, time-units 是时间单位, 这里能够是 minutes(分钟) 、 hours(小时) 、 days(天) 、 weeks(星期) 。 count 是时间的数量, 几天, 几小时。 例如: now + 5 minutes
-
直接使用 today(今天) 、 tomorrow(明天) 来指定完成命令的时间。
案例
:1分钟后将ls命令结果输出到data1.txt文件中
12. 磁盘分区、挂载
Linux分区
- Linux 来说无论有几个分区, 分给哪一目录使用, 它归根结底就只有一个根目录, 一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分
- Linux 采用了一种叫“载入”的处理方法, 它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。 这时要载入的一个分区将使它的存储空间在一个目录下获得。
Linux硬盘标识说明
-
Linux 硬盘分 IDE 硬盘和 SCSI 硬盘, 目前基本上是 SCSI 硬盘
-
对于 IDE 硬盘, 驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型, 这里是指 IDE 硬盘了**。 “x”为盘号(a 为基本盘, b 为基本从属盘, c 为辅助主盘, d 为辅助从属盘)** ,“~”代表分区, 前四个分区用数字 1 到 4 表示, 它们是 主分区或扩展分区, 从 5 开始就是逻辑区。 例, hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
-
对于 SCSI 硬盘则标识为“sdx~”, SCSI 硬盘是用“sd”来表示分区所在设备的类型的, 其余则和 IDE 硬盘的表示方法一样。
查看所有设备挂载情况
命令 : lsblk
者lsblk -f
增加磁盘挂载步骤
- 虚拟机添加硬盘 2) 分区 3) 格式化 4) 挂载 5) 设置可以自动挂载
添加硬盘
分区
分区命令:fdisk /dev/sdb
开始对/sdb硬盘设别进行分区:
m 显示命令列表
p 显示磁盘分区 (同 fdisk -l)
b 新增分区
d 删除分区
w 写入并退出
说明: 开始分区后输入 n, 新增分区, 然后选择 p , 分区类型为主分区。 两次回车默认剩余全部空间。 最后输入 w写入分区并退出, 若不保存退出输入 q。
格式化
分区命令:mkfs -t ext4 /dev/sdb1
其中 ext4 是分区类型
挂载
挂载: 将一个分区与一个目录联系起来
mount 设备名称 挂载目录
例如:mount /dev/sdb1 /newdisk
注意:用命令行挂载,重启reboot后会失效
取消挂载
umount 设备名称 或者 挂载目录
例如:umount /dev/sdb1
或者umount /newdisk
永久挂载
通过修改/etc/fstab 实现挂载
添加完成后 执行 mount –a 即刻生效
磁盘情况查询
查询整体磁盘情况
查询指定目录的磁盘占用情况, 默认为当前目录
基本语法: du -h
选项:
-s 仅显示总计,只列出最后加总的值。
-h 带计量单位
-a 包含文件
–max-depth=1 子目录深度
-c 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
案例:
磁盘情况-工作实用指令
- 统计/opt 文件夹下文件的个数
ls -l /opt | grep "^-" | wc -l
- 统计/opt 文件夹下目录的个数
ls -l /opt | grep "^d" | wc -l
- 统计/opt 文件夹下文件的个数, 包括子文件夹里的
ls -lR /opt | grep "^-" | wc -l
- 统计/opt 文件夹下目录的个数, 包括子文件夹里的
ls -lR /opt | grep "^d" | wc -l
- 以树状显示目录结构 tree 目录 , 注意, 如果没有 tree ,则使用
yum install tree
安装
13. 网络配置
Linux网络配置原理图
查看网络IP和网关
查看虚拟网络编辑器和修改IP地址:
查看网关
查看 windows 环境的中 VMnet8 网络配置 (ipconfig 指令)
查看 linux 的网络配置 ifconfig
测试主机之间连通性 ping
ping 目的主机
(功能描述: 测试当前服务器是否可以连接目的主机)
Linux网络环境配置(指定ip)
第一种方法(自动获取):
说明: 登陆后, 通过界面的来设置自动获取 ip, 特点: linux 启动后会自动获取 IP,缺点是每次自动获取的 ip 地址可能不一样 。
第二种方法(指定 ip)
直接修改配置文件来指定 IP,并可以连接到外网(程序员推荐)
做法:编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33
案例:将 ip 地址配置的静态的,ip 地址为 192.168.200.130
ifcfg-ens33 文件说明:
DEVICE-eth0 #接口名(设备,网卡)
HWADDR=00:0C:2x:6x:0x:xx #MAC 地址
TYPE=Ethernet #网络类型(通常是 Ethemet)
UUID-926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机 id
ONBOOT-yes #系统启动的时候网络接口是否有效 (yes/no)
#IP 的配置方法[none|static |bootp|dhcp] (引导时不使用协议|静态分配 IP| BOOTP 协议|DHCP 协议)
BOOTPROTO=static
#IP 地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
这里修改了Linux的ip,还要去修改虚拟网络编辑器中的ip和网关。
重启网络服务或者重启系统生效
service network restart
、 reboot
设置主机名和hosts映射
设置主机名
-
为了方便记忆, 可以给 linux 系统设置主机名, 也可以根据需要修改主机名
-
指令 hostname : 查看主机名
-
修改文件在 /etc/hostname 指定
-
修改后, 重启生效
设置 hosts 映射
如何通过 主机名能够找到(比如 ping) 某个 linux 系统?
Windows:
在 C:\Windows\System32\drivers\etc\hosts 文件指定即可
案例: 192.168.200.130 hspedu100
Linux:
在 /etc/hosts 文件 指定
案例: 192.168.147.223 xiaomi
主机名解析过程分析(Hosts、 DNS)
Hosts是一个文本文件, 用来记录 IP 和 Hostname(主机名)的映射关系
DNS, 就是 Domain Name System 的缩写, 翻译过来就是域名系统,互联网上作为域名和 IP 地址相互映射的一个分布式数据库 。
应用实例: 用户在浏览器输入了 www.baidu.com
-
浏览器先检查浏览器缓存中有没有该域名解析 IP 地址, 有就先调用这个 IP 完成解析; 如果没有, 就检查 DNS 解析器缓存, 如果有直接返回 IP 完成解析。 这两个缓存以理解为 本地解析器缓存。
-
一般来说, 当电脑第一次成功访问某一网站后, 在一定时间内, 浏览器或操作系统会缓存他的 IP 地址(DNS 解析记录。如 在 cmd 窗口中输入:
ipconfig /displaydns //DNS 域名解析缓存
ipconfig /flushdns //手动清理dns缓存
-
如果本地解析器缓存没有找到对应映射, 检查系统中 hosts 文件中有没有配置对应的域名 IP 映射, 如果有, 则完成解析并返回。
-
如果 本地 DNS 解析器缓存 和 hosts 文件 中均没有找到对应的 IP, 则到域名服务 DNS 进行解析域
-
示意图
14. 进程管理
-
在 LINUX 中, 每个执行的程序都称为一个进程。 每一个进程都分配一个 ID 号(pid,进程号)。
-
每个进程都可能以两种方式存在的。 前台与后台, 所谓前台进程就是用户目前的屏幕上可以进行操作的。 后台进程则是实际在操作, 但由于屏幕上无法看到的进程, 通常使用后台方式执行。
-
一般系统的服务都是以后台进程的方式存在, 而且都会常驻在系统中。 直到关机才才结束
显示执行的进程
ps 命令是用来查看目前系统中, 有哪些正在执行, 以及它们执行的状况。 可以不加任何参数.
语法: ps [选项]
比如我看看有没有 sshd 服务 : ps –aux|grep xxx
指令显示说明:(System V 展示风格 )
USER: 用户名称
PID: 进程号
%CPU: 进程占用 CPU 的百分比
%MEM: 进程占用物理内存的百分比
VSZ: 进程占用的虚拟内存大小(单位: KB)
RSS: 进程占用的物理内存大小(单位: KB)
TT: 终端名称,缩写 .
STAT: 进程状态, 其中 S-睡眠, s-表示该进程是会话的先导进程, N-表示进程拥有比普通优先级更低的优先级, R-正在运行, D-短期等待, Z-僵死进程, T-被跟踪或者被停止等等
STARTED: 进程的启动时间
TIME: CPU 时间, 即进程使用 CPU 的总时间
COMMAND: 启动进程所用的命令和参数, 如果过长会被截断显示
要求: 以全格式显示当前所有的进程, 查看进程的父进程。 查看 sshd 的父进程信息。
ps -ef
是以全格式显示当前所有的进程
-e 显示所有进程。 -f 全格式
ps -ef|grep sshd
(BSD 展示风格)
UID: 用户 ID
PID: 进程 ID
PPID: 父进程 ID
C: CPU 用于计算执行优先级的因子。 数值越大, 表明进程是 CPU 密集型运算, 执行优先级会降低; 数值越小, 表明进程是 I/O 密集型运算, 执行优先级会提高
STIME: 进程启动的时间
TTY: 完整的终端名称
TIME: CPU 时间
CMD: 启动进程所用的命令和参数
终止进程kill和killall
若是某个进程执行一半需要停止时, 或是已消了很大的系统资源时, 此时可以考虑停止该进程。 使用 kill 命令来完成此项任务。
kill [选项] 进程号
(功能描述: 通过进程号杀死/终止进程)
killall 进程名称
(功能描述: 通过进程名称杀死进程, 也支持通配符, 这在系统因负载过大而变得很慢时很有用)
常用选项:
-9 强迫进程立即停止
案例:
- 案例 1: 踢掉某个非法登录用户
kill 进程号 , 比如 kill 11421
- 案例 2: 终止远程登录服务 sshd, 在适当时候再次重启 sshd 服务
kill sshd 对应的进程号; /bin/systemctl start sshd.service
-
案例 3: 终止多个 gedit , 演示 killall gedit (在Linux服务器打开文本文件会有gedit进程)
-
案例 4: 强制杀掉一个终端, 指令 kill -9 bash 对应的进程号
查看进程树 pstree
pstree [选项]
,可以更加直观的来看进程信息
常用选项:
-p :显示进程的 PID
-u :显示进程的所属用户
服务(service)管理
服务(service) 本质就是进程, 但是是运行在后台的, 通常都会监听某个端口, 等待其它程序的请求, 比如(mysqld , sshd防火墙等), 因此我们又称为守护进程, 是 Linux 中非常重要的知识点。
service 管理指令
-
service 服务名 [start | stop | restart | reload | status]
-
在 CentOS7.0 后 很多服务不再使用 service ,而是 systemctl (后面专门讲)
-
service 指令管理的服务在 /etc/init.d 查看
案例:
请使用 service 指令, 查看, 关闭, 启动 network
指令:
service network status
service network stop
service network start
查看服务名
方式1:使用 setup -> 系统服务 就可以看到全部。
方式 2: /etc/init.d 看到 service 指令管理的服务
ls -l /etc/init.d
服务的运行级别
Linux 系统有 7 种运行级别(runlevel): 常用的是级别 3 和 5
运行级别 0: 系统停机状态, 系统默认运行级别不能设为 0, 否则不能正常启动
运行级别 1: 单用户工作状态, root 权限, 用于系统维护, 禁止远程登陆
运行级别 2: 多用户状态(没有 NFS), 不支持网络
运行级别 3: 完全的多用户状态(有 NFS), 无界面, 登陆后进入控制台命令行模式
运行级别 4: 系统未使用, 保留
运行级别 5: X11 控制台, 登陆后进入图形 GUI 模式
运行级别 6: 系统正常关闭并重启, 默认运行级别不能设为 6, 否则不能正常启动
开机流程:
CentOS7后 运行级别说明
在 /etc/initab;
进行了简化 , 如下:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
# To view current default target, run:
systemctl get-default
# To set a default target, run:
systemctl set-default TARGET.target
chkconfig 指令
通过 chkconfig 命令可以给服务的各个运行级别设置自启动 开启/关闭
chkconfig 指令管理的服务在 /etc/init.d 查看
注意: Centos7.0 后, 很多服务使用 systemctl 管理
基本语法:
1)查看服务 chkconfig --list [| grep xxx]
-
chkconfig 服务名 --list
-
chkconfig --level 5 服务名 on/off
案例 : 对 network 服务 进行各种操作, 把 network 在 3 运行级别,关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on
注意:需要重启机器 reboot 生效
systemctl管理指令
基本语法:systemctl [start | stop | restart | status] 服务名
(仅对本次有效)
systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
systemctl设置服务自启动状态
systemctl list-unit-files [ | grep 服务名]
(查看服务开机启动状态, grep 可以进行过滤)
systemctl enable 服务名
(设置服务开机启动)
systemctl disable 服务名
(关闭服务开机启动)
systemctl is-enabled 服务
名 (查询某个服务是否是自启动的)
案例:
查看当前防火墙的状况, 关闭防火墙和重启防火墙。 => firewalld.service
systemctl status firewalld
systemctl stop firewalld
systemctl start firewalld
关闭或者启用防火墙后, 立即生效。 [telnet 测试 某个端口即可]
这种方式只是临时生效, 当重启系统后, 还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效, 要使用 systemctl [enable|disable] 服务名 .
打开或者关闭指定端口
如果我们把防火墙打开, 那么外部请求数据包就不能跟服务器监听端口通讯。 这时, 需要打开指定的端口。 比如 80、 22、 8080 等。
firewall指令
-
打开端口:
firewall-cmd --permanent --add-port=端口号/协议
-
关闭端口:
firewall-cmd --permanent --remove-port=端口号/协议
-
重新载入,才能生效 :
firewall-cmd --reload
-
查询端口是否开放:
firewall-cmd --query-port=端口/协议
netstat -anp | more
:查询端口状态和对应的协议
动态监控进程
top 与 ps 命令很相似。 它们都用来显示正在执行的进程。 top 与 ps 最大的不同之处, 在于 top 在执行一段时间可以更新正在运行的的进程 。
基本语法:
top [选项]
选项说明:
交互操作说明:
在top查看页面操作。
案例 1.监视特定用户, 比如我们监控 tom 用户
top: 输入此命令, 按回车键, 查看执行的进程。
u: 然后输入“u”回车, 再输入用户名, 即可
案例 2: 终止指定的进程, 比如我们要结束 tom 登录
top: 输入此命令, 按回车键, 查看执行的进程。
k: 然后输入“k”回车, 再输入要结束的进程 ID 号
案例 3:指定系统状态更新的时间(每隔 10 秒自动更新), 默认是 3 秒
top -d 10
监控网络状态
查看系统网络情况 netstat
基本语法
netstat [选项]
选项说明:
-an 按一定顺序排列输出
-p 显示哪个进程在调用
应用案例
请查看服务名为 sshd 的服务的信息。
netstat -anp | grep sshd
检测主机连接命令 ping:
是一种网络检测工具, 它主要是用检测远程主机是否正常, 或是两部主机间的网线或网卡故障。
如: ping 对方ip地址
15. RPM与YUM
RPM包的管理
rpm 用于互联网下载包的打包及安装工具, 它包含在某些 Linux 分发版中。 它生成具有.RPM 扩展名的文件。 RPM是 RedHat Package Manager(RedHat 软件包管理工具) 的缩写, 类似 windows 的 setup.exe, 这一文件格式名称虽然打上了 RedHat 的标志, 但理念是通用的。
RPM的简单查询指令
查询已安装的 rpm 列表 rpm –qa|grep xx
举例: 看看当前系统, 是否安装了 firefox
指令: rpm -qa | grep firefox
rpm 包名基本格式
一个 rpm 包名: firefox-60.2.2-1.el7.centos.x86_64
名称:firefox
版本号: 60.2.2-1
适用操作系统: el7.centos.x86_64
表示 centos7.x 的 64 位系统
如果是 i686、 i386 表示 32 位系统, noarch 表示通用
rpm的其他查询指令
rpm -qa
:查询所安装的所有 rpm 软件包
rpm -qa | more
rpm -qa | grep X [rpm -qa | grep firefox ]
rpm -q 软件包名 :查询软件包是否安装
rpm -qi 软件包名
: 查询软件包信息
案例: rpm -qi firefox
rpm -ql 软件包名 :查询软件包中的文件
比如: rpm -ql firefox
rpm -qf 文件全路径名
查询文件所属的软件包
举例:
rpm -qf /etc/passwd
卸载rpm包
基本语法
rpm -e RPM 包的名称
应用案例
删除 firefox 软件包
rpm -e firefox (erase)
细节讨论:
- 如果其它软件包依赖于您要卸载的软件包, 卸载时则会产生错误信息。
如: rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
- 如果我们就是要删除 foo 这个 rpm 包**, 可以增加参数 --nodeps ,就可以强制删除**, 但是一般不推荐这样做, 因为依赖于该软件包的程序可能无法运行
如: rpm -e --nodeps foo
安装rpm包
基本语法:
rpm -ivh RPM包全路径名称
参数:
i=install 安装
v=verbose 提示
h=hash 进度条
案例:演示卸载和安装 firefox 浏览器
rpm -e firefox
rpm -ivh firefox
yum
Yum 是一个 Shell 前端软件包管理器。 基于 RPM 包管理, 能够从指定的服务器自动下载 RPM 包并且安装, 可以自动处理依赖性关系, 并且一次安装所有依赖的软件包。 (yum服务器通常由软件包的提供者或Linux发行版的维护者在互联网上运行)
yum基本指令
查询 yum 服务器是否有需要安装的软件
yum list | grep xx
安装指定的yum包
yum install xxx
下载安装
16. 搭建JavaEE环境
安装JDK
mkdir /opt/jdk
2)将JDK tar压缩包 通过 xftp6 上传到 /opt/jdk 下
-
cd /opt/jdk
-
解压
tar -zxvf jdk-8u261-linux-x64.tar.gz
-
mkdir /usr/local/java
6) mv /opt/jdk/jdk1.8.0_261 /usr/local/java
-
配置环境变量的配置文件
vim /etc/profile
-
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
9) export PATH=\$JAVA_HOME/bin:$PATH
10) source /etc/profile
[让新的环境变量生效]
tomcat安装
-
上传安装文件, 并解压缩到/opt/tomcat
-
进入解压目录/bin , 启动 tomcat ./startup.sh
-
开放端口 8080 , 回顾 firewall-cmd
MySQL安装
-
新建文件夹/opt/mysql,并cd进去
-
运行
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.24-1.el7.x86_64.rpm-bundle.tar
,下载mysql8.0安装包
PS:centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除。
-
运行
tar -xvf mysql-8.0.24-1.el7.x86_64.rpm-bundle.tar
-
运行
rpm -qa|grep mari
,查询mariadb相关安装包
-
运行
rpm -e --nodeps mariadb-lib
s,卸载 -
然后开始真正安装mysql,依次运行以下几条
rpm -ivh mysql-community-common-8.0.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.24-1.el7.x86_64.rpm
上面安装报错缺少依赖:执行yum install openssl-devel
rpm -ivh mysql-community-client-8.0.24-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.24-1.el7.x86_64.rpm
rpm -ivf mysql-community-test-8.0.24-1.el7.x86_64.rpm
上面安装报错,缺少依赖,执行yum install perl-JSON perl-Test-Simple
…
-
运行
systemctl start mysqld.service
,启动mysql -
然后开始设置root用户密码
Mysql自动给root用户设置随机密码,运行grep "password" /var/log/mysqld.log
可看到当前密码
-
运行
mysql -u root -p
,用root用户登录,提示输入密码可用上述的,可以成功登陆进入mysql命令行 -
设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行
set global validate_password.policy=0;
提示密码设置策略
(validate_password_policy默认值1,)
-
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
修改root密码运行flush privileges;使密码设置生效。如果需要远程访问,需要开启防火墙端口。
MySQL安装完毕。