【小白入门 通俗易懂】2021韩顺平 一周学会Linux

Shell:

桥接模式:同一个网段下设置IP地址,虚拟系统可以和外部系统通讯。
NAT模式:网络地址转换模式,可以与外部通讯(单向),不造成IP冲突

直接复制安装好的虚拟机文件(在VirtualMachine里)
VM内打开.vmx文件

boot 存放启动linux时的核心文件
root 系统管理员的用户主目录
lib 系统开机所需的动态连接共享库
bin 存放经常使用的指令
etc 存放配置文件
usr 存放应用程序和文件
dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储
mnt 临时挂载别的文件系统
i 进入编辑模式
:q! 强制退出并且不保存
一般模式下(指令不会出现,但可能有提示):
yy 拷贝当前行
5yy 拷贝当前行向下5行
p 粘贴
dd 删除当前行
5dd 删除当前行向下5行
G 定位到文档的最末行
gg 定位到最首行
u 撤销动作
5 shift+g 定位到第5行
命令行下:
/关键字 查找关键字,找到后按n选择找到的内容
:set nu 显示行号
:set nonu 取消显示行号
shutdown -h now 立即关机 相当于halt
shutdown -h 1 一分钟后关机 -h(halt)
shutdown -r now 重启 相当于reboot
sync 把内存的数据同步到磁盘
su 登录为root用户
root创建用户,每个用户对应一个目录
useradd jacky 添加用户jacky,该用户的目录在/home/jacky
useradd -d /home/test king 指定目录添加用户
userdel jacky 删除用户jacky
userdel -r jacky 删除用户jacky及其家目录
passwd 用户名 设定密码
pwd 显示当前用户所在目录
who am i 查看当前用户(第一次登录的用户)
groupadd 组名 添加组
groupdel 组名 删除组
useradd -g HGD P 添加用户P,并将其放入HGD组
usermod -g TGD P 将P放入TGD组
/etc/passwd 记录用户信息

/etc/shadow 口令配置文件

/etc/group 组的配置文件


查看当前默认级别:
systemctl get-default
设定默认级别:
- 多用户有网络 systemctl set-default multi-user.target
- 图形界面 systemctl set-default graphical.target
- 进入开机界面按e进行编辑
- 找到linux*16 ...... UTF-8 在后面输入 空格init=/bin/sh,接着输入CTRL+X 进入单用户模式
- 在光标闪烁的地方输入: mount -o remount,rw / 回车
- 输入passwd回车,然后输入两次新密码(别用小键盘输入),成功的话会显示passwd.........
- 输入touch /.autorelabel回车
- 输入exec /sbin/init等待
man ls 获取关于ls的信息(空格下滑)
ls -a 列出所有文件(包括隐藏)
(linux下隐藏文件以.开头)
ls -l 单列输出(更详细)缩写ll
-a -l 可以组合使用即 -la
ls -la /root 显示root下的内容
help命令(获得shell内置命令的帮助信息)
pwd 当前工作目录的绝对路径
绝对路径与相对路径:

cd 回到自己的家目录
mkdir -p ~/animal/tiger 创建多级目录
rmdir 删除空目录
rm -rf 强制删除目录 -rf(recursive force递归强制删除不提示)
touch a.txt 创建空文件
cp -r source dest 将source下的所有文件拷贝到dest(-r recursive递归复制)
\cp -r source dest 强制覆盖(dest内有source的情况下)
mv oldNameFile newNameFile 重命名(同一目录下)
mv 源目录 目标目录 移动整个目录
cat -n 文件名 显示行号查看文件
cat 文件名 | more 显示文件的一部分
more的快捷键

less 文件名 分屏查看文件内容

echo $PATH 输出环境变量到控制台
head -5 文件 查看文件前5行(默认10行)
tail -5 文件 显示文件后五行(默认10行)
tail -f 文件 实时监控文件更新
echo "hello" > mydata.txt 将显示终端的内容输出到mydata.txt,相当于直接往文件里写入数据(覆盖)
echo "hello" >> mydata.txt将显示终端的内容输出到mydata.txt,相当于直接往文件里写入数据(追加)
ln 软链接即符号链接

