linu实用基础二-程序员宅基地

技术标签: 运维  linux  服务器  

软件包管理相关使用 yum及编译安装

yum install tree vim -y

理解编译和解释型语言

rpm二进制软件包安装难度大依赖顺序和库文件需要捉摸
yum是inux红帽软件rpm包,可配置资源软件库和自动化安装管理工具

编译安装是?

不同于标记 python,shell解释语言解释器实时翻译。高级语言需编译且源码包经过调试自检不容易出错

例:python:解释型 yum -y install python安装解释器环境,编写脚本执行即可;python2需声明字符集

cat >> hello.py << ‘EOF’
# -*- coding: utf-8 -*-
def greet(name):
print “Hello,”, name
greet(“石头·”)
EOF

例:golong 编译型

yum -y install go #构建编译运行环境
cat >> hello.go << ‘EOF’
package main
import “fmt”
func main() {
fmt.Println(“Hello, world!”)
}
EOF
go build hello.go
./hello
或go install hellogo 编译在~/go/bin目录中
或直接临时运行测试 go run hello.go
部署java 1.配置jdk环境变量 2.上传资源,解压转移 3.jar或javac编译并java 运行;
名词解释:community:社区 X86处理器架构_64内存寻址位64位

rpm查找包,及安装文件
rpm -qa |grep nginx #验证是否安装

rpm -ql package #显示安装文件
rpm -qf /etc/passwd #反向查找文件是属于哪个【软件包】
安装升级
rpm -ivh package #安装并显示详细进度
rpm -Uvh package # 如果有新版本rpm包用词命令升级

yum工具使用

安装
yum -y install vim ntp # 默认安装源最新版本
移除 #rpm只删除指定软件包 yum可以依赖一起安装或删除
yum remove vim* ntp && find / -name ‘nginx*’ 清认残留文件
查询 仓库源相关软件包
yum list |grep mysql

centOS源码编译安装之make工具:

1.淘宝nignx下载,解压。安装ssl功能等依赖否则无法应用到编译程序
wget tengine.taobao.org
tar -zvxf tengine-2.3.3.tar.gz
yum install -y openssl openssl-devel pcre pcre-devel zlib zlib-devel
2.执行编译配置。语法参数(配置目录及功能性)生成MakeFile文件
./configure --prefix=/opt/my_nginx/ --with-http_ssl_module
3.make&&make install
4.如何让编译好的二进制命令快捷运行
环境变量:export $PATH:/opt/my_nginx/sbin 配置环境变量。永久配置并刷新变量source /etc/profile
快捷方式:创建指向到bin目录二进制文件 尽量使用隔开原目录的绝对路径目录 ln -s opt/mysoft-path/soft/bin /softwarelink/nginx ./x运行
管理脚本:如果想让systemctl管理可以编写脚本放到sytemd管理服务目录中/usr/lib/systemd/system
管理脚本文件====>
[Unit]
Description=Tengine HTTP Server
After=network.target
[Service]
Type=forking
ExecStart=/opt/my_nginx/sbin/nginx
ExecReload=/opt/my_nginx/sbin/nginx -s reload
ExecStop=/opt/my_nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
=====>
指向命令systemctl daemon-reload 生效
rpm有源码包支持自定义编译安装

迁移rpm包,配置准备自己的离线yum仓库源

准备离线包
1.yumdownloader命令 yum-utils工具查询下载具体版本及依赖

查询安装软件依赖包 并缓存,下载
yum -y install nginx
yum deplist nginx > deplist.txt
(rpm,yumdownloader也提供查询依赖包命令 rpm -q --requires nginx rpm -ql yum-utils|grep bin/repoq 查看工具命令 --help查看命令方法)
awk ‘NR%20{print $2}’ deplist.txt |xargs -i yum -y install {} #缓存到本地
awk 'NR%2
0{print $2}’ deplist.txt | yumdownloader --destdir=/var/cache/yum --resolve {} 下载到dest目标目录
2.打包yum默认缓存的rpm包
tar -zvcf yum.d /var/cache/yum

创建独立的离线仓库元数据和rpm包文件夹 工具 createrepo
mkdir /etc/yum/local 元数据:解析优化,rpm包拷贝解压到这
createrepo /etc/yum/local

新增yum源配置本地 .repo文件
vim etc/yum.repos.d/local.repo
配置文件
=======>
[localrepo]
name=loaclrepo
baseurl=file:///etc/yum/local
gpgcheck=0
enabled=1
=======>
避免依赖过期缓存情况
清除内存和磁盘缓存 yum clean all && rm -rf /var/cache/yum/*

引用网络资源软件包具体版本 作为yum仓库配置源识别使用

以【https://repo.mysql.com/ 】mysql-5.6-community为例
准备工作
yum remove mysql* maridb* #排除软件冲突
vim etc/yum.repos.d/mysql5.6.repo
[mysql]
name=“mysql5”
baseurl=“https://repo.mysql.com/yum/mysql-5.6-community/el/5/x86_64/”
enable=1
gpgcheck=0
priority=1 #优先级
完成
yum -y insatll mysql-5.6 指定名字安装,不指定优先下载最新版本

初识docker

下载安装启动 【docker需要注册才能拉取镜像源】社区版免费
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
yum make fast 更新社区版源
yum -y install docker-ce
systemctl start docker

创建构建环境 目录放入资源配置,Dokerfile

Dokerfile=====>
FROM centos:latest #使用官方的 CentOS 镜像作为基础镜像
RUN yum -y update && yum -y install nginx #更新 yum 软件包源并安装 Nginx
WORKDIR /app #设置构建目录为工作目录 /app
#COPY app.py /app/app.py #复制本地目录程序文件到镜像中的 /app 目录
COPY config.ini /app/config/config.ini #复制本地资源配置文件到镜像中的 /app/config 目录
#ENV ENVIRONMENT=production #设置自定义环境变量
EXPOSE 80 #暴露 Nginx 默认端口
CMD [“nginx”, “-g”, “daemon off;”] #启动 Nginx 服务
======>

构建镜像及基本使用

docker build -t simple-web-server .
docker images
docker run -d -p 8080:80 simple-web-server
docker ps
访问即可

基本使用

docker build -t <镜像名称> <Dockerfile及资源目录> #保证目录下有配置文件,资源同步到容器
docker run -d -p <host端口>:<容器端口> <镜像名称> #d --detach分离后台 -P随机映射端口
docker ps;
docker start containerID;
docker stop containerID;
docker save -o /path/to/save/my_image.tar <my_image>: #导出分层的镜像源文件
docker load -i /path/to/docker.tar
docker images
docker system prune -a
拉取下载镜像
docker pull nginx:latest

ubuntu命令类似

#仓库管理apt=yum 包管理dpkg=rpm 包后缀deb=rpm 执行sudo cmd
apt

更新apt源 apt使用

sudo apt update
安装
sudo apt -y install openssh-server
=dpkg=
查找已安装软件
dpkg -l | grep ssh
dpkg安装install
sudo dpkg -i p.deb

配置apt仓库源

sudo cp /etc/apt/sources.list{,.bak}
sudo vim /etc/apt/sources.list

sed -i 's#https:\/\/archive.ubuntu.com#http:\/\/mirrors.aliyun.com#g' /etc/apt/sources.list

cat >> << ‘EOF’
deb [by-hash=force] https://mirrors.aliyun.com/deepin apricot main contrib non-free
EOF
sudo apt update再更新源即可

apt部署一个web程序

sudo apt -y install nignx
sudo systemctl start nginx
#修改nignx配置文件
全局配置文件sudo vim /etc/nginx/nginx.conf
特定服务配置文件 sudo vim '/etc/nginx/conf.d/*.conf server
示例1.server {
listen 80;
server_name example.com; #请求规则
location / {
root /var/www/example; #处理规则,资源根目录定义
index index.html; } #web首页资源请求位置/
}
示例2.upstream backend {
server backend1.example.com:80;
server backend2.example.com:80; #定义分流服务器池
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; #监听请求规则并转发
}
}
sudo nignx -t; #验证配置文件语法是否正确sytax

【坑】:Could not get lock /var/lib/dpkg/lock. It is held by process 9230 (unattended-upgr)…
原因:意外中断升级失败等情况产生的缓存锁文件
解决:k9杀掉占用apt进程,继续完成升级sudo apt-get update。连续杀调用2次后可以正常使用apt工具

LAMP 架构初级(含编译安装)

LAMP技术栈(Web架构,组合) linux apche mysql php
tail -f /var/log/messages #有助于了解故障或软件安装运行情况,实时查看系统日志文件 /var/log/messages

lamp yum部署
安装部署新程序环境准备

注意清除软件服务冲突,缓存依赖
准备 (如搭建在云服务器。需创建阿里云安全组,添加放行授权IP及访问端口)
关闭内置安全机制selinux 防火墙服务 清除flush防火墙规则

安装 apache yum -y install apache

配置文件etc/httpd/conf/httpd.conf
下载安装工具包release-noarch.rpm 作用在本地配置yum源仓库
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装卸载mysql yum -y install (mysql-5.7-community配置工具提供的版本源) 彻底卸载目录lib etc /var/lib/mysql /etc/mysql*

运行使用 --初始化命令
mysqld --initialize #安装后需初始化数据目录和系统表
mysql_secure_installation #设置 root 用户的密码等安全性设置

安装php yum -y install php

rpm -ql httpd|grep html #查找资源目录为 apache /var/www/html/index.php nginx /usr/share/nginx/html
yum安装lamp软件。apache会自动解释和执行这些 PHP

lamp 编译安装 tips:php仅且低版本需调用mysql函数接口必须先编译MySQL

关闭安全策略工具

准备最小化系统所需环境依赖 工具包 运行库。

==================================>
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel net-tools vim -y
yum install cmake make pcre-devel ncurses-devel openssl-devel libcurl-devel -y
yum install libxml2-devel libjpeg-devel libpng-devel freetype-devel libcurl-devel wget -y
yum groupinstall “Development tools” -y
例:桌面平台开发所依赖的工具包(图形化相关包) 如果可用,了解开发环境和运行环境之间兼容性和要求。
环境所需软件库,依赖项
yum groupinstall “Desktop Platform Development” -y
【坑】环境依赖错误:解压缩xxx.tar.bz2 报错了,提示找不到bzip2这个命令
yum install bzip2-devel yum install openssl-devel ncurses-devel
==================================>

准备配置中所需运行软件守护进程用户,也可不准备程序安装时生成

useradd -r -s /sbin/nologin mysql

MySQL

下载源码包,解压
wget -P /usr/local/software-mysql -c https://repo.huaweicloud.com/mysql/Downloads/MySQL-5.6/mysql-5.6.50.tar.gz
tar -zvxf /usr/local/software-mysql/mysql-5.6.50.tar.gz

cmake编译

构建编译配置
终端运行==================>
cmake .
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/
-DMYSQL_DATADIR=/usr/local/mysql/data
-DENABLED_LOCAL_INFILE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DMYSQL_TCP_PORT=3306
-DDEFAULT_CHARSET=utf8mb4
-DDEFAULT_COLLATION=utf8mb4_general_ci
-DWITH_EXTRA_CHARSETS=all
-DMYSQL_USER=mysql=====> 运行软件系统用户。实际安装过程中·会生成软件系统用户
编译并安装
make && make install
快捷运用软件命令
配置即时环境变量export PATH=$PATH:/usr/local/mysql/bin/
配置管理服务单元 init.d下脚本文件(service命令管理控制服务单元对应此目录下文件)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
修改资源目录属主组权限
chown -R mysql:mysql /usr/local/mysql/
数据库初始化 执行脚本scripts操作 ./执行文件
./scripts/mysql_install_db --user=mysql
验证数据库表文件位置 是否有初始化新表
ls /usr/local/mysql/data/mysql
验证启动mysql (默认没密码)用户root用户密码设置 也可以用这个管理命令创建用户。
./usr/local/mysql/bin/mysqladmin -uroot -p password ‘passwd’
创建程序运行所需数据库
命令创建 mysqladmin create web_blog
表内创建
CREATE DATABASE web_blog

apache

下载源码包并解压
wget -c http://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2
补充 重定向 和 跳过证书验证++++++++++++++++++++++++++++++++++
HTTP request sent, awaiting response… 301 Moved Permanently
To connect to archive.apache.org insecurely, use `–no-check-certificate’+++++++++++++++++
tar -jvxf apr-1.5.2.tar.bz2 #-j 处理bzip2.bz2压缩文
修改bug configure文件 :29605 替换RM=‘KaTeX parse error: Expected group as argument to '\'' at position 40: …9605s/.*/RM='\''̲RM -f’‘’/’ configure #‘’'转义后的单引号
sed -n ‘29605p’ configure ====>

