Linux的最主要的应用领域:服务器领域
另外一个领域:嵌入式领域
linux是内核,发行版本:ubuntu、centos
1970s年代,贝尔实验室进行分时多用户操作系统的开发,但是没有成功,Ken tompson(B语言的创始者)使用B语言对当时项目的资源进行开发,实现了UNIX,但不好用,于是与Dennis richers使用C语言进行改进,最终完成UNIX系统。但UNIX在当时只能在大型服务器上运行,普通用户基本使用不到,Richard Stallman 就发起了GNU计划(企业不应该垄断,而是应该开源,盈利靠提供服务),Linux 创始人 Linus Torvalds加入了GNU计划,一起改进,实现了Linux操作系统。
虚拟机与主机占用桥段的网络,如主机为192.168.0.10,虚拟机为192.168.0.20,可以实现主机与虚拟机的网络通讯,当其他主机与虚拟机也为同桥段时,所有都可以通讯,但是可能会造成IP冲突,因为192.168.0只能分配253个主机,当主机数量过大时,就会有问题。
地址交换,主机与虚拟机通过代理的IP地址进行通讯,优点是不会造成IP冲突,缺点是,只能从虚拟机对其他主机进行通信,不是当前主机无法进行通讯。即只有自己主机能与自己的虚拟机通讯,其他主机无法与其他虚拟机通讯。
克隆虚拟机可以到任何一台满足硬件配置的电脑上使用,其是单独的文件,拷贝粘贴即可使用。
可以直接复制整个虚拟机的文件,存放到任何位置,再通过VMware软件打开即可使用。
使用VMware软件直接进行克隆
快照就是相当于存储当前状态,以便之后系统出现状态时,可以恢复
/proc【不能动】,虚拟的目录,是系统内存的映射
/srv【不能动】,service的缩写,存放服务启动后需要提取的数据
/sys【不能动】,内核
/bin【常用】,Binary的缩写,存放最经常使用的命令
/home【常用】,存放普通用户的主目录,每一个用户都是一个单独的文件夹,命名就是用户的账号名
/usr【常用】,相当于window的program file文件夹,用户的许多应用程序都是放在这里的
/user/local【常用】,给主机额外安装软件的目录
/mnt【常用】,相当于挂载于外部存储文件,共享文件就可以在此目录下找到
/lib【常用】,存放系统开机所需的基本库
/boot【常用】,存放启动linux的核心文件,包括一些镜像文件
/etc【常用】,存放一些应用程序的配置文件,如mysql数据库中的my.conf
/var【常用】,存放不断扩充的文件,习惯将经常修改的文件放到这里,日志等
/media【常用】,自动设备设备,如U盘,光驱等
/sbin,Super Binary,存放系统管理员使用的系统管理程序
/root,存放系统管理员目录
/lost+found,一般状态下是空的,当非法关机就会存放文件
/dev,类似是window的设备管理器,把所有硬件用文件的形式才存储
/opt,存放一些应用程序的安装,一般来说新的应用程序都先安装在此目录下
/selinux,安全子系统
vim xxx(文件)进入到 vim编辑器中的正常模式(只读)
在正常模式下输入i、I、a、A等进入到编辑模式,输入esc退出编辑模式
在正常模式下输入:或者/,进入到命令模式
在命令模式下输入:q(不保存退出)、:wq(保存退出)、q!(强制退出,并不保存)
拷贝当前行:yy;拷贝当前行(包含当前行)向下x行:xyy;
复制:p;撤销:u;
删除当前行:dd;删除当前行(包含当前行)向下x行:xdd;
开启行号:在命令行模式下输入:set nu; 关闭行号:在命令行模式下输入:set nonu;
查找文件中的某个单词:在命令行模式下输入/关键词,回车后进行查找,输入n查找下一个;
定位首行:gg;定位末行:G;查找指定行:行号 + shift + g;
关机重启前先执行sync!!! ,sync的作用就是将内存的数据写入到磁盘中去,相当于保存操作,虽然关机和重启等操作都会调用一次sync但谁能确保万无一失呢?
shutdown -h now (等同于halt):立刻关机
shutdown -h xx :在x分钟后关机,并且有提示信息
shutdown -r now (等同于reboot):立即重启
su -用户名:登录账户,也可以用户切换用户,当权限不够时可以切换到root用户
logout :注销账户,只能在运行级别3下有效,即用户无图形界面下能注销
useradd 用户名:使用系统的默认方式创建用户,在/home 下面创建一个用户名的文件夹,包含该用户的所有信息;
useradd -d 指定目录 用户名:在自己定义的目录下创建该用户
passwd 用户名:一定要指定用户名,否则改的是当前登录用户的密码 如果密码过于简单会提示,但再次输入还是能设置该密码
最好先下线要删除的用户,避免不必要的麻烦
userdel 用户名:删除该用户,但是保留该用户的资料,即拒绝该用户再次访问,但其home资料还在,一般建议这样做;
userdel -r 用户名:彻底删除该用户,删除其home目录
id 用户名:查询该用户,当用户不存在时,提示用户不存在;
who am i:显示第一次登录的用户信息
su - 用户名:切换到该用户,如果从权限高的用户切换到权限低的不需要输入密码,反之则要
groupadd 用户组名 :添加一个组
useradd -g 组名 用户名:如果增加用户时没有指定组,系统会默认创建名为用户名的组,并将该用户添加到该组
usermod -g 组名 用户名:前提是该组已存在,把用户当前所属组改为新的组
/etc/passwd,记录用户的各种信息;每行的含义 用户名:口令:用户标识符(uid):组标识符(gid):注释性描述:主目录:登录shell(翻译官一般是bath);
/etc/shadow,口令配置文件,最主要包含用户名和加密口令;
/etc/group:记录包含组的信息
常用的级别是3和5
0:关机
1:单用户【找回丢失密码】
2:多用户没网络服务
3:多用户有网络服务 (multi-user.target)
4:系统未使用保留给用户
5:图形界面 (graphical.target)
6:重启
1.在开机选择时按”e“进入内核
2. 找到以linux或者linux16开头的项,在末尾加上init=/bin/sh,然后按Ctrl + X引导系统启动
3.执行mount -o remount,rw /
4.执行passwd设置密码
5.执行touch / autorelabel
6.执行exec /sbin/init
执行完所有步骤后等待系统重启即可,等待的时间会比较长,耐心等待
常用的两个,其他的可以上网找
-a:显示隐藏文件,隐藏文件是以.开头的;
-l:单列输出
pwd :输出当前目录
cd ~:回到自己的家目录,例如当前用户为tom,cd ~ 就是切换到/home/tom目录下;
cd .. :返回上一级目录
mkdir 目录: 创建单极目录;
mkdir -p 目录:创建多级目录
rmdir 空目录:删除空目录,目录下有文件不能使用该指令;
rm -rf 目录:强制删除目录,删除该目录和该目录下所有东西,【谨慎使用】
touch 具体文件:创建空文件
cp 文件 目的目录:复制当前文件并拷贝到目的目录下
cp -r 目录 目的目录:把需要复制的目录,拷贝到目的目录下,拷贝目录下的所有文件
如果目的目录已经有需要复制的目录会提示是否覆盖的信息
\cp -r 目录 目的目录:强制覆盖已有的目录,【谨慎使用】
mv 带目录的文件或目录 目标目录或文件:1.当是同一目录下移动,就是重命名 ;2.当移动到其他目录就是windows的剪切操作;3.目标目录也带有文件,就是剪切+重命名
示例:当前在/home/tom目录下,而且有一个名为hello.txt文件
1.mv /home/tom/hello.txt /home/tom/hello1.txt:就是重命名
2.mv /home/tom/hello.txt /root:就是将hello.txt文件移动到/root目录下
3.mv /home/tom/hello.txt /root/hello2.txt:就是将hello.txt文件移动到/root目录下并改名为hello2.txt
cat -n 文件:只读,仅查看文件,并且显示行号,-n显示行号,不写即不显示行号
more 文件:显示部分的文件内容
more的操作指令
less需要多少加载多少,对于显示大型文件具有较高的效率
less 文件: 显示部分的文件内容
less操作指令
echo 可以输出环境变量,环境变量一般是以$开头而且全为大写
echo 需要输出的内容:输出内容
示例:
echo “hello world~”:输出的内容为 hello world~;
echo $HOSTNAME:输出主机名;
head指令默认显示开头前10行的内容,空行也算一行
head 文件:输出该文件内容的前10行;
head -n 行数 文件:输出该文件的前指定的多少行
tail指令默认显示开头后10行的内容,空行也算一行
tail文件:输出该文件内容的后10行;
tail -n 行数 文件:输出该文件的后指定的多少行;
tail -f 文件:实时追踪该文件,当文件有所修改,即可显示修改的内容
原内容或文件 > 目标目录或文件:将原内容或文件覆盖写入到目标目录或文件中,如果没有目标目录没有该文件,则创建
示例:text.txt文件不存在
echo “覆盖写入” > /home/text.txt: 就先创建text.txt文件再把“覆盖写入”此内容输入到该文件中
跟 >指令基本一致,只是不是覆盖,而是追加
ln -s 原文件或目录 名称:设置名称并链接到原文件或目录
示例:
In -s /root /home/tom/gotoroot:给 home/tom/目录下的gotoroot设置一个link链接,当执行gotoroot时,切换到root目录
history:显示所有执行过的历史命令;
history 执行命令的条数:显示最近最使用过的多少条历史命令;
!编号:显示执行历史命令编号为指定的命令;
date:显示当前时间;
date “+%Y - %m - %d %H:%M:%S”:显示年月日时分秒;
date -s "2022-11-07 09:15:20" :设置系统时间;
cal :默认显示当前年当前月的日历;
cal 年份:显示指定年份的12个月的日历
find 目录 -name 文件或目录:找指定目录下的文件或目录,找到即显示,找不到不显示;
find 目录 -user 用户:找指定目录下该用户的所有文件;
find 目录 -size 符号 +大小:找指定目录下该文件大小满足条件的文件,大小的单位有(k,M,G),符号为(+大于,-小于,默认是等于);
示例:
find /home/tom -size +300M:找到/home/tom 目录下大小大于300M的文件
locate指令是查询自己的数据库,所以当locate是第一次执行时,先执行updatedb创建locate数据库,然后再使用locate执行,因为其是从自己的数据库中查询,所以速度很快,找到该文件就显示其绝对路径,找不到则不显示
updatedb 然后再 locate hello.txt:返回找到文件的绝对路径
grep指令是只显示查找的文件包含指定内容的所在行,其他行忽略,-n表示显示行号,-i表示忽略大小写,常于管道一起使用
grep -ni 内容 源文件:查找源文件内容包含指定查找的内容
gzip 文件:把文件给压缩为后缀.gz的文件,其压缩是把源文件给压缩覆盖,不在保留源文件,而是直接变为.gz文件,只能压缩文件,不能压缩目录
gunzip 文件.gz:解压该文件,相等于去除后缀,此压缩文件不在存在
zip 压缩后的名称.zip 文件:把该文件压缩命名为压缩后的名称
示例:
zip myhome.zip /home/tom/myhome.txt:把/home/tom目录下的myhome.txt文件压缩为myhome.zip文件;
zip -r 压缩后的名称.zip 目录:把指定的整个目录压缩为修改后的名称;
unzip 文件:把指定文件解压到当前目录下;
unzip -d 目录 文件:把指定文件解压到指定目录下;
tar 选项 文件名.tar.gz 打包的文件:选择特定的选项把指定的文件打包为.tar.gz文件
选项详情
示例:当前所在路径为/home/tom
tar -zcvf multi.tar.gz /home/tom/hello1.txt /home/tom/hello2.txt :压缩多个文件,把hello1和hello2文件一并打包压缩为 multi.tar.gz文件
tar -zxvf /home/multi.tar.gz -C /opt/temp:需要输入的是绝对路径,把mutli.tar.gz文件解压到/opt/temp目录下
文件所有者
查看文件所有者
ls -ahl:查看文件的所有者;
chown 用户 文件 :改变文件所有者;
l:link链接类型,即被ln -s 创建的软连接
d:目录类型
c:字符类型(键盘、鼠标等)
b:块类型(硬盘、磁盘等)
r:对文件可读查看
w:对文件可修改但不一定能删除,只有对目录有写权限时,才能删除
x:可以执行文件
r:可以读取目录,ls查看目录内容
w:可以修改,即对目录内进行创建、删除、重命名
x:可以进入该目录,即使用cd切入到该目录
chmod u=rwx,g=rw,o=x 文件或目录:修改该文件的所有者的权限为rwx,同组的为rw,其他用户的为x;
chmod o+w 文件或目录:给其他用户增加该文件的w权限;
chmod a-x 文件或目录:删除所有人对该文件的x权限;
chmod 751 文件或目录:对所有者rwx权限,对同组rx权限,对其他用户x权限;
crontab -e :创建任务调度;
crontab -r:终止任务调度;
crontab -l:列出当前有哪些任务调度;
service crond restart:重启任务调度;
* /1 * * * * ls -l /etc/ >/tmp/to.txt: 每间隔一分钟就把ls 下面的每个文件写入到to.txt文件中
参数说明
特殊符号解释
特殊符号示例:
at定时任务,只会执行一次。at定时任务每隔一段时间,基本上是60秒,就会查找job队列里面的任务是否与于指定时间相匹配,如果匹配则执行,执行完后移除job队列,不再执行
at 【选项】 【时间】:创建指定选项和指定时间的任务
示例:
at 5pm + 2 days 回车
at> 具体指令
作用是两天后的下午5点执行该指令
完成设置具体指令后 按两次 Ctrl + d,才能正在被创建
lsblk:能够查看分区硬盘挂载到哪个目录下
记得先进行快照保存先
通过修改/etc/fstab实现,把新分区的UUID加入到该文件中,再执行 mount -a即可生效
df -h:查看所有磁盘的使用情况
du 【选项】 目录:根据选项查看指定目录的占用情况
一般直接使用 du -hac 目录,更加直观显示
具体实例
ls -l /opt | grep "^-" | w:查询/opt下面文件的个数;
ls -lR /opt | grep "^-" | w:查询/opt目录下所有文件的个数;
ls -l /opt | grep "^d" | w:查询/opt下面文件夹的个数;
1.浏览器先检查浏览器缓冲中有没有该域名解析IP地址
2.检查DNS解析器缓存
以上两个缓存可以理解为本地解析器缓存
3.检查hosts文件对应的IP映射
4.域名服务DNS进行解析域
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改或添加以下内容
BOOTPROTO=static
IPADDR=自己指定的IP地址
GATEWAY=自己指定网关
DNS1=自己指定的域名解析器
修改完后就重启服务或虚拟机
修改/etc/hostname即可
windows下在 C:\Windows\System32\drivers\etc\hosts 文件修改对应即可
linux 下 在/etc/hosts 文件修改即可
全都修改后重启即可
ps -ef:全格式显示所有进程,能看到父进程号 ;
ps -aux:a查看所有进程信息;u查看执行进程的用户; x查看后台进程
pstree -pu:树状显示进程包括进程号(p),所属用户(u)
USER:执行进程的用户
PID:进程的编号
%CPU:占用Cpu的百分比
%MEN:占用物理内存的百分比
%STAT:进程状态,s是睡眠,r是运行
VSZ:分配给进程的虚拟内存大小
RSS:分配给进程的物理内存大小
TTY:终端名称
COMMAND:执行该进程的对应的指令
top指令
top指令默认会每隔3秒更新进程的状态
top -d 时间:每隔指定的时间就会更新状态
top前台内输入u可以监视用户的进程情况
top前台内输入k可以终止某一进程
kill -9 进程号:强制终止指定的进程;
killall 进程名:终止该进程和其所有子进程
示例
kill 1750(当前sshd)的进程号:终止的远程登录服务
重启sshd服务 /bin/systemctl start sshd.service
监控网络状态
netstat -an:按一定顺序排列显示网络状态;
netstat -p:显示哪个进程正在调用;
local address 是本地Linux的地址,而foreign address 是主机的地址
tcp协议的状态是有一个TIME_WAIT的状态,若长时间没有建立连接,该网络状态就会被清除
centos7之后,服务指令大多数用systemctl,较少一部分还使用service指令
找service还能操控的指令 ls -l /etc/init.d
setup:
选择系统服务后就能查看所有的系统服务
*号代表开机自启,按空格可取消*
chkconfig --level 3 服务名 on/off:设置该服务在运行3级别自启动/关闭
重启后生效
找systemctl能执行的服务,在/usr/lib/systemd/system查看
systemctl enable 服务名:开启该服务开机启动;
systemctl disable 服务名:关系该服务开机启动;
systemctl is-enable 服务名:查询该服务是否为开机自启;
每一次执行完firewall指令后使用firewall-cmd --reload才会生效
firewall-cmd --permanent --add-port =端口号/协议:在防火墙上增加端口;
firewall-cmd --permanent --remove-port =端口号/协议:在防火墙上增加端口;
firewall-cmd --query-port=端口号/协议:查看该端口在防火墙上的状态
RPM包是Redcat Package Manage的缩写,是业内通用的安装包的标杆,后缀就是.rpm
rpm -qa 包名:查询是否安装该包;
rpm -qi 包名:查询该包的详细信息;
rpm -qf 包名:查询安装该包的路径;
rpm -e 包名:删除该包;
rpm -e --nodeps 包名:强制该包的所有依赖即强制删除改包;【谨慎使用】
rpm -ivh 包的全路径:安装包,i是install,v是提示信息,h是显示进度, 包的全路径在centos的光盘中;
yum的好处就是直接可以下载到本地,并且并把相关依赖的包一并下载
yum list:查询所有能下载的包;
yum install 包名:下载指定的包
方式一
先给创建的.sh 文件增加x权限,即chmod u+x .sh文件
再通过绝对路径或相对路径来执行,即 ./xx.sh
方式二
直接 sh + xx.sh文件
set:显示当前shell中的所有变量;
shell文件中多行注释的语法 :<开始和结束符号都要单独一行
$PATH、$HOME、$PWD等等
$$:代表当前进程的进程号;
$!:代表后台运行的最后一个进程号;
$?:最后一次实行命令的返回状态,如果为返回值为0,则说明正确执行;
在/etc/profile文件下设置 export 变量名 = xx;设置了全局变量,然后 source /etc/profile,刷新令设置的全局变量生效
定义变量:在shell文件里直接A=即可;
在shell输出变量,需要在变量前加$符号;例如定义变量A=3,输出A的格式为“A=$A”;
readonly B=3:定义静态变量B,且B=3,readonly变量不能被unset;
unset 变量:删除该变量 ;
获取命令行的参数
sh myshell.sh 100 200
$0:代表命令本身,即sh myshell.sh;
$1:代表第一个参数,即100;
${10},10以上包含10的参数用{}括起来;
$*:表示所有的参数,当作一个整体;
$@:也表示所有的参数,不过是区分对待;
$#:统计参数的个数;
注意:乘号的表达为 \*
方式一 【常用】
tep=$[表达式]:例如tep=$[5+10],tep的值就为15;
方式二
tep=$(()):例如tep=$((5+10)),tep的值就为15;
方式三 【麻烦,不常用】
tep='expr x + x':例如tep='expr 5 + 10',expr表达式里面的运算符一定放在' '里面且是由空格隔开
if 开始的标志
【 表示式 】,括号两边一定是有空格的,而且判断符号间也需要由空格,否则会报错
fi 结束的标志
示例
if [ 表达式 ]
then
执行的内容
fi
语法
# 输入的指令 sh case.sh "1"
# !/bin/bash
case $1 in
"1")
echo "星期一"
;;
"2")
echo "星期二"
;;
*)
echo "其他"
;;
esac
# 输出为 星期一
语法一
# 输入的指令 sh for.sh 100 200 300
# !/bin/bash
for i in "$@"
do
echo "num is $i"
done
#输出为
# num is 100
# num is 200
# num is 300
语法二
# 输入的指令为 sh sum.sh
# !/bin/bash
for (( i=1; i<100; i++))
do
SUM=$[$SUM+$i]
done
echo "总和为:$SUM"
# 输出为 总和为:5050
语法
# !/bin/bash
while [ 表达式 ]
do
执行的代码
done
read -p 提示信息 变量名:在屏幕上提示信息,然后把用户输入的信息存放到变量中;
read -t 5 -p 提示信息 变量名:在屏幕上提示信息,只等待5秒,然后把用户输入的信息存放到变量中;
示例
# 输入的指令为 sh read.sh
# !/bin/bash
read -t 5 -p "请在5秒内输入:" NUM1
echo "你输入的值为:$NUM1"
结果
basename 文件全路径:只获取最后的文件名;
dirname 文件全路径:只获取文件的路径;
示例
# 输入的指令为:sh getSum.sh
# !/bin/bash
# 定义求和的函数
getSum(){
SUM=[$n1+$n2]
echo "和为:$SUM"
}
# 输入10
read -p "请输入第一个值" n1
# 输入20
read -p "请输入第二个值" n2
# 调用函数
getSum $n1 $n2
#调用后的输出为 和为:30
Ubuntu安装后没有设置root用户,可用使用sudo passwd 给root用户设置密码,设置完后即可使用root用户
切换到root用户命令行显示的 #,一般用户显示的是$
退出root用户用的是 exit
在清华镜像网站找到Ubuntu的镜像文件,然后复制替换内容到/etc/apt/source.list 文件去,做修改先去备份文件
清华大学开源软件镜像站 | Tsinghua Open Source Mirror
复制完后使用指令进行更新 sudo apt-get update
sudo apt install net-tools:先安装这个工具进行网络状态的查看,也可用监听网络端口
sudo apt-get openssh-server:安装ssh服务和客户端
service sshd start:启动ssh服务
ssh 用户名@IP地址:登录到另外的ssh服务的另外一台系统
如果出现错误则删除 ~/.ssh/kown_ssh文件
系统日志放在/var/log文件夹下
boot.log:系统启动日志
cron:定时任务的日志
lastlog:记录所有用户最后一次登录时间的日志,采用二级制存储,使用lastlog可用直接查看该文件
mailog:记录邮件信息的日志
message:记录系统重要的消息,如果系统出现问题,首先要检查的就是该日志
secure:记录验证和授权方面的信息,只要设置账户和密码的程序都会记录
ulmp:记录当前已经登录的用户信息,实时变化,用w、who、users指令查看该文件
/etc/rsyslog.conf 系统日志管理的配置文件所在地
编辑的文件格式为 *.*,第一个*代表日志的类型,第二个*代表日志的级别
日志的类型
日志的级别
示例
cron.* :记录cron任务所有级别的日志
*.warning:记录所有日志类型的警告级别的日志
日志文件的格式
logrotate配置文件
/etc/logrotate.conf ,该文件是规定对日志文件存储的方式或格式的一些全局策略
rotate 4: 共保存4份日志文件,当创建第5份时,最旧的一份会被删除
weekly:每周对日志文件进行一次轮替
create:创建新的空的日志文件,在日志轮替后
dateext:使用日期作为日志轮替文件的后缀
1.直接在/logrotate.conf文件下设置,优先级更高
2.在/logrotate.d文件下设置
创建新的文件,并且写入当对应的规则
参数介绍
uname-a:查看当前linux内核版本
yum info kernel -q:查看能升级的版本信息
yum update kernel:升级内核
yum list kernel -q:查看已安装的内核
yum -y install dump
yum -y install restore
dump支持分卷和增量备份
dump -层级u:备份第几级,0即为完整备份,备份全部,总共为9级,轮替备份,9级过后就是0级
参数介绍
dump无法备份目录或单独的文件
restore -C:使用对比模式,将备份的文件与已存在的文件相互对比
restore -i:交互模式,进行恢复时,询问用户
restore-r:还原模式;
restore-t:查看模式,看有哪些备份文件
restore-r -f: -f指定文件读取备份数据