参考
https://www.bilibili.com/video/BV1dW411M7xL
https://www.runoob.com/linux/linux-tutorial.html
Linux
简介
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
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)组合。
Linux 系统启动过程
运行级别
Linux系统有7个运行级别(runlevel):
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
切换运行级别
init n
找回root密码
重启 -> 3 秒之内要按一下回车,出现如下界面 -> 然后输入e -> 看到新界面,选中第二行(编辑内核) -> 在这输入1
回车 -> 再次输入b,进入单用户模式
使用passwd修改密码
安装
宿主机系统:Windows 10
虚拟机软件:VMware Workstation 16
CentOS
操作系统 ISO
镜像:CentOS 7
SSH终端软件:MobaXterm
参考
B站视频:https://www.bilibili.com/video/BV1bA411b7vs
视频配套(windows安装):https://mp.weixin.qq.com/s/onVwwEQ1DAwbvK7qS2YNxg
csdn:https://blog.csdn.net/java_xinshou1/article/details/100010099、https://blog.csdn.net/qq_40950957/article/details/80467513
菜鸟教程:https://www.runoob.com/linux/linux-install.html
CentOS:http://mirrors.aliyun.com/centos/7/isos/x86_64/
VMTools
可以建立共享目录,剪切板共享
Linux目录结构
https://www.runoob.com/linux/linux-system-contents.html
Linux vi/vim
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。
快捷键
快捷键 | 说明 |
---|---|
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
dd | 删除游标所在的那一整行(常用) |
ndd | n 为数字。删除光标所在的向下 n 行,例如 5dd 则是删除 5 行 (常用) |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 5yy 则是复制 5 行(常用) |
p | 粘贴 |
/word | 向光标之下搜索 |
?/word | 向光标之上搜索 |
n | 向下找下一个匹配 |
N | 向下找上一个匹配 |
:set nu | 显示行号 |
:set nonu | 与 set nu 相反,为取消行号! |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。可配合 :set nu |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
n |
n 为数字。光标向下移动 n 行(常用) |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
$ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
关机重启命令
shutdown
shutdown -h now 立即关机
shutdown -h 1 一分钟后关机
shutdown -r now 立即重启
halt
等同于直接关机
reboot
重启系统
sync
把内存数据同步到磁盘中
帮助指令
man 指令
help 指令
用户管理
用户注销
logout
https://www.runoob.com/linux/linux-user-manage.html
添加用户
useradd 选项 用户名
-d
指定用户主目录
-g
指定用户组
指定/修改密码
passwd 选项 用户名
删除用户
userdel 选项 用户名
带选项-r
则把用户的主目录一起删除
修改用户
usermod 选项 用户名
选项与useradd
一样
查询用户
id 用户名
切换用户
su 用户名
高权限切换低权限不用输密码
当需要返回原来用户时使用exit
查看当前用户
who am i
用户组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
创建组
groupadd 选项 组名
删除组
groupdel 组名
修改用户组
usermod -g 组名 用户名
与用户有关的系统文件
/etc/passwd, /etc/shadow, /etc/group
/etc/passwd
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
这个文件对所有用户都是可读的。
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow
存放加密后的密码。
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group
存放用户组的所有信息.
组名:口令:组标识号:组内用户列表
文件基本属性类
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
当为 d 则是目录
当为 - 则是文件;
若是 l 则表示为链接文档(link file);
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
目录显示4096
权限管理
文件目录所有者
默认用户创建文件后,文件所有组即为用户所在组
查看所有者
groupadd police:创建police组
useradd tom -g police tom:创建tom进police组
passwd tom:修改/设置tom密码
切换到tom用户
touch ok.txt:创建ok.txt文件
ls -ahl:查看当前目录所有者
修改所有者
chown tom apple.txt:修改apple.txt文件所有者为tom,但组没变
chown -R tom kkk:将kkk目录下所有递归所有者改为tom
chown user/group :同时修改所有者和所在组
修改文件所在组
chgrp police orange.txt:将orange.txt文件所在组修改为police组
chgrp -R police kkk:将kkk目录下所有递归所在组改为police
其他组
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
修改权限
chmod符号
u:所有者;g:所在组;o:其他人;a:所有人
chmod u=rwx,g=rx,o=rw abc.txt:对于abc.txt,所有者rwx,所在组rx,其他人rw
chmod u-x,g+w abc.txt:对于abc.txt,所有者减去x,所在组加上w
chmod a+w:对所有人加上w
chmod数字
各权限的分数对照表如下:
r:4
w:2
x:1
chmod 754 abc.txt:修改权限为rwx r-x r--
权限修改后需要重新登录才能生效
文件目录类指令
处理目录的常用命令
接下来我们就来看几个常见的处理目录的命令吧:
-
ls(英文全拼:list files): 列出目录及文件名
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)
-al ~:将家目录下的所有文件列出来(含属性与隐藏档)
-
cd(英文全拼:change directory):切换目录
cd ~:回到家目录
cd ..:回到上级目录
cd ./:当前目录下的
pwd(英文全拼:print work directory):显示目前的目录
-
mkdir(英文全拼:make directory):创建一个新的目录
默认只能一级一级创建
-p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
-
rmdir(英文全拼:remove directory):删除一个空的目录
不能删除非空目录
rm -rf 删除非空目录
-
cp(英文全拼:copy file): 复制文件或目录
cp 来源档(source) 目标档(destination)
cp -r:递归复制
\cp:强制覆盖,不会提示
-
rm(英文全拼:remove): 删除文件或目录
rm -rf:删除目录
rm -r:递归删除
rm -f:删除文件不提示
rm -i:提示
-
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
mv source destination:移动/重命名
mv -f:强制移动,不提示
mv -i:提示
mv -u:更新则更新
touch :Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。(可一次性创建多个文件)
文件内容查看
Linux系统中使用以下命令来查看文件的内容:
-
cat 由第一行开始显示文件内容
只读方式打开
cat -n:查看显示行号
cat file | more:分页浏览,空格下一页
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
-
more 一页一页的显示文件内容
空格:下一页
enter:下一行
b:上一页
q:立即结束浏览
-
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- 快捷键与more类似
-
head 只看头几行
- head -n:头n行
-
tail 只看尾巴几行
- tail -n:尾n行
">"指令与">>"指令
">"覆盖,不存在就创建
ls -l > a.txt
">>"追加
ls -l >> b.txt
echo
字符串输出
echo $PATH:输出环境变量
ln
连接:硬连接;软连接(快捷方式)
ln -s 文件或目录 链接
删除链接 rm -rf 链接
pwd查看时仍是当前目录
history
查看已执行的指令
history n:最近n条
!n:执行历史编号n的指令
时间日期类
date
data:当前年月日 星期 时分秒
data "+%Y-%m-%d":当前年月日
date "+%Y年%m月%d日 %H:%M:%S":当前年月日时分秒
data -s:设置时间
cal
cal:当月日历
cal 年:某年日历
搜索查找类
find
find /home -name hello.txt:在home目录查找名字为hello.txt文件
find /opt -user nobody:在opt目录下查找用户名为nobody文件
find / -size +20M:根目录下查找大于20M的文件
find /home *.txt:查找home目录下txt文件
locate
ocate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。
locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:updatedb
- locate 文件名:查找文件
grep
grep 命令用于查找文件里符合条件的字符串。
与|一起使用
cat hello.txt | grep hello:查找
cat hello.txt | grep -n hello:查找并显示行号
压缩和解压缩类
gzip
- 压缩,不保留原文件
gunzip
- 解压
zip
- zip -r mypackage.zip ./test/:将/test/目录解压到 mypackage.zip
unzip
- unzip -d ./xm/mypackage.zip:将mypackage.zip解压到xm目录下
tar
tar -zcvf a.tar.gz a.txt b.txt:将a.txt和b.txt压缩到a.tar.gz
tar -zcvf myhome.tar.gz /home/:对整个文件/目录压缩
tar -zxvf a.tar.gz:解压到当前目录
tar -zxvf myhome.tar -C /opt/:解压指定目录,目录要存在
任务调度
Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
而 linux 任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
如果是简单的任务,可以不用写脚本,直接在crontab中加入任务即可
如果任务复杂,需要写脚本
语法
crontab [选项]
参数说明:
-e : 执行文字编辑器来设定时程表
-r : 删除目前的时程表
-l : 列出目前的时程表
时间格式如下:
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
例:
crontab -e
*/1 * * * * ls -l /etc >> /tmp/to.txt
保存退出
每一分钟执行一次追加到/tmp/to.txt
cd /home/
vim mytask.sh:编辑脚本mytask.sh
date >> /tmp/mydate
chmod 744 mytask.sh:给mytask.sh执行权限
crontab -e
加上 */1 * * * * /home/mytask.sh
cd /home/
vim mytask2.sh:编辑脚本mytask2.sh
date >> /tmp/mycal
cal >>/tmp/mycal
chmod 744 mytask2.sh:给mytask2.sh执行权限
crontab -e
加上 */1 * * * * /home/mytask2.sh
完成
下面再看看几个具体的例子:
0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
注意:当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1
磁盘管理
Linux磁盘管理好坏直接关系到整个系统的性能问题。
Linux磁盘管理常用三个命令为df、du和fdisk。
-
df:列出文件系统的整体磁盘使用量
df:将系统内所有的文件系统列出来
df -h:将容量结果以易读的容量格式显示出来
-
du:检查磁盘空间使用量
du:只列出当前目录下的所有文件夹容量(包括隐藏文件夹)
du -a:将文件的容量也列出来
du -ach --max-depth=1 /opt:查询opt目录磁盘占用情况,深度为1
ls -l /home | grep "^-" | wc -l:统计home目录下,以”-“打头的文件(文件个数)
ls -l /home | grep "^d" | wc -l:统计home目录下,以”d“打头的文件(目录个数)
ls -lR /home | grep "^-" | wc -l:统计home目录下(包括子目录下),以”-“打头的文件(文件个数)
ls -lR /home | grep "^d" | wc -l:统计home目录下(包括子目录下),以”d“打头的文件(目录个数)
fdisk:用于磁盘分区
mkfs:格式化磁盘
tree
yum install tree
树状显示目录文件
分区 - 文件系统
lsblk -f:查看分区和挂载情况
lsblk :还可以查看大小
磁盘挂载使用 mount
命令,卸载使用 umount
命令。
进程管理
ps
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
-
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除(僵尸进程)
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
ps -aux | grep sshd:查看关键字有sshd的进程
ps -ef | more:查看父进程ppid
pstree -u:树状显示进程
top
top命令用于实时显示 process 的动态。使用权限:所有使用者。
top -u 用户名:查看给用户的进程
top -d 时间:默认3秒刷新一次
top -n 5:刷新5次则退出
kill
kill 命令用于删除执行中的程序或工作。
语法
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
参数说明:
-l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
-s <信息名称或编号> 指定要送出的信息。
[程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
使用 kill -l 命令列出所有可用信号。
最常用的信号是:
1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。
服务
参考
systemctl
启动网络服务
- systemctl start network.service
停止网络服务
- systemctl stop network.service
重启网络服务
- systemctl restart network.service
查看网络服务状态
- systemctl status network.serivce
查看服务
setup
- 图形终端,查看服务
ls -l /etc/init.d/
- 终端使用,查看服务
服务级别
chkconfig
chkconfig -level5 sshd off:运行级别为5时sshd关闭
chkconfig -level5 firewalld off:运行级别为5时防火墙关闭
chkconfig firewalld off:所有运行级别下关闭防火墙
chkconfig firewalld on:所有运行级别下开启防火墙
重启后生效
telnet
telnet命令用于远端登入。
执行telnet指令开启终端机阶段作业,并登入远端主机。
实例
登录远程主机
# telnet 192.168.0.5
//登录IP为 192.168.0.5 的远程主机
netstat
netstat 命令用于显示网络状态。
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
- netstat -anp | more:查看全部服务
包管理
rpm
rpm 命令用于管理套件。
rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
rpm -qa | grep firefox:查询火狐
rpm -qa:查询所有
rpm -q firefox:查询火狐
rpm -qi firefox:查询软件包信息
rpm -ql firefox:查询火狐安装了哪些文件/位置
rpm -qf /etc/passwd:查询/etc/passwd属于那个软件包
rpm -e firefox:卸载火狐
如果存在依赖性会提示,不推荐强制删除
安装
找到要安装的rpm包,挂载centos的ios文件,在/media/下找
移动到 /opt/下
rpm -ivh rpm软件包
yum
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum常用命令
1、列出所有可更新的软件清单命令:yum check-update
2、更新所有软件命令:yum update
3、仅安装指定的软件命令:yum install
4、仅更新指定的软件命令:yum update
5、列出所有可安裝的软件清单命令:yum list
6、删除软件包命令:yum remove
7、查找软件包命令:yum search
8、清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers