Linux下系统管理(ubuntu虚路由)
1.Linux启动过程
1.1 Linux下根目录描述
root@ac-dev:/# tree -L 1
.
├── bin //存放二进制执行命令,busybox等命令集
├── boot //存放与操作系统内核启动相关的文件,grub文件等
├── dev //存放设备文件的目录,驱动的设备节点等,可以查看设备号
├── etc //存放系统管理和配置文件
├── home //用户的主目录,所有的用户目录都在这个目录下
├── initrd.img -> boot/initrd.img-4.2.0-27-generic
├── lib //存放库文件,动态链接共享库及驱动文件等
├── lib64 //存放64位库文件
├── lost+found //丢失恢复文件的文件夹
├── media //存放媒体文件
├── mnt //用户临时挂载外部设备,文件系统
├── opt //额外安装软件所摆放的目录
├── proc //虚拟文件系统目录,系统内存的映射,proc文件系统的产生地。
├── root //系统管理员的主目录
├── run //存放系统运行时相关文件
├── sbin //存放二进制执行命令,跟/bin差不多
├── srv //系统服务的站点特定数据
├── sys //存放硬件相关的信息,是虚拟文件系统
├── tmp //存放临时文件
├── usr //存放安装软件的目录,一般新装软件安装在该目录下
├── var //存放系统中经常改变的文件,
└── vmlinuz -> boot/vmlinuz-4.2.0-27-generic
1.1.1 boot目录
该目录是启动Linux时使用的一些核心文件,是内核开始执行用户模式程序之前使用的数据。启动管理GRUB的目录,里面存放的都是GRUB在启动时所需要的配置及各阶段的文件。
GRUB 是引导装入器,负责装入内核并引导系统(如:Linux,windows等)。安装GRUB,会将程序 grub 放到 /usr/sbin 中。
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
root@ac-dev:/boot# tree -L 2
.
├── abi-4.2.0-27-generic
├── config-4.2.0-27-generic
├── grub //GRUB目录
│ ├── fonts
│ ├── gfxblacklist.txt
│ ├── grub.cfg
│ ├── grubenv
│ ├── i386-pc
│ └── locale
├── initrd.img-4.2.0-27-generic //系统启动时的模块
├── lost+found
├── memtest86+.bin
├── memtest86+.elf
├── memtest86+_multiboot.bin
├── System.map-4.2.0-27-generic //系统Kernel中的变量对应表
└── vmlinuz-4.2.0-27-generic //实际系统所使用的kernel
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
1.1.2 dev目录
1.1.3 etc目录
/etc目录下一般存的是系统的启动脚本及配置文件等。
ubuntu系统支持/etc/rc.local启动脚本,/etc/rc.local启动具备root权限。
1.1.3.1 环境变量添加
/etc/profile文件会在用户登入时自动运行脚本完成环境变量更新执行。
1.1.4 lib目录
1.1.5 proc目录
/proc目录是一种文件系统,即proc文件系统,常被称作虚拟文件。
/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。
进程目录下有一系列的参数可以参看,具体如下:
root@ac702-dev:/proc# ll /proc/1
total 0
dr-xr-xr-x 9 root root 0 Sep 10 08:04 ./
dr-xr-xr-x 172 root root 0 Sep 10 08:04 ../
dr-xr-xr-x 2 root root 0 Sep 10 15:48 attr/
-rw-r--r-- 1 root root 0 Sep 10 15:48 autogroup
-r-------- 1 root root 0 Sep 10 15:48 auxv
-r--r--r-- 1 root root 0 Sep 10 08:04 cgroup
--w------- 1 root root 0 Sep 10 15:48 clear_refs
-r--r--r-- 1 root root 0 Sep 10 08:04 cmdline
-rw-r--r-- 1 root root 0 Sep 10 15:48 comm
-rw-r--r-- 1 root root 0 Sep 10 15:48 coredump_filter
-r--r--r-- 1 root root 0 Sep 10 15:48 cpuset
lrwxrwxrwx 1 root root 0 Sep 10 15:48 cwd -> //
-r-------- 1 root root 0 Sep 10 08:11 environ
lrwxrwxrwx 1 root root 0 Sep 10 08:04 exe -> /sbin/init*
dr-x------ 2 root root 0 Sep 10 15:48 fd/
dr-x------ 2 root root 0 Sep 10 15:48 fdinfo/
-rw-r--r-- 1 root root 0 Sep 10 15:48 gid_map
-r-------- 1 root root 0 Sep 10 15:48 io
-r--r--r-- 1 root root 0 Sep 10 08:11 limits
-rw-r--r-- 1 root root 0 Sep 10 15:48 loginuid
dr-x------ 2 root root 0 Sep 10 15:48 map_files/
-r--r--r-- 1 root root 0 Sep 10 15:48 maps
-rw------- 1 root root 0 Sep 10 15:48 mem
-r--r--r-- 1 root root 0 Sep 10 15:48 mountinfo
-r--r--r-- 1 root root 0 Sep 10 15:48 mounts
-r-------- 1 root root 0 Sep 10 15:48 mountstats
dr-xr-xr-x 5 root root 0 Sep 10 15:48 net/
dr-x--x--x 2 root root 0 Sep 10 15:48 ns/
-r--r--r-- 1 root root 0 Sep 10 15:48 numa_maps
-rw-r--r-- 1 root root 0 Sep 10 15:48 oom_adj
-r--r--r-- 1 root root 0 Sep 10 15:48 oom_score
-rw-r--r-- 1 root root 0 Sep 10 15:48 oom_score_adj
-r-------- 1 root root 0 Sep 10 15:48 pagemap
-r-------- 1 root root 0 Sep 10 15:48 personality
-rw-r--r-- 1 root root 0 Sep 10 15:48 projid_map
lrwxrwxrwx 1 root root 0 Sep 10 08:11 root -> //
-rw-r--r-- 1 root root 0 Sep 10 15:48 sched
-r--r--r-- 1 root root 0 Sep 10 15:48 schedstat
-r--r--r-- 1 root root 0 Sep 10 15:48 sessionid
-rw-r--r-- 1 root root 0 Sep 10 15:48 setgroups
-r--r--r-- 1 root root 0 Sep 10 15:48 smaps
-r-------- 1 root root 0 Sep 10 15:48 stack
-r--r--r-- 1 root root 0 Sep 10 08:04 stat
-r--r--r-- 1 root root 0 Sep 10 15:48 statm
-r--r--r-- 1 root root 0 Sep 10 08:04 status
-r-------- 1 root root 0 Sep 10 15:48 syscall
dr-xr-xr-x 3 root root 0 Sep 10 15:48 task/
-r--r--r-- 1 root root 0 Sep 10 15:48 timers
-rw-r--r-- 1 root root 0 Sep 10 15:48 uid_map
-r--r--r-- 1 root root 0 Sep 10 09:47 wchan
参考:https://blog.csdn.net/mediatec/article/details/88578101
还有很多系统相关的信息,在这里可以查看,如下等等:
# ls /proc //查看proc文件系统中的参数信息项等
#cat /proc/cpuinfo //查看CPU信息
#cat /proc/meminfo //查看内存信息
#cat /proc/interrupts //查看中断信息
1.1.6 sys目录
sys目录基本同proc目录,也是一种虚拟文件系统。
1.2 Linux启动流程
1.3 ubuntu启动流程
1.4 Linux系统版本描述
参考:https://blog.csdn.net/qq_35361115/article/details/100567834
1.5 clonezilla 制作clonezilla USB启动盘
1.下载 clonezilla制作文件,下载地址:https://clonezilla.org/downloads.php
选择ubuntu live release版本下载,是一个zip压缩文件:clonezilla-live-20200302-eoan-amd64.zip
2.将clonezilla制作文件拷贝到U盘中
3.插入USB虚拟机下,使其在虚拟机下。
4.使用sudo fdisk -l查看U盘是否已经挂载成功。
#fdisk -l
Device Boot Start End Blocks Id System
/dev/sdb1 * 63 31129599 15564768+ c W95 FAT32 (LBA)
5.mount U盘到ubuntu下,将clonezilla制作文件拷贝到相应目录下
~# mount /dev/sdb1 /tmp
~# cp /tmp/clonezilla-live-20200302-eoan-amd64.zip /home/chenchao/
6.umount(umount /dev/sdb1)之后再进行格式化,命令:mkfs.vfat -F 32 /dev/sdb1,再重新mount。
~# mkfs.vfat -F 32 /dev/sdb1
mkfs.fat 3.0.26 (2014-03-07)
7.unzip /home/chenchao/clonezilla-live-20200302-eoan-amd64.zip -d /tmp
8.进入/tmp/utils/linux/目录,运行bash makeboot.sh /dev/sdb1;一路选择y,将启动盘制作成功。
# bash makeboot.sh /dev/sdb1
This command will install MBR and syslinux/extlinux bootloader on /dev/sdb
Clonezilla files are assumed to be on /dev/sdb1
--------------------------------------------
Machine: VMware Virtual Platform:
Model: aigo U268 (scsi)
Disk /dev/sdb: 15.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.3kB 15.9GB 15.9GB primary fat32 boot, lba
--------------------------------------------
Are you sure you want to continue?
[y/n] y
OK! Let's do it!
--------------------------------------------
File system of /dev/sdb1: vfat
--------------------------------------------
Do you want to install MBR on /dev/sdb on this machine "VMware Virtual Platform" ?
[y/n] y
OK! Let's do it!
Running: cat "/tmp/utils/mbr/mbr.bin" > /dev/sdb
--------------------------------------------
Do you want to install the syslinux boot files on /dev/sdb1 on this machine "VMw are Virtual Platform" ?
[y/n] y
OK! Let's do it!
A filesystem supporting Unix file mode for syslinux is required. Copying syslinu x to /tmp/linux_tmp.k5R9mI
'/tmp/utils/linux/x64/syslinux' -> '/tmp/linux_tmp.k5R9mI/syslinux'
Running: "/tmp/linux_tmp.k5R9mI/syslinux" -d syslinux -f -i "/dev/sdb1"
//NOTE// If your USB flash drive fails to boot (maybe buggy BIOS), try to use "s yslinux -d syslinux -fs /dev/sdb1", i.e. running with "-fs".
syslinux ran successfully in installation mode.
Done!
root@ac702-dev:/tmp/utils/linux# umount /dev/sdb1
umount: /tmp: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
9.umount,拔出U盘即可。
1.6修改主机名
#cat /etc/hostname
hostname //修改此名字
#cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 hostname //修改此名字与上面的名字一致
1.7 shell操作
1.7.1 ctrl+命令
组合键 | 信号类型 | 意义 |
---|---|---|
Ctrl+C | INT信号interrupt | 停止当前运行的作业 |
Ctrl+Z | TSTP信号terminal stop | 使当前运行的作业暂时停止(转入阻塞态) |
Ctrl+\ | QUIT信号 | 强化退出 |
Ctrl+Y | TSTP信号 | 当进程从中端读取输入数据时,暂时停止该进程 |
1.7.2 $命令
符号表示 | 含义 |
---|---|
$1 | 就是该shell脚本第一个入参,第几个用数字直接表示,但两位数以上,则必须使用 {} 符号来括住,如${10};$0代表脚本命令自身。 |
$# | 脚本所带的个数,即脚本有多少的输入参数 |
$? | 是上一指令的返回值,成功是0,不成功是1。 |
$* | 所有脚本参数的内容:就是调用调用本bash shell的参数。 |
$@ | 基本上与上面$*相同。 |
$$ | Shell本身的PID(ProcessID),即当前进程的PID |
$! | Shell最后运行的后台Process的PID |
$- | 使用Set命令设定的Flag一览 |
1.7.3 数组
数组表示法中括号:
a[1]=11
a[2]=22
a[3]=
a[4]=44
数组表示法小括号:
a=(11 22 33 44)
数组表示法@/*:
a[@] 表示整个数组的所有元素
a[*]
1.7.4 正则表达式
正则表达式是由一串字符和元字符构成的字符串。主要功能是文本查询和字符串操作。主要被sed,awk等使用。
符号 | 意义 | 举例 |
---|---|---|
* | 0个或多个在*字符之前的那个普通字符 | |
. | 匹配任意字符 | |
^ | 匹配行首,或后面字符的非 | |
$ | 匹配行尾 | |
[] | 匹配字符集合 | |
|转义符,屏蔽一个元字符的特殊意义 | ||
\<\> | 精确匹配符号 | |
\{n\} | 匹配前面字符出现n次 | |
\{n,\} | 匹配前面字符至少出现n次 | |
\{n,m\} | 匹配前面字符出现n~m次 | |
? | 匹配0个或1个在其之前的那个普通字符 | |
+ | 匹配1个或多个在其之前的那个普通字符 | |
() | 表示一个字符集合或用在expr中 | |
I | 表示"或",匹配一组可选的字符 |
1.7.5 通配符
通配符包括正则表达式元字符?、*、[]、{}、^等但是通配符的含义与正则表达式不一样。
符号 | 含义 |
---|---|
* | 任意位的任意字符 |
? | 表示一个任意字符 |
^ | 表示取反 |
1.7.6 定位文本
选项 | 含义 |
---|---|
x | x为指定的行号 |
x,y | 指定从x到y的行号范围 |
/pattern/ | 查询包含pattern值的行 |
/pattern/pattern/ | 查询包含两个pattern值的行 |
/pattern/,x | 从与pattern值的匹配行到x行之间的行 |
x,/pattern/ | 从x行到与pattern的匹配行之间的行 |
x,y! | 查询不包括x和y行号的行 |
1.7.6 sed
实例1:sed s命令将替换后的全部文本都输出,结合-n,p选项只打印替换行。注:这里仅替换所在行的首先匹配的字符串。
sed -n ‘s/被替换的字符串/新字符串/p' 输入文件
#sed -n ’s/chen/CHEN/p' inputfile //将有chen的行字符串替换为CHEN,并输出修改行。
对所有匹配值进行替换需要加g
sed -n 's/chen/CHEN/pg' inputfile
对匹配值写入新文件
sed -n '1,5 w outfile' inputfile //将inputfile中的1~5行写入到outfile文件
1.7.7 awk
awk认为输入文件是结构化的。每一行由记录域和分隔符组成。分隔符可以是空格,tab键,或其他符号。$1,$2分别表示第一个域,第二个域;$0代表所有域。
awk循环执行体前后,分别由BEGIN,END作为循环之前执行,循环之后执行。
改变分隔符实例,一般默认分隔符为空格,现在改为table键作为分隔符。
awk -F“\t" '{print $3}' awkfile
awk 'BEGIN {FS="\t"} {print $3}' awkfile
环境变量描述
变量 | 描述 |
---|---|
$n | 当前记录的第n个字段,字段间由FS分隔。 |
$0 | 完整的输入记录。 |
ARGC | 命令行参数的数目。 |
ARGIND | 命令行中当前文件的位置(从0开始算)。 |
ARGV | 包含命令行参数的数组。 |
CONVFMT | 数字转换格式(默认值为%.6g) |
ENVIRON | 环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
FNR | 同NR,但相对于当前文件。 |
FS | 字段分隔符(默认是空格)。 |
IGNORECASE | 如果为真,则进行忽略大小写的匹配。 |
NF | 当前记录中的域数量 |
NR | 当前记录数 |
OFMT | 数字的输出格式(默认值是%.6g)。 |
OFS | 输出字段分隔符(默认值是一个空格)。 |
ORS | 输出记录分隔符(默认值是一个换行符)。 |
RLENGTH | 由match函数所匹配的字符串的长度。 |
RS | 记录分隔符(默认是一个换行符)。 |
RSTART | 由match函数所匹配的字符串的第一个位置。 |
SUBSEP | 数组下标分隔符(默认值是\034)。 |
字符串处理函数
函数 | 含义 |
---|---|
gsub(r,s) | 在整个$0中用s替代r |
gsub(r,s,t) | 在整个t中用s替代r |
index(s,t) | 返回s中字符串t的第一位置 |
length(s) | 返回s长度 |
match(s,r) | 测试s是否包含匹配r的字符串 |
split(s,a,fs) | 在fs上将s分成序列a |
sprint(fmt,exp) | 返回经fmt格式化后的exp |
sub(r,s) | 用$0中最左边最长的子串代替s |
substr(s,p) | 返回字符串s中从p开始的后缀部分 |
substr(s,p,n) | 返回字符串s中从p开始长度为n的后缀部分 |
1.7.8
2. 网络服务
2.1 DHCP
2.2 DNS
2.3 ARP
2.3.1 arp
1.arp表刷新时间,系统配置为30秒。
#cat /proc/sys/net/ipv4/neigh/eth0/base_reachable_time
30
2.arping
3.VLAN配置
4. 网络配置
4.1 网卡驱动调优
参考:https://my.oschina.net/u/4361306/blog/3477958
4.2 三层处理
4.2.2 route
4.2.3
4.3 桥接配置
1.ubuntu系统配置文件配置桥接,配置br0,包含GE2/3/4/5四个网口,GE1独立做管理口或虚拟路由的上行口。
root@ICS-PLATFORM:~# cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
GE1:
dhcp4: no
addresses: [192.168.2.51/22]
GE2:
dhcp4: no
GE3:
dhcp4: no
GE4:
dhcp4: no
GE5:
dhcp4: no
bridges:
br0:
interfaces: [GE5, GE4, GE3, GE2]
dhcp4: no
addresses: [192.168.3.51/24]
version: 2
2.配置STP服务,防止环回
#brctl stp br0 on
#brctl showstp br0 //查看端口状态
5. ubuntu系统配置
5.1 ssh服务安装
- 查看ssh服务是否安装命令
# dpkg -l | grep ssh
- 安装ssh服务
# sudo apt-get install openssh-server
- 查看ssh服务是否默认安装启动
# ps -e | grep ssh
- 启动/停止ssh服务
# sudo /etc/init.d/ssh stop
# sudo /etc/init.d/ssh start
- ssh登入测试
#ssh localhost
- root支持远程SSH登入配置
vim /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes
5.2 samba
添加smb用户
# sudo smbpasswd -a chenchao //配置密码
5.3 添加用户
- useradd
(1)会在/etc/passwd下面添加注册的账户:
(2)会在/etc/shadow 文件下建立注册用户的密码:
(3)不会在/home下建立一个文件夹username: - adduser
(1)会在/etc/passwd下面添加注册的账户:
(2)会在/etc/shadow 文件下建立注册用户的密码:
(3)会在/home下建立一个文件夹username - useradd -m username跟adduser一样,可以建立一个文件夹username,但是没有设置密码。
- 用户增加sudo权限:sudo useradd sudo
5.4 systemd 服务化例程安装
创建一个cli服务例程
[Unit]
Description=cli service
After=syslog.target network-online.target
[Service]
Environment="LD_LIBRARY_PATH=/root/cli/usr/lib:/usr/lib:/lib"
ExecStart=/root/cli/usr/bin/glcli -f /root/cli/etc/glcli/glscli.conf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=5s
User=root
[Install]
WantedBy=multi-user.target
服务化例程安装
sudo cp ./cli.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable cli
服务化例程管理
启动:systemctl start cli
停止:systemctl stop cli
状态:systemctl status cli
6 open vswitch(虚拟交换机)
6.1 概念
Openvswitch是一个优秀的开源软件交换机,支持主流的交换机功能,比如二层交换、网络隔离、QoS、流量监控等,而其最大的特点就是支持openflow,openflow定义了灵活的数据包处理规范。为用户提供L1-L4包处理能力。OVS支持多种Linux虚拟化技术,包括Xen、KVM以及VirtualBox。此外,OVS支持硬件交换机。
6.2 安装
ubuntu下支持open vswitch,使用ubuntu18.04LTS安装。
#sudo apt-get install openvswitch-switch openvswitch-common
#sudo ovs-vsctl -V //查看版本号
#sudo ovs-vsctl show //查看网桥