ln -s /root /home/myroot 为/root创建软链接myroot(快捷方式)(也可以为文件创建软连接)
rm /home/myroot 删除软链接
history 查看历史命令
history 10 查看最近10条命令
!5 执行历史上的第5条指令
查看日期

设置日期

find 搜索范围 选项

find /home -name hello.txt 在/home下查找按名字查找hello.txt
find / -size +200M 根目录下查找大于200M(M,k,G)的文件(+大于 -小于)
updatedb 更新locate数据库
locate hello.txt 快速定位hello.txt文件
which ls 查看指令ls在哪个目录
cat a.txt | grep -n "hello" 从a.txt中查找hello,grep过滤查找,显示行号
grep -n "hello" /home/hello.txt
上面两条指令相同

选项:

gzip 文件 压缩文件(原文件消失)
gunzip 文件.gz 解压文件
zip -r myhome.zip /home/ 压缩目录/home
unzip -d /opt/tmp myhome.zip 将myhome.zip解压到指定目录/opt/tmp
tar [选项] XXX.tar.gz 文件 打包文件(原文件仍然存在)
-x, --extract 从存档展开文件
-c, --create 建立新的存档

- tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt 把pig.txt和cat.txt两个文件压缩为pc.tar.gz
- tar -zcvf pc.tar.gz /home/ 将/home文件夹压缩成pc.tar.gz
- tar -zxvf pc.tar.gz 将pc.tar.gz解压到当前目录
- tar -zxvf /home/myhome.tar.gz -C /opt/tmp2 将myhome.tar.gz解压到目录/opt/tmp2下
想把带.gz的文件解压,就添加选项-z
想把文件压缩为.gz,就添加选项-c
压缩命令总结与对比:


上图中的①②③对应了下图的权限①②③
分别是
所有者对该文件的权限
所属组对该文件的权限
其他用户对该文件的权限

ls -ahl 查看文件所有者
-a 列出所有文件
-h 以KB MB GB来显示文件大小
-l 显示详细信息
三个选项可以重叠使用
chown tom a.txt 将a.txt的所有者改为tom(tom必须存在)
groupadd monster 创建组monster
useradd -g monster fox 创建用户fox并将其放入组monster
chgrp monster a.txt 将a.txt的组修改为monster
usermod -g monster cat 将用户cat修改到组monster
usermod -d /home/fox cat 改变用户cat登录的初始目录为/home/fox (用户需要有进入到新目录的权限)
删除一个文件的前提是对该文件所在的目录有写权限w
目录权限:
x 可以对目录中的文件内容进行修改

ll 显示的内容

chown tom /home/abc.txt 将文件所有者修改为tom
chown -R tom /home/kkk 将目录kkk下所有文件的所有者都修改为tom
chgrp john abc.txt 将文件abc的组修改为john
- groupadd sx, groupadd yg
- useradd -g sx ts, useradd -g yg wk, useradd -g yg bj, useradd -g sx ss
- passwd ts ts
- vim monkey.java
- chmod 760 monkey.java
- vim monkey.java
- usermod -g yg ss
- vim monkey.java

3、直接将文件命名为aa,在4中运行./aa会直接执行aa中的文本
定时重复执行命令
定时重复执行程序
crontab -e
在打开的文件中输入:
*/1 * * * * ls -l /etc/ > /tmp/to.txt
每隔1分钟往to.txt文件中写入(覆盖)目录etc的内容
时间规则如下:

每个占位符这样写 */n ,n为数字
特殊符号:

P54
1、*/1 * * * * date >> /tmp/mydate
每隔1分钟,就将当前日期信息追加到/tmp/mydate文件中
2、定时执行脚本:
在脚本文件my.sh中写入(注意执行权限)
date >> /home/mycal
cal >> /home/mycal
crontab -e
*/1 * * * * /home/my.sh
每隔1分钟
3、crontab -e
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
每天凌晨2点将mysql数据库testdb备份到文件db.bak中
crontab -l 列出任务调度
crontab -r 终止任务调度
一次性定时计划任务(每60s )
ps -ef 检测当前运行的进程
-e 显示所有进程 -f 全格式显示进程
ps -ef | grep atd 检测atd是否在运行

at命令格式:
at [选项] [时间]
Ctrl + D 结束at命令的输入(按两次)
选项:

多种设定时间的方式:

at now + 2 minutes (按两次Ctrl+D)
/root/my.sh
2分钟后执行脚本my.sh
案例:

lsblk 查看设备挂载情况

一块硬盘的三个分区sda1 sda2 sda3分别挂载到三个挂载点/boot [SWAP] /
lsblk -f 更详细的信息
linux硬盘分类:

- 虚拟机添加磁盘
- 为磁盘分区:
fdisk /dev/sdb
输入:
n以添加新分
p主分区
1 1个分区
回车
回车
w 写入 退出
- 格式化新分区
mkfs -t ext4 /dev/sdb1
- 挂载(临时,重启后失效)
mkdir newdisk (自己选择目录)
mount /dev/sdb1 /newdisk
卸载硬盘:
umount /dev/sdb1 或
umount /newdisk
永久挂载:
vim /etc/fstab 进入fstab
yy p 拷贝一份

df -h 查看磁盘使用情况
du -h /home 查看/home的磁盘占用情况

ls -l /opt | grep "^-" 只显示以-开头,这样就筛选出了目录中的所有文件
ls -l /opt | grep "^-" | wc -l 统计目录中的文件数量
ls -l /opt | grep "^d" | wc -l 统计目录中的目录数量
ls -lR /opt | grep "^-" | wc -l 统计目录中文件的个数,包括子目录的下的文件
ls -lR /opt | grep "^d" | wc -l 统计目录中文件的个数,包括子目录的下的文件
tree /home 以树状显示目录
yum install tree 安装tree指令
第十三章 网络配置

虚拟网络编辑器设定虚拟机IP
同一个网段能ping通,则两台主机能通讯
想从虚拟机ping虚拟网卡,需要关闭防火墙
- 自动获取IP:
每次自动获取的IP可能不一样
- 指定IP(将ip改为192.168.200.130):
编辑:
vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改虚拟网络编辑器
vim /etc/hostname 修改主机名
如何ping主机名:
- Windows
在C:\Windows\System32\drivers\etc\hosts文件中指定
192.168.200.130 CentOS777
- Linux
在/etc/hosts文件中指定
192.168.200.1 Hasee-laptop
(虚拟网卡的ip)
DNS:Domain Name System 域名和IP的映射
主机名解析按以下顺序进行:
浏览器缓存→DNS缓存→hosts文件→DNS服务器

第十四章 进程管理
运行起来的程序就是进程
占有屏幕的进程:前台
否则:后台

ps -aux | more 显示详细信息

ps详解

案例:以全格式显示当前所有的进程,查看进程的父进程
ps -ef 全格式显示当前所有进程
-e 显示所有进程 -f 全格式
ps -ef | grep sshd 查看sshd及其父进程

上图中进程间的关系(父→子):
1→1115→1781
systemd→sshd→root@pts/0(xshell)
kill [选项] PID
killall 进程名称 (该操作会终止子进程)
选项: -9 强迫进程立即停止
案例
- killall gedit 终止文本编辑器
- kill 11421 踢掉进程号为11421的远程登录用户
- kill sshd 终止sshd服务 /bin/systemctl start sshd.service 重启sshd服务
- ps -aux | grep bash 查询bash进程号 kill -9 10487 强制终止终端
pstree 以树状的形式显示进程
pstree -p 以树状的形式显示进程(带PID)
patree -u 以树状的形式显示进程(带UID)
服务(service)的本质就是进程,但是是运行在后台的,通常会监听某个端口,等待其他程序的请求,比如mysqld, sshd等,因此又称之为守护进程。
服务即守护进程及其端口号:

service管理指令:

service network stop 关闭网络,端口监听也会关闭(xshell失效)
查看系统自启服务
ll /etc/init.d
Linux开机流程:

chkconfig 设定服务在不同运行级别的自启动