apache编译配置动态链接库
echo “/usr/local/apr/lib/” >> /etc/ld.so.conf;
使新添加的库路径生效
ldconfig

apache ab 命令测网站并发性能 依赖宿主机硬件资源
ab -n 1000 -c 100 http://example.com/ #模拟千次请求
apache基金会源码包归档库
https://archive.apache.org/dist/

构建编译配置
终端执行或者写出bash脚本
./configure
–enable-modules=all
–enable-mods-shared=all
–enable-so
–enable-rewrite
–with-pcre
–enable-ssl
–with-mpm=prefork
–with-apr=/usr/local/apr/bin/apr-1-config
–with-apr-util=/usr/local/apr/bin/apu-1-config
编译并安装
make && make install

PHP

下载资源包并解压
wget -c https://museum.php.net/php7/php-7.2.17.tar.xz
查看tar命令处理各种压缩文件的参数
tar --help |grep filter
-j, --bzip2 filter the archive through bzip2
-J, --xz filter the archive through xz
–lzip filter the archive through lzip
–lzma filter the archive through lzma
-z, --gzip, --gunzip, --ungzip filter the archive through gzip
构建编译配置
./configure
–with-apxs2=/usr/local/apache2/bin/apxs
–with-mysqli
–with-pdo-mysql
–with-zlib
–with-curl
–enable-zip
–with-gd
–with-freetype-dir
–with-jpeg-dir
–with-png-dir
–enable-sockets
–with-xmlrpc
–enable-soap
–enable-opcache
–enable-mbstring
–enable-mbregex
–enable-pcntl
–enable-shmop
–enable-sysvmsg
–enable-sysvsem
–enable-sysvshm
–enable-calendar
–enable-bcmath
make && maske install

程序安装文件路径
配置文件路径 /conf/httpd.conf 安装路径/usr/local/apache2
编辑功能配置 让php和apache识别交互提供服务
配置语言支持
159 LoadModule negotiation_module modules/mod_negotiation.so 内容协商模块
482 Include conf/extra/httpd-languages.conf
php和apache交互转发模块处理解析
166 LoadModule php7_module modules/libphp7.so 加载 PHP 模块
以.php结尾的文件都认为是php程序文件并解析和执行 PHP 代码
166 LoadModule php7_module modules/libphp7.so
167 AddHandler php7-script .php
168 AddType text/html .php
定义Web首页文件名和资源根目录路径
267
268 DirectoryIndex index.php index.html
269
234 DocumentRoot “/usr/local/apache2/”
235 <Directory “/usr/local/apache2/【htdocs】”>
修改apache 扩展项配置文件
vim /usr/local/apache2/conf/extra/httpd-languages.conf
19 DefaultLanguage zh-CN
78 LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW
配置系统管理单元即复制管理脚本
cp /usr/local/apache2/bin/apachectl /etc/init.d/apache

测试

解压源码程序到根目录htdocs;
1.注意资源目录归属权限 apache进程用户编译安装,apache,mysql安装过程会自建运行软件用户
ps aux|grep apache 查询运行软件的用户赋权,chown -R apache:apache /web_root
2.检查启动lamp服务 以及流量规则后 即可访问web资源
vim index.php

<?php phpinfo(); ?>

其他相关配置文件,INI 格式配置文件
[section1] key1 = value1

磁盘管理与文件系统

了解磁盘设备

磁盘设备文件目录/dev/sd nvm
本地光驱 /dev/sr 硬盘USB /dev/sd

文件系统存储单位

扇区512byte 簇:8个扇区为一簇 block:多个簇,为系统逻辑单位优化IO

分区表

是一种数据结构,存在硬盘中,管理硬盘分区信息,例:BIOS硬件初始化之一硬盘并读取分区表信息引导系统
分区表
MBR分区表形式:最大分区支持2T,多余空间忽略 。
组成形式:限制4个分区,主分区+扩展分区,不限制扩展逻辑分区
GPT分区表像是: 替代MBR
linux磁盘设备文件名:/dev/sd

存储设备如何可用?

1.纯设备:直接格式化文件系统挂载 2.创建便于管理的分区表再创建文件系统挂载。

设备存储分区管理工具使用 fdisk

设备查看
lsblk
设备分区MBR
fdisk /dev/sdb
c toggle the dos compatibility flag
o create a new empty DOS partition table
p print the partition table
n add a new partition -p
p print the partition table +10K,M,G,T
n add a new partition -e
p print the partition table +10K,M,G,T
n add a new partition -l
p print the partition table +10K,M,G,T
w write table to disk and exit
mkxfs /dev/sdb1
mount /dev/sdb1 /mnt/mnt1 #挂载设备到文件
df -T /dev/sdb1 #df -T /mnt/mnt1
umount /mnt/mnt1
fdisk /dev/sdb
d delete a partition
w write table to disk and exit
partprobe /dev/sdb 更新设备分区信息
设备分区GPT
fdisk /dev/sdb
g create a new empty GPT partition table
n +10K,M,G,T
w write table to disk and exit
mkfs.xfs -f /dev/sdb2 #mkfs.extXX /dev/sdXX
mount /dev/sdb1 /mnt/mnt1
df -T /dev/sdb1 #df -T /mnt/mnt1
umount /mnt/mnt1
fdisk /dev/sdb
d delete a partition
partprobe /dev/sdb 更新设备分区信息

设备存储分区管理工具使用 parted

parted /dev/sdb 进入交互式
print 查看硬盘和分区情况
mktabel msdos|mktabel gpt
默认创建分区时交互式创建文件系统xfs
(parted) mkpart
Partition name? []? 1
File system type? [ext2]?
Start? 0
End? 100%
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 10.7GB 10.7GB 1
(parted) rm 1|quit
partprobe /dev/sdb
lsblk
mount /dev/sdb1 /mnt

存储设备分区专属gpt工具使用 yum -y install gdisk

mount -l |grep sdc ;查看设备是否有分区被挂载使用
0700 Microsoft basic data 8300 Linux filesystem
Command (? for help): d 1
No partitions
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-20971486, default = 34) or {±}size{KMGTP}:
Last sector (34-20971486, default = 20971486) or {±}size{KMGTP}: 9G
Current type is ‘Linux filesystem’
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to ‘Linux filesystem’
Command (? for help): w
mkfs.xfs -f /dev/sdb1
mount /dev/sdb1 /mnt

强制取消挂载

【坑 无法挂载目录下取消挂载】umount -f /mnt
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
除了创建分区系统,还可以基于设备文件格式化整块文件系统
mkfs.xfs /dev/sdc mkfs.xfs /dev/sdb mkfs.extXX /dev/sdXX
挂载目录原目录如果有文件则是隐藏文件 .file

挂载永久生效

查找设备uuid
blkid或 lsblk -f 执行写入
echo “UUID=3bbfd947-23f1-4931-8695-4d677600cbb2 /mnt xfs defaults 0 0” >> /etc/fstab
mount -a #更新应用挂载

xfs_info文件系统命令

容量=inode,block块大小4096B*数量
xfs_info /dev/sdc /dev/sdb1 查看 xfs分区文件系统
xfs_check xfs_repair 修复文件系统
xfs_growfs /mnt 如果是extx文件系统命令 resize2fs /mnt
文件系统应用及 同步调整后的空间
mkfs.ext4 /dev/vg1/lv1 mount /dev/vg1/lv1 /mnt
vgscan && resize2fs /dev/vg1/lv1 ext234不适合大数据hdfs部署环境,文件系统读取上限低
mkfs.xfs /dev/vg1/lv1 mount /dev/vg1/lv1 /mnt

xfs_growfs命令使用场景:动态应用设备文件系统调整后的分区大小

df -hT /mnt 查看具体文件系统的详细信息
vgscan && xfs_growfs /mnt
原理
不释放挂载映射关系,格式化分区就不影响文件系统uuid和设备文件名之间关联。就能应用源设备新空间大小。
不释放挂载映射关系uuid不变。永久挂载配置文件就不用变,否则系统报错需要进入引导项第二项注释掉配置
忘记root密码需要选中修复引导项 摁e键 在linux开头行末尾编辑内核 并ctrl+x保存启动
在这里插入图片描述

linux特殊设备文件使用 zero urandom null
创建大文件 /dev/zero

dd if=/dev/zero of=2G.txt bs=10MB count=100
dd if=/dev/urandom of=/dev/sdc bs=4M conv=notrunc 粉碎方式不同于shred file 随机二进制数据写分区块设备直至写满
for i in {1…2}; do dd if=/dev/urandom of=file bs=4M count=2; done 销毁文件 开源DBAN软件做成引导启动盘工具更安全 2次
任务进程信息黑洞文件>/dev/null 2>1&

dd其他用法

dd if=/tmp/boot.bak of=/dev/sda1 #恢复迁移数据
dd if=/dev/sda of=/dev/sdb #把磁盘a备份到磁盘b
dd if=/dev/cdrom of=/tmp/cd.iso #把光盘中所有的数据制作成ISO镜像
mount -o loop /tmp/cd.iso /mnt/cdfs
#挂ISO文件到挂载点 loop循环设备的使用使得在没有实际物理设备的情况下,仍然可以像挂载

mount挂载参数 设置只读,root也会报错,ln: failed to create hard link ‘ll’: Read-only file system

mount -o exec -o ro /dev/sdc /mnt 配合使用可读运行。不可修改挂载目录文件 -o noexec
mount -o noexec -o ro /dev/sdc /mnt 纯纯只读 bash是读取内容到内存加载运行例外

文件的理解

3部分 文件夹的条目(索引节点)+文件内容数据的block+文件属性元数据inode; 文件夹中存:文件条目和文件名inode映射数据集成
因为文件名和inode相互映射引用 因此文件名就是索引

查看inode号及 元数据信息超详细查看

ls -i file inode号查看
stat file 显示inode号及元数据信息

删除文件过程

找出文件名对应inode,定位inode号所映射的文件,删除条目引用,检索是否有其他条目引用这个inode号。无则清理内容占用块标记block和inode可用。
文件夹理解
linux文件夹的inode指向的内容块本质上存有存储子文件夹和文件的索引节点(映射关系)
所以文件夹inode引用机制(硬链接)是树状的。
一个文件夹的索引节点数是子文件和子目录的数量加 硬连接引用数量为子文件夹+(.)+目录本身

硬链接原理:引用了同一个inode号的新条目索引。硬链接不得跨文件系统且只能应用文件ln: failed to create hard link ‘ll’ => ‘/etc/passwd’: Invalid cross-device link
软链接原理:记录目标路径使用时被解析。单独使用一个inode

无空间可用 no sapce left 表示inode或block空间被消耗完了
查看系统i b资源总数
df -ih
尝试释放小文件 inode

raid逻辑设备组合 独立冗余磁盘阵列技术

软:基于系统控制 硬:raid控制器卡控制 开机快捷键进入配置
raid0 并行交替: 性能高,并行交替读写
2块或以上 并行写入不同数据,数据分割在不同分区硬盘,没安全性可言
raid1镜像冗余复制写入 读写一般只是备份安全特性高
2块起
raid5 raid0+数据块校验信息算法反推数据盘
3块起 保证raid0性能情况下,存储其他盘数据校验信息增加安全性
raid10 0和1的组合配置
4块起成本高,性能和安全性再提升,不是raid0整组冗余坏了就是安全的

软raid学习-----yum -y install mdadm工具 manydevice多磁盘设备序列工具
raid10 创建实践

-C组建阵列设备文件,-n独立应用磁盘数量,-l raid级别,-a 自动创建阵列文件,-v展现细节信息
mdadm -C /dev/md10 -n 4 -l 10 -v /dev/sdb /dev/sdc /dev/sdd /dev/sde
可用空间规则
所以磁盘容量尽量相近:最小磁盘大小*阵列数,n2布局代表可用存储再降一半
查询逻辑设备并使用
lsblk && mkfs.xfs /dev/md10 && mount /dev/md10
创建的阵列设备文件可以创建分区表再分区使用,也可以直接格式化系统使用

其他操作

mdadm -D /dev/md0 阵列设备信息查看,
-f 标记阵列组中设备故障
添加热备份,热备份将被使用无法移除
mdadm -a /dev/md10 /dev/sdg
标记故障设备raid机制自动替换备份硬盘
mdadm -f /dev/md10 /dev/sde
mdadm: set /dev/sde faulty in /dev/md10
标记的故障设备可移除
mdadm -r /dev/md10 /dev/sde
mdadm: hot removed /dev/sde from /dev/md10
文件系统变更同步 xfs_growfs /mnt

停用解构raid

mdadm --manage --stop /dev/md10 # 停止 RAID 设备
mdadm --zero-superblock /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdg /dev/sdf # 清除硬盘的 RAID 元数据
mdadm。raid技术机制一旦创建,不方便增加raid设备数增加容量

lvm逻辑卷技术. 动态管理磁盘三层

yum -y install lvm2

1.pv初始化物理卷 磁盘和分区都支持转化物理卷,逻辑卷单位

pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde
pvdisplay 或pvs 查看物理卷
pvremove /dev/sdb 擦除物理卷
vgscan 扫描更新卷组和 逻辑卷

2.vg创建卷组动态扩容

vgcreate vg1 dev/sdb /dev/sdc /dev/sdd /dev/sde
vgdisplay 或vgs 查看卷组
vgremove vg1 抹除卷组
vgextend vg1 /dev/sdf1 扩容卷组物理卷
vgreduce vg1 /dev/sdf1 移除卷组物理卷
vgscan 扫描更新卷组和 逻辑卷

lv逻辑卷创建与容量调整 从卷组中存取容量转化为具体设备文件

lvcreate -n lv1 -L 8G lvcreate -n lv2 -L 100%FREE vg1
lvs;lvdisplay 显示逻辑卷
lvremove /dev/vg1/lv1
lvextend -L +1G /dev/vg1/lv1 扩展+1G
lvreduce -L 5G /dev/vg1/lv1 减少到固定5G

还原逻辑卷到原设备状态

umount =>lvrmove => lvs =>vgremove=> vgs>pvremove===> pvs

Linux环境通配符和与三剑客正则使用

linux bash环境执行作用 部分场景需要\ 转义特殊字符为普通字符
通配符字符 ls * 任意0到多个字符匹配代入执行命令。
ls test? test1 ?任意单个字符
ls test[1,4,5] test1 test4 test5 [1,2,3] 或匹配单字符列
ls test{13,10}. test10 test13 {e1,e2,e3} 或匹配元素字符列
组合通配字符 l
ls test[!2…4] test1 !排除规则
关于linux引号
‘字符串字符’ 所见所得 “能解析变量,命令"输出结果 反引号引用执行命令返回结果
利用”" 正确引用解析处理
touch “log_date +%F_%T”. touch “log_$(date +%F_%T)”
touch ‘a b’. 1.txt 2.txt rm -rf $(ls) ,剩余 a b有空格无法识别删除;正确引用解析处

逻辑符其他符号前端应用:
前端标准输出流代码1 std ,标准输出错误流2 stderr , &指示后台工作 例: command >> log_file 2>&1
&& 逻辑真顺序符 || 逻辑或执行ture分支 echo “true”|| ip a;输出true
$(command) 引用命令;引用变量 v a r 管道标准输出流符|元素序列配合命令多次执行创建文件夹,或修改数据 m v / e t c / c o n f , ‘ . b a k ‘ 添加后缀形式备份 m k d i r − p 。 男 , 女 / 大陆 , 台湾 创建 4 文件夹 t o u c h a b s o l u t e / s o n g 1 , s o n g 2 创建 2 文件 = = {var} 管道标准输出流符 | 元素序列配合命令多次执行创建文件夹,或修改数据 mv /etc/conf{,`.bak`} 添加后缀形式备份 mkdir -p。 {男,女}/{大陆,台湾} 创建4文件夹 touch absolute/{song1,song2} 创建2文件 == var管道标准输出流符|元素序列配合命令多次执行创建文件夹,或修改数据mv/etc/conf,‘.bak添加后缀形式备份mkdirp,/大陆,台湾创建4文件夹touchabsolute/song1song2创建2文件==()==嵌套引用命令只能作为参数解析使用
类似file { KaTeX parse error: Expected 'EOF', got '}' at position 5: (ls)}̲=file * …(ls)"
| 管道符配合xargs使用
简略用法 command |xargs -i command代入{}. 全写 command | xargs -I {} command代入{}
路径使用经验
压缩归档用相对 链接对象要脱离目标对象目录

正则. 作用目的是找行(作为规定内容传入剑客参数模糊查找)

最佳语言环境设置
locale | grep LANG
localectl set-locale LANG=en_US.utf-8; 临时声明环境变量 export var=1
剑客支持的基本正则 . * ^ $ [^]
剑客扩展正则需要声明参数 -r 扩展正则模式 -e’表达式1’ -e ‘表达式2’
流式处理工具 >>. >
grep 数据源模糊匹配 -o 只输出正则匹配内容
sed文本行修改处理输出 -n ‘/patern/p’
awk文本行列处理提取 ‘NR==number, {print $NF}’

正则元字符说明

\可以把正则元字符转义普通字符
元素制定部分符: 匹配行内容首尾
^head tail$

单字符的数量复制用法

p* 我是虚无的,意义是复制0个或无数个前面的你p
p+ 我是你本身或者无数个你~p
p{n,} 我是你至少是你的n倍~p
p{n,m} {}用我来制定单字符的复制p的整数范围吧
分组符。括下字符串元素 最多识别9个() 前面分组出正则匹配,后面引用\1,\2
(string|spring) 相当于字符串组啦

单字符的表示

. 任意单个字符都是我~
e? 我可能是虚无的但我也可能是单字符呢?
[A-Z0-9a-z] 我必是这些单字符数组范围内的任意一个奥

复合元素组合匹配

. * 准确匹配所有内容行
^$ 准确虚无内容行
w(e|el|ele){n,m} 或符号,任何字符串元素N倍个都能与我组合搭配
[^A-Z0-9a-z] ^我在单字符数组列中使用就不是混头了,是为了让他们都不作为单字符匹配
剑客不支持的其他预定义模式:
\d:[0-9]。\D:字符集 [^0-9]
\w:[A-Za-z0-9_]
\s:任意空白字符,如空格、制表符等。

经典表达

手机号: \b1[3-9]\d{9}\b 单词边界,不阻断,从而不受换行的影响
域名: [a-zA-Z0-9-]+(.[a-zA-Z0-9-]+).[a-zA-Z]{2,}
解析 [a-zA-Z0-9-]+最低级域名 (.[a-zA-Z0-9-]+)
次级以下域名数字,字母 字符- .[a-zA-Z]{2,} 顶级域名只有字母
ipv4地址 \b(\d{1,3}.)\1\1\d{1,3}\b或
liux提取IP: ifconfig ens33|grep -oE ‘\b(\d{1,3}).\1.\1.\1\b’

grep

grep 扩展正则模式 -E grep -E ‘(ell){2}’ source -v反转输出。 -i忽略大小写,-o正则匹配内容

sed

过程,加载内容行到内存模式空间 按行处理$结尾

语法解析

sed -r -[n静默输出i执行修改不输出e多命令表达式] ’ [内编辑命令ia插入前后行 c替换行 ] ’ [source]
’ [内编辑命令] ’ :/pattern/模糊匹配行或精准行符指定行

精确行指定

‘d’ 删除所有行,使空内容
‘3p;5p’ 打印第3;5行
‘3,9p’ 等同’3,+6p’ 打印3-9行
‘12d;44p’ 多模式处理奇数行,4,8,12行

