Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布。
它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
Linux内核版本
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。
Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:
稳定版
:开发版
:Linux发行版本
Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
Linux 和 Windows 区别
VirtualBox
—> 官网下载入口centos7
为例) —> 官网下载入口亚洲/上海
,选择最小安装
(无桌面)踩坑秘籍
输入
ifconfig
没有这个指令
- yum search ifconfig
- yum install net-tools.x86_64
输入
ifconfig
发现没有分配IP
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
- 将ONBOOT=no 改为ONBOOT=yes(是否开机启用的意思)
linux重启之后IP发生变化
vim /etc/sysconfig/network-scripts/ifcfg-ens33
将 BOOTPORTO=dhcp 改为 BOOTPORTO=static 原本是自动获取ip,现在改成固定ip
ONBOOT=yes 这个是no的话就改为yes,表示修改配置后自动启用网卡
如果你是192.168.x.x网段的,就添加这几行配置, 比如这里我把ip固定为192.168.1.6 IPADDR=192.168.1.6 NETMASK=255.255.255.0 GATEWAY=192.168.1.1
如果你是10.x.x.x网段的,就添加这几行配置,比如这里我把ip固定为10.0.0.6 IPADDR=10.0.0.6 NETMASK=255.255.255.0 GATEWAY=10.0.0.1
然后重启网络配置service network restart 之后,ifconfig查看ip,这里ip就是192.168.1.6了,然后ping www.baidu.com ,可以ping通,重启Linux后ip就不会改变了。
/
:/bin
:/boot
:/dev
:/etc
:/home
:/lib
:/lost+fount
:/mnt
: /media
:/opt
:/proc
:/root
:/sbin
:/tmp
:/srv
:/usr
:/var
:桥接
在网络网卡上安装了一个桥接协议,让这块网卡处于混杂模式,可以同时连接多个网络的做法。 桥接下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样查在这个交换机当中,所以所有桥接下网卡与网卡都是交换模式的,相互可以访问而不干扰。
NAT
虚拟机使用VMnet8网卡与主机单独组网,主机对于虚拟机相当于路由器,VMnet8网卡通过NAT地址转换协议与物理机网卡通信
Host-only
(仅与主机通信)【不常用】
虚拟机使用VMnet1网卡与主机单独组网,主机对于虚拟机相当于路由器
功能描述
:测试当前服务器是否可以连接目的主机
vim /etc/sysconfig/network-scripts/${ifcfg-ens33}
TYPE="Ethernet" #网络类型(通常是 Ethemet)
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #IP 的配置方法[none|static|bootp|dhcp](引导 时不 使用协议|静态分配 IP|BOOTP 协议|DHCP 协议)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e83804c1-3257-4584-81bb-660665ac22f6" #随机 id
DEVICE="ens33" #接口名(设备,网卡)
ONBOOT="yes" #系统启动的时候网络接口是否有效(yes/no)
#IP 地址
IPADDR=192.168.1.100
#网关
GATEWAY=192.168.1.2
#域名解析器
DNS1=192.168.1.2
修改 IP 地址后可能会遇到的问题:
- 物理机能 ping 通虚拟机,但是虚拟机 ping 不通物理机,一般都是因为物理机的 防火墙问题,把防火墙关闭就行
- 虚拟机能 Ping 通物理机,但是虚拟机 Ping 不通外网,一般都是因为 DNS 的设置有问题
- 虚拟机 Ping www.baidu.com 显示域名未知等信息,一般查看 GATEWAY 和 DNS 设 置是否正确
- 如果以上全部设置完还是不行,需要关闭 NetworkManager 服务
- systemctl stop NetworkManager 关闭
- systemctl disable NetworkManager 禁用
- 如果检查发现 systemctl status network 有问题 需要检查 ifcfg-ens33
修改主机名称
hostname
vi /etc/hostname
修改 hosts 映射文件
3. vim /etc/hosts
4. 192.168.2.101 localhost
通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员之外的员工直接接触,因此就需要通过远程登录的方式来操作。
所以,远程登录工具就是必不可缺的,目前,比较主流的有 Xshell, SSH Secure Shell, SecureCRT,FinalShell 等,可以根据自己的习惯自行选择。【我用的是FinalShell】
systemctl start | stop | restart | status 服务名
systemctl status firewalld
systemctl stop firewalld
systemctl start firewalld
systemctl restart firewalld
systemctl list-unit-files
systemctl disable service_name
systemctl enable service_name
查看服务的方法:
/usr/lib/systemd/system
ls -al
CentOS7 的运行级别为
:
查看当前运行级别
:systemctl get-default
systemctl set-default TARGET.target
(这里 TARGET 取 multi-user 或者 graphical)临时关闭防火墙
systemctl status firewalld
systemctl stop firewalld
开机启动时关闭防火墙
3. 查看防火墙开机启动状态
systemctl enable firewalld.service
4. 2. 设置开机时关闭防火墙
systemctl disable firewalld.service
在 linux 领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
Linux 系统中为了提高磁盘的读写效率,对磁盘采取了 “预读迟写”操作方式。当用户 保存文件时,Linux 核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。
但是, 也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导 致数据丢失。使用 sync 指令可以立即将缓冲区的数据写入磁盘。
sync
(功能描述:将数据由内存同步到硬盘中)halt
(功能描述:停机,关闭系统,但不断电)poweroff
(功能描述:关机,断电)reboot
(功能描述:就是重启,等同于 shutdown -r now)shutdown
[选项] 时间选项 | 功能 |
---|---|
-H | 相当于–halt,停机 |
-f | -r=reboot 重启 |
参数 | 功能 |
---|---|
now | 立刻关机 |
时间 | 等待多久后关机(时间单位是分钟) |
(1)将数据由内存同步到硬盘中
[root@]#sync
(2)重启
[root@]# reboot
(3)停机(不断电)
[root@]#halt
(4)计算机将在 1 分钟后关机,并且会显示在登录用户的当前屏幕中
[root@]#shutdown -h 1 ‘This server will shutdown after 1 mins’
(5)立马关机(等同于 poweroff)
[root@]# shutdown -h now
(6)系统立马重启(等同于 reboot)
[root@]# shutdown -r now
RPM(RedHat Package Manager),RedHat软件包管理工具,是Linux这系列操作系统里面的打包安装工具。
RPM包的名称格式
Apache-1.3.23-11.i386.rpm
- “apache” 软件名称
RPM 查询命令(rpm -qa
)
查询所安装的所有 rpm 软件包rpm -qa
由于软件包比较多,一般都会采取过滤rpm -qa | grep rpm软件包
RPM 卸载命令(rpm -e
)
rpm -e RPM软件包
rpm -e --nodeps 软件包
-e
:卸载软件包--nodeeps
:卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了RPM 安装命令(rpm -ivh
)
rpm -ivh RPM 包全名
-i
:install,安装-v
:–verbose,显示详细信息-h
:–hash,进度条--nodeps
:安装前不检查依赖YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器,基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包 并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
我的理解:yum类似maven,可以从镜像网站下载应用程序,并直接安装。
修改网络 YUM 源
默认的系统 YUM 源,需要连接国外 apache 网站,网速比较慢,可以修改关联的网络 YUM 源为国内镜像的网站,比如网易 163,aliyun 等。
在/etc/yum.repos.d/
目录下,备份默认的 repos 文件
cp CentOS-Base.repo CentOS-Base.repo.bak
下载网易 163 或者是 aliyun 的 repos 文件,任选其一
wget http://mirrors.aliyun.com/repo/Centos-7.repo
//阿里云
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
//网易 163
使用下载好的 repos 文件替换默认的 repos 文件
例如:用 CentOS7-Base-163.repo 替换 CentOS-Base.repo
mv CentOS7-Base-163.repo CentOS-Base.repo
清理旧缓存数据,缓存新数据
yum clean all
yum makecache
先把这些记下来,面试通常会考的,嘻嘻,开心吧!!!
- 查看内存:
top
- 查看磁盘存储情况:
df -h
- 查 看磁盘 IO 读写情况:
iotop
(需要安装一下:yum install iotop)、iotop -o
(直接查看输出比较高的磁盘读写程序)- 查看端口占用情况:
netstat -tunlp | grep 端口号
- 查看进程:
ps -aux
man [命令或配置文件]
man ls
一部分基础功能的系统命令是直接内嵌在 shell 中的,系统加载启动之后会随着 shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in)命令”;相应的其它命令 被称为“外部命令”。
help cd
ctrl + c
ctrl+l
reset
tab
pwd
每行列出的信息依次是:
-a
:全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)-l
:长数据串列出,包含文件的属性与权限等等数据;等价于“ll”-p
:创建多层目录
rmdir
touch
cp [选项] source dest
(功能描述:复制source文件到dest)
-r
递归复制整个文件夹rm [选项] deleteFile
(功能描述:递归删除目录中所有内容)
-r
递归删除目录中所有内容-f
强制执行删除操作,而不提示用于进行确认。-v
显示指令的详细执行过程mv oldNameFile newNameFile
(功能描述:重命名)mv /temp/movefile /targetFolder
(功能描述:移动文件)cat [选项] 要查看的文件
-n
显示所有行的行号,包括空行more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件 的内容。more 指令中内置了若干快捷键,详见操作说明。
more 要查看的文件
空白键 (space)
代表向下翻一页Enter
代表向下翻『一行』q
代表立刻离开 more ,不再显示该文件内容Ctrl+F
向下滚动一屏Ctrl+B
返回上一屏=
输出当前行的行号:f
输出文件名和当前行的行号less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加 强大,支持各种显示终端。
less 指令在显示文件内容时,并不是一次将整个文件加载之后 才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
less 要查看的文件
空白键
向下翻动一页;[pagedown]
向下翻动一页[pageup]
向上翻动一页;/字串
向下搜寻『字串』的功能;n:向下查找;N:向上查找;?字串
向上搜寻『字串』的功能;n:向上查找;N:向下查找;q
离开 less 这个程序;echo [选项] [输出内容]
\\
输出\本身\n
换行符\t
制表符,也就是 Tab 键head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。
head 文件
(功能描述:查看文件头10行内容)head -n 5 文件
(功能描述:查看文件头5行内容,5可以是任意行数)tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。
tail 文件
(功能描述:查看文件尾部10行内容)tail -n 5 文件
(功能描述:查看文件尾部5行内容,5可以是任意行数)tail -f 文件
(功能描述:实时追踪该文档的所有更新)软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放 了链接其他文件的路径。
ln -s [原文件或目录] [软链接名]
(功能描述:给原文件创建一个软链接)
date
(功能描述:显示当前时间)date +%Y
(功能描述:显示当前年份)date +%m
(功能描述:显示当前月份)date +%d
(功能描述:显示当前是哪一天)date "+%Y-%m-%d %H:%M:%S"
(功能描述:显示年月日时分秒)date -d '1 days ago'
(功能描述:显示前一天时间)date -d '-1 days ago'
(功能描述:显示明天时间)date -s "2023-06-19 20:52:18"
cal 2023
useradd 用户名
(功能描述:添加新用户)useradd -g 组名 用户名
(功能描述:添加新用户到某个组)passwd 用户名
id username
cat /etc/passwd
su 用户名称
(功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)su - 用户名称
(功能描述:切换到用户并获得该用户的环境变量及执行权限)userdel 用户名
(功能描述:删除用户但保存用户主目录)userdel -r 用户名
(功能描述:用户和用户主目录,都删除)whoami
(功能描述:显示自身用户名称)who am i
(功能描述:显示登录用户的用户名以及登陆时间)useradd issavior
passwd issavior
vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
issavior ALL=(ALL) ALL
root ALL=(ALL) ALL
issavior ALL=(ALL) NOPASSWD:ALL
将用户加入到用户组
usermod -g 用户组 用户名
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
不同 Linux 系统对用户组的规定有所不同, 如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group文件的更新。
groupadd 组名
groupdel 组名
groupmod -n 新组名 老组名
cat /etc/group
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做 了不同的规定。
在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属 的用户和组。
第一种方式变更权限 chmod [{ugoa}{+-=}{rwx}] 文件或目录
第二种方式变更权限 chmod [mode=421 ] [文件或目录]
chown [选项] [最终用户] [文件或目录]
(功能描述:改变文件或者目录的所有 者)
chgrp [最终用户组] [文件或目录]
(功能描述:改变文件或者目录的所属组)
find [搜索范围] [选项]
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。
locate 搜索文件
locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给 定的文件。
Locate 指令无需遍历整个文件系统,查询速度较快。
为了保证查询结果的准确 度,管理员必须定期更新 locate 时刻。
grep 选项 查找内容 源文件
管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理
gzip 文件
(功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz
(功能描述:解压缩文件命令)
zip [选项] XXX.zip 将要压缩的内容
(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip
(功能描述:解压缩文件)
tar [选项] XXX.tar.gz 将要打包进去的内容
(功能描述:打包目录,压缩后的 文件格式.tar.gz)
du 目录/文件
(功能描述:显示目录下每个子目录的磁盘使用情况)
df 选项
(功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占 用情况)
lsblk
(功能描述:查看设备挂载情况)
mount [-t vfstype] [-o options] device dir
(功能描述:挂载设备)
umount 设备文件名或挂载点
(功能描述:卸载设备)
fdisk -l
(功能描述:查看磁盘分区详情)
fdisk 硬盘设备名
(功能描述:对新增硬盘进行分区操作)
ps aux | grep xxx
(功能描述:查看系统中所有进程)
ps -ef | grep xxx
(功能描述:可以查看子父进程之间的关系)
kill [选项] 进程号
(功能描述:通过进程号杀死进程)
killall 进程名称
(功能描述:通过进程名称杀死进程,也支持通配符,这 在系统因负载过大而变得很慢时很有用)
pstree [选项]
top [选项]
netstat -anp | grep 进程号
(功能描述:查看该进程网络信息)
netstat –nlp | grep 端口号
(功能描述:查看网络端口号占用情况)
crontab [选项]
VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。
VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜 色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。
以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。
在这个模式中, 你可 以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档 案内容, 也可以使用『复制、粘贴』来处理你的文件数据。
语法 | 功能描述 |
---|---|
yy | 复制光标当前一行 |
y 数字 y | 复制一段(从第几行到第几行) |
p | 箭头移动到目的行粘贴 |
u | 撤销上一步 |
dd | 删除光标当前行 |
d 数字 d | 删除光标(含)后多少行 |
x | 剪切一个字母,相当于 del |
X | 剪切一个字母,相当于 Backspace |
yw | 复制一个词 |
dw | 删除一个词 |
shift+6(^) | 移动到行头 |
shift+4 ($) | 移动到行尾 |
1+shift+g | 移动到页头,数字 |
shift+g | 移动到页尾 |
数字+shift+g | 移动到目标行 |
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!
要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。
注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现『INSERT或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下 『Esc』这个按键即可退出编辑模式。
进入编辑模式
按键 | 功能 |
---|---|
i | 当前光标前 |
a | 当前光标后 |
o | 当前光标行的下一行 I |
A | 光标所在行最后 |
O | 当前光标行的上一行 |
按『Esc
』键 退出编辑模式,之后所在的模式为一般模式。
强制保存退出
:wq!
在一般模式当中,输入『 : / ?
』3个中的任何一个按钮,就可以将光标移动到最底下那 一行。
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、 离开 vi 、显示行号等动作是在此模式中达成的!
命令 | 功能 |
---|---|
:w | 保存 |
:q | 退出 |
:! | 强制执行 |
/ | 要查找的词 |
n | 查找下一个,N 往上查找 |
:noh | 取消高亮显示 |
:set nu | 显示行号 |
:set nonu | 关闭行号 |
:%s/old/new/g | 替换内容 /g 替换匹配到的所有内容 |
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
脚本以#!/bin/bash
开头(指定解析器)
常用系统变量 $HOME
、$PWD
、$SHELL
、$USER
等
$n
(功能描述:n 为数字,$0 代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9 代表第一到第九个参数,十以 上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})$#
(功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及 加强脚本的健壮性)。$*
(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)$@
(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一 个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明 上一个命令执行不正确了。)“$((运算式))” 或 “$[运算式]”
注意:条件非空即为 true
(1)单分支
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
(2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
while [ 条件判断式 ]
do
程序
done
read (选项) (参数)
basename
basename [string / pathname] [suffix]
(功能描述:basename 命令会删掉所有的前 缀包括最后一个(‘/’)字符,然后将字符串显示出来。
dirname
dirname 文件绝对路径
(功能描述:从给定的包含绝对路径的文件名中去除文件名 (非目录的部分),然后返回剩下的路径(目录的部分))
[ function ] funname[()]
{
Action; [return int;]
}
正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。
在很多文 本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
在 Linux 中,grep, sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。
^
匹配一行的开头$
匹配一行的结束.
匹配一个任意的字符*
不单独使用,他和上一个字符连用,表示匹配上一个字符 0 次或多次[ ]
表示匹配某个范围内的一个字符 \
表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,当我们想匹配 某一特殊字符本身时(例如,我想找出所有包含 ‘$’ 的行),就会碰到困难。此时我们就要 将转义字符和特殊字符连用,来表示特殊字符本身