systemctl status firewalld 查看防火墙状态
systemctl start firewalld (临时)启动防火墙自启
systemctl stop firewalld (临时)关闭防火墙自启
systemctl disable firewalld (永久)关闭防火墙自启
以上设定全部立即生效
打开防火墙的指定端口

netstat -anp | more 查看端口信息
动态监控进程top
top 默认3s刷新进程


zombie僵死进程:没有释放内存的已结束进程
在监控中按键以排序

u 选择特定用户
k 终止指定进程
netstat -an 查看系统网络情况,结果按一定顺序排列输出
选项:-p 显示更多信息,如PID,进程名
netstat -anp | grep sshd 查看进程sshd的信息

Local Address 本地地址
Foreign Address 外部地址
第17章 Shell编程
#!/bin/bash 开头
执行脚本的方法:
- 给脚本设定+x权限,然后./hello.sh
- sh + 脚本执行
set 查看系统变量
unset 撤销变量
readonly B=2 设定静态变量,该变量不能被unset
A=$var 在.sh文件中引用系统变量
Shell变量不能用数字开头,等号两侧无空格,变量一般为大写

export TOMCAT_HOME=/opt/tomcat 将shell变量输出为环境变量(全局变量),TOMCAT_HOME代表了路径/opt/tomcat
source 配置文件 让修改后的配置信息生效
TOMCAT_HOME可以在其他.sh文件中使用,输出TOMCAT_HOME:
echo "tomcat_home=$TOMCAT_HOME"
shell脚本的多行注释:
:<<!
ABC
ACB
!
位置参数变量,获取执行脚本时,输入的参数,例:
./var.sh 100 200
100和200就是执行脚本时输入的参数,如何获得此参数?
在脚本中这样表示:
$1 $2.... $9 第一个参数,第二个参数...第9个参数
$0 代表命令本身
另外:
$* $@都表示所有的参数
$# 表示所有参数的个数
位置参数的例子,在var.sh中输入:

执行var.sh文件:

Shell设计者事先定义好的变量

使用案例:

基本语法:
- $((运算式))
- $[运算式]
- expr m + n 运算符前后的空格不能省略A=`expr n + m`,运算符:- \* / %
基本语法:
[ condition ] 中括号内非空返回true
[ condition ] && echo OK || echo notok condition满足,则执行echo OK || echo notok


第一题:
if [ "ok" = "ok" ]
then
echo "equal"
fi
第二题:
if [ 23 -ge 22 ]
then
echo "大于"
fi
第三题:
if [ -f /root/shcode/aaa.txt ]
then
echo "存在"
fi
if [ 判断式 ]
then
代码
elif [ 判断式 ]
then
代码
fi
编写一段代码:
输入的参数大于等于60,输出及格了,小于60,输出没及格

case语法:
案例:当命令行参数为1时,输出周一,是2,则输出周二,其他情况输出other
- 语法1

- 语法2

- 案例1

- 案例2

while [ 判断式 ]
do
程序
done
案例:

read读取控制台输入:

案例:

read -p " " NUM
read -t 10 -p " " NUM2
basename 返回完整路径最后/的部分,常用于获取文件名(可以直接写在终端中)
语法:

案例:返回/home/aa/test.txt的test.txt的部分
dirname 返回路径
dirname /home/aaa/test.txt
自定义函数,基本语法:
function无中括号,值无中括号

案例:




Ubuntu
sudo passwd 设定root用户初始密码

sudo apt-get update 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-get source package 下载该包的源代码
sudo apt-get remove vim 卸载vim
sudo apt-cache show vim 获取vim信息
- 更新源服务器列表(换源):
echo ' ' > /etc/apt/sources.list 清空(先备份)
复制镜像地址到sources.list
apt是apt-get的改进版,但
sudo apt install vim 和sudo apt-get install vim运行结果没有区别
netstat -anp | more 查看端口情况
SSH:

ubuntu上要手动安装ssh:
sudo apt install openssh-server
启动ssh服务端:
service sshd restart
不同ubuntu相互登录:
ssh john@192.168.157.133
登出:
exit或logout
第二十三章 Linux内核
操作系统:进程管理、内存管理、文件系统、(驱动程序和网络)
内核源码:

main.c :