命令操作

查行

sed -r -n ‘/pattern/p’ source 正则模糊匹配查找行到标准输出流
sed -n ‘$p’ source 指定尾行
sed -n ‘N,Mp’ source 指定奇数行

删行查询并执行

sed -r -n ‘/pattern/d’ source 正则模糊匹配执行结果到标准输出流
sed -r -i ‘/pattern/d’ source 正则模糊匹配执行操作不输出

换整行并执行

sed -r -n ‘/pattern/c new_words’ source 正则模糊匹配执行结果到标准输出流
sed -i -n ‘/pattern/c new_words’ source 正则模糊匹配执行操作不输出

插入匹配行前后并执行

sed ‘/e/a 3.5’ file sed -i ‘/e/a 3.5’ file
q q q q qe 1 1 1 1 1e2 1 3 4
3.5
sed ‘/1/i 3.5’ file sed -i ‘/1/i 3.5’ file
3.5
q q q q qe 1 1 1 1 1e2 1 3 4

执行替换字符替换处理后重新向输出 s/old/new/ 替换记录第一个

sed ‘s/old/new/gw out.file’ input.file sed ‘s/old/new/g’ input.file > out.file

引用环境变量必须双引号解析 " $()"

echo new_name=tang sed “s/name/ n e w n a m e / " f i l e s e d " s / n a m e / {new_name}/" file sed "s/name/ newname/"filesed"s/name/(command)/” file

分组捕获,引用提取某个单词

cho ‘sssss,welcom r mmmm’|sed -r ‘s/^.,(.)\sr.*$/\1/’
welcom

多个模式处理

sed -r -e ‘/pattern1/p;/pattern2/p;$d’ -e ‘s/old/new/g’ file
续行符
sed -i ‘/game/ c 我爱你
aini’ file 续行符\后面保证无字符只能回车不然会解析错误

awk

变量 -v FS= -v ORS= ‘NR=>N $1 $NF KaTeX parse error: Expected '}', got 'EOF' at end of input: …R< M{print选定变量列N某列,$NF末列,$0全列}’==> source
PS:FS不能和$0使用,以为$0代表优先输出整行忽略列分割符,需配合逐单个自列使用$1,$2
==例:cat file ====> q q q q qe 1 1 1 1 1e2 1 3 4

awk -v RS=“e” -v FS=" " -v OFS=“\n” -v ORS=“\n” ‘{print $1,$2,$3}’ file

q
q
q
1
1
1
2
1
3

awk 其他处理块 ’ BEGIN{} //{}END{} ’

awk ‘BEGIN{FS=" “;RS=“e”;OFS=”,“;ORS=”\n";print “表头处理前输出”}/3/{print $1,$2,$3}END{print “这是” ,“内容处理后输出”}’ file >csv
cat csv逗号文件
表头处理前输出
2,1,3
这是,内容处理后输出==
其他数据源或标准流处理
echo cc{01…50} | xargs -n 5 指定行为参数 5个
echo ‘hll’ |tr ‘ll’ ‘LL’ tr替换只支持标准输入输出流

提取单词

<===Title: My First Day at School
My first day at school was a blend of excitement and nervousness. Waking up early, I felt a butterfly in my stomach as I imagined what the day would be like. Would I make new friends? Would the teachers be nice?
====>

R行思路:RS分割符截取单个单词作为记录。统计出现最多字数的前五个单词

awk -v RS=“[^a-zA-Z0-9]+” ‘{print $1}’ english | sort | uniq -c | sort -r|head -5

grep -o思路:精准匹配正则单词

grep -o -E ‘[a-zA-Z0-9-]+’ english | sort |uniq -c |sort -r |head -5

sed s/[1]/\n/g巧用换行

sed ‘s/[2]/\n/g’ english | awk NF | sort | uniq -c |sort -n -r|head -5
[[:alpha:]]=[a-zA-Z]
[:alnum:]:匹配字母和数字字符。
[:lower:]:匹配小写字母字符。
[:upper:]:匹配大写字母字符。
[:space:]:匹配空白字符,包括空格、制表符、换行符等

cut命令用于从文本文件中剪切特定的字段
1,2,3
cut -d ‘,’ -f 1-3 data.txt ===> 1,2,3 delimiter定界符
column -t filename.txt 列式输出,表格形式输出
awk -v FS=“,” ‘{print $1,$2}’ data.txt |column -t
Name Age
John 25
Alice 30
Bob 22


  1. :alpha:

  2. :alpha:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47242801/article/details/136775612

智能推荐

LeetCode | Path Sum-程序员宅基地

文章浏览阅读1.1k次。题目:Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.For example:Given the below binary tree

程序员面试十大建议_计算机类面试编程练习建议-程序员宅基地

文章浏览阅读189次。专业知识是最为重要的一点,拥有了坚实的专业基础,你才能迈向成功的彼岸。因此,面试之前,一定一定要复习好专业知识。对自己学过的知识,要做一个概括,放在脑海中。茶余饭后,复习一下,做到随便看到一道基础题目,心中都能有个答案。比如,一道最基本基础题,ArrayList和LinkedList有什么区别?如果你是做Java后台开发的,应该都会了吧。你在简历上的信息,就是面试官了解你的窗口。你写上去的项目,自己一定一定要了解清楚来龙去脉。如果把别人很厉害的项目copy上去,面试官一问你三不知,那就露馅啦~同时,简历上需_计算机类面试编程练习建议

如何看懂变异记录结果文件(VCF)_如何查看snp的vcf文件有多少变异-程序员宅基地

文章浏览阅读1k次,点赞18次,收藏20次。例如:以##FILTER开头的行,表示注释VCF文件当中第7列中缩写词的说明,比如q10为Quality below 10;##INFO开头的行注释VCF第8列中的缩写字母说明,比如AF代表Allele Frequency也就是等位基因频率;做过DNA重测序,群体遗传进化,BSA,GWAS等项目的人都会遇到VCF文件,这个文件记录了所有样品基因组中所有位置变异(主要包括SNP和InDel)信息。VCF文件的开头是整体注释信息,通常以##作为起始,其后一般接以FILTER,INFO,FORMAT等字样。_如何查看snp的vcf文件有多少变异

MIMO系统中MRC算法与Alamouti算法的误码率Matlab对比仿真_在没有使用alamouti方案下mimo系统的误码率分析-程序员宅基地

文章浏览阅读81次。MIMO系统中的接收端算法对于降低误码率至关重要。本文将介绍MRC(最大比合并)算法和Alamouti算法,并使用Matlab进行误码率对比仿真。通过运行以上代码,我们可以获得MRC算法和Alamouti算法的误码率结果。这样可以进行对比分析,以了解在不同的系统参数和信道条件下,两种算法的性能差异。希望本文对您理解MRC算法和Alamouti算法在MIMO系统中的应用,并使用Matlab进行误码率对比仿真有所帮助。MIMO系统中MRC算法与Alamouti算法的误码率Matlab对比仿真。_在没有使用alamouti方案下mimo系统的误码率分析

C/C++面向对象(OOP)编程-回调函数详解(回调函数、C/C++异步回调、函数指针)_oop回调思想-程序员宅基地

文章浏览阅读3.4k次,点赞30次,收藏52次。函数指针、函数指针类型,函数回调,异步回调、C语言异步回调、C++异步回调_oop回调思想

Hadoop MR 分区(partition)和全排序(WritableComparable)_writablecomparable排序(区内排序)-程序员宅基地

文章浏览阅读708次,点赞2次,收藏7次。一、概念1、分区:Hadoop默认分区是根据key的hashCode对ReduceTask个数取模得到的,用户无法控制哪个key存储到哪个分区。   想要控制哪个key存储到哪个分区,需要自定义类继承Partitioner<KEY, VALUE>,   泛型KEY, VALUE分别对应Mapper里的输出key,value,因为分区是在map()之后,环形缓冲区溢写时完成的。    提示:如果ReduceTask的数量大于自定义类中重写的getPartition()设置的分区数时,_writablecomparable排序(区内排序)

随便推点

程序员能靠技术渡过中年危机吗?-程序员宅基地

文章浏览阅读190次。这是所有人都会经历的过程,有些已经平安渡过,有些还在惶恐不安。听听过来人的建议,走出自己的道路。编者按做 InfoQ 公众号这几年来,接触到的一线开发可谓数不胜数。这些人..._硬件编程也存在中年危机吗

oracle_sqlserver和mysql获取表外键的方法_MySQL,SQLSERVER,ORACLE获取数据库表名及字段名...-程序员宅基地

文章浏览阅读125次。1、MySQL获取表名:用“show tables”命令。在程序中也可以采用该命令获取,在返回的RowSet中的“Tables_in_db”读出来。其中“db”是指你的数据库的名称,比如说Tables_in_productdb。获取某个表的字段:用“desc tablename”命令。取得方式和上面类似。此外,还可用MySQL数据库系统表取得,在information_schema库中有系统中的一..._sqlserver通过外键名称获取外键字段

git stash 命令的使用_git stash show-程序员宅基地

文章浏览阅读497次。1、git stash save "save message"将工作区的文件暂存到暂存区,执行存储时,添加备注,方便查找,只有git stash 也可以,但查找时不方便识别。没有在git 版本控制中的文件,是不能被git stash 存起来的,需要先执行下git add 加到git版本控制中。2、git stash list查看stash了哪些存储3、git stash show显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git st_git stash show

AutoSAR软件架构基础(一)_autosar架构-程序员宅基地

文章浏览阅读5.1k次,点赞6次,收藏75次。随着汽车ECU控制器的逐步发展,汽车电子领域需求也日益复杂,在这一环境之下,整车厂和 零部件制造商均不得不考虑软件重复性,可裁剪性,质量保证等等问题,AutoSAR便是基于这些种种要求,由几大零部件提供商和主机厂联合提出的要求。统一解决方案针对问题。挑战:E/E系统复杂度快速增加目标:重复使用、不断测试功能代码爆炸式增长提高软件质量,降低开发成本硬件平台种类增多重复使用功能层软件开发流程和文件格式未统一重复使用基础层软件。_autosar架构

PL/SQL Developer 远程连接Oracle数据库_plsql ojdbc-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏4次。PL/SQL Developer远程连接Oracle数据库1、 配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安装了oracle的机上拷贝一个(tnsnames.ora文件)放在指定目录下,因为我已安装oracle,所以直接配置该文件。# tnsnames.ora Network Configuration File: D:\Oracle11..._plsql ojdbc

python—模块应用_python 模块应用-程序员宅基地

文章浏览阅读124次。模块应用中,选择选择python3.x版本生成二维码import qrcode img = qrcode.make(‘http://www.baidu.com‘) img.save(‘hello.png’)统计微信好友列表男女比例import itchat import random import timeitchat.auto_login(hotReload=Tr..._python 模块应用