Linux

常用命令

su

切换用户身份

# su指令的全称为"superuser"
# su是最简单的身份切换命令,一般都是su - username,然后输入password。root用su至其他用户无须密码;但非root用户切换时需要密码。切换到root可以使用su -和su - root。

su [选项] username -c 'command'
# 选项
-l # login;su -l username 相当于 su - username
-c # 变更账号为user的使用者,并执行指令(command)后再变回原来使用者

# 切换用户
su username # 非登录式切换,即不会读取目标用户的配置文件
su - username # 登录式切换,会读取目标用户的配置文件;完全切换
# su - username,完整的登录,加载该用户的环境变量,跳转到该用户的主目录;su username,临时登录,只是获取到该用户权限,当前目录、环境变量等还是当前用户的,做简单操作的时候用

# 退回原用户
exit	 
# 查看当前登录用户名
whoami

chown

修改文件或目录的所属用户和组

chown [选项] [所有者][:[组]] 文件或目录
# 选项
-R # 递归处理,将目录下的所有文件和子目录的所有权都修改为指定的用户和组。
-f # 不显示错误信息。
-v # 显示详细的处理信息。 

# 将文件的所有权修改为指定用户
chown username file.txt
# 将文件的所有权修改为指定用户和组
chown username:group file.txt
# 将目录下的所有文件和子目录的所有权都修改为指定用户和组
chown -R username:group directory

# 注意事项
# chown 命令只能由文件或目录的所有者或超级用户使用,其他用户无法修改文件或目录的所有权。
# chown 命令默认只修改文件或目录的所有者,如果要修改组,需要使用 : 分隔符指定组名。
# chown 命令可以使用 -R 参数递归处理目录下的所有文件和子目录,需要谨慎使用,避免修改不必要的文件或目录。

tail

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

tail [必要参数] [选择参数] [文件]
# 命令参数
-q # 不显示处理信息
-v # 显示详细的处理信息
-c<数目> # 显示的字节数
-n<行数> # 显示行数
--pid=PID # 与-f合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silent # 从不输出给出文件名的首部
-s, --sleep-interval=S # 与-f合用,表示在每次反复的间隔休眠S秒

#  监视filename文件的尾部内容(默认10行,相当于添加参数 -n 10)
tail -f filename  
# 显示filename最后20行
tail -n 20 filename   
# 显示filename前面10行以后的(展示不全)
tail -n +10 filename   
# 显示filename的最后 10 个字符
tail -c 10 filename   
# 输出文件最后n行的内容,同时监视文件的改变
tail -nf filename   
tail -1000f filename | grep '关键字'
# 可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)
tail -n 4700 filename | more -1000 

less

用于查看任意大小的文本文件,支持滚动翻页、搜索、标记等功能。

# less命令的核心功能是分页显示文本文件。
# less命令使用标准输入和标准输出来实现分页显示功能。

less [options] file
# [options]
-e # 当文件显示结束后,自动离开
-g # 只标志最后搜索的关键词
-i # 忽略搜索时的大小写
-m # 显示类似more命令的百分比
-N # 显示行号。
-o # <文件名> 将less 输出的内容在指定文件中保存起来
-Q # 不使用警告音
-s # 显示连续空行为一行

# 命令操作
# 上下箭头 :向上、向下滚动一行
# 空格 :滚动一页
# 回车键 :滚动一行
# [pagedown] :向下翻动一页
# [pageup] :向上翻动一页
# b :向上翻一页
# d :向后翻半页
# g :跳到文件开头
# G :跳到文件结尾
# q :退出 less
# h :显示帮助信息。
# /字符串 :向下搜索"字符串"的功能
# ?字符串 :向上搜索"字符串"的功能
# n :重复前一个搜索(与 / 或 ? 有关)
# N :反向重复前一个搜索(与 / 或 ? 有关)

# 查看文件内容
less  file.txt
# 查看文件内容并显示行号
less -N file.txt 
# 搜索文本 
# 在less命令中,可以使用/或?命令来搜索文本
# 其中,/表示正向搜索,?表示反向搜索。按n键可以跳转到下一个匹配项,按N键可以跳转到上一个匹配项。
less file.txt
/ keyword
# 标记文本
# 当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
less file.txt
ma # 使用 a 标记文本的当前位置
'a # 导航到标记 a 处
# 查看命令历史使用记录并通过less分页显示
history | less
# 浏览多个文件
less log2013.log log2014.log
# 输入 :n 后,切换到log2014.log
# 输入 :p 后,切换到log2013.log

# 在 less 查看日志文件时
# 可以按大写 F,就会有类似 tail -f 的效果,读取写入文件的最新内容, 按 ctrl+C 停止。
# 可以按 v 进入编辑模型, shift+ZZ 保存退出到 less 查看模式。
# 可以按 :e 查看下一个文件, 用 :n 和 :p 来回切换。

zip/unzip

压缩/解压指定文件

# 查看是否安装压缩/解压zip软件包
yum list installed | grep zip
# 安装zip/unzip软件
sudo apt-get install zip unzip # 方式一
yum -y install zip unzip # 方式二
# 安装 卸载 更新
yum -y install [关键词] # 安装
yum -y remove [关键词] # 卸载
yum -y update [关键词] # 更新

zip [选项] 压缩包名 源文件或源目录列表
# 选项
-r # 递归地将一个目录及其所有子目录和文件压缩到ZIP文件中
-q # 在压缩文件时启用静默模式,即不显示压缩过程的详细信息
-d # 从现有的ZIP文件中删除指定的文件或目录
-u # 用于更新现有的ZIP文件,将新的文件或修改后的文件添加到ZIP存档中
-f # 用于刷新(更新)现有ZIP文件中的指定文件。
-m # 用于移动(归档)文件到一个ZIP压缩文件中,并在移动后将源文件删除。
-e # 用于对ZIP压缩文件进行加密
-z # 为压缩文件添加注释

# 使用静默模式将file目录及其所有子目录和文件压缩到file.zip文件中
zip -q -r file.zip file/ 

unzip [选项] 压缩包名 源文件或源目录列表
# 选项:
-f # 更新现有的文件。
-l # 显示压缩文件内所包含的文件。
-u # 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v # 执行是时显示详细的信息。
-z # 仅显示压缩文件的备注文字。
-n # 解压缩时不要覆盖原有的文件。
-o # 不必先询问用户,unzip执行后覆盖原有文件。
-P<密码> # 使用zip的密码选项。
-q # 执行时不显示任何信息。
-d<目录> # 指定文件解压缩后所要存储的目录。
-x<文件> # 指定不要处理.zip压缩文件中的哪些文件。
-Z unzip # -Z等于执行zipinfo指令

# 将 file.zip 解压到当前目录下并自动覆盖原有文件
unzip -o file.zip 

dos2unix/unix2dos

dos2unix:将Windows格式文件转换为Unix/Linux格式(换行符)

unix2dos:将Linux&Unix格式文件转换为Windows格式文件

# yum install -y unix2dos
# yum install -y dos2unix

dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]
# 参数 (不同版本Linux的dos2nnix命令参数有可能不同)
-h # 显示命令dos2unix联机帮助信息
-k # 保持文件时间戳不变
-q # 静默模式,不输出转换结果信息等
-V # 显示命令版本信息
-c # 转换模式
-o # 在源文件转换,默认参数
-n # 保留原本的旧档,将转换后的内容输出到新档案.默认都会直接在原来的文件上修改

# 将filename从Windows格式文本转换为Unix&Linux格式文件
dos2unix filename 
# 一次转换多个文件
dos2unix filename1 filename2 filename3 
# 默认会在源文件上进行转换,若需保留源文件,则可以使用参数-n
dos2unix -n dosfile linuxfile 

unix2dos [options] [-c convmode] [-o file ...] [-n infile outfile ...]

# 查找当前目录下bin文件夹下所有.sh格式的文件并转换为Linux格式
find ./bin -name "*.sh" | xargs dos2unix

scp

scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。

scp [参数] [原路径] [目标路径]
# Options:
-1 # 强制scp命令使用协议ssh1
-2 # 强制scp命令使用协议ssh2
-4 # 强制scp命令只使用IPv4寻址
-6 # 强制scp命令只使用IPv6寻址
-B # 使用批处理模式(传输过程中不询问传输口令或短语)
-C # 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p # 保留原文件的修改时间,访问时间和访问权限,Preserves
-q # 不显示传输进度条。
-r # 递归复制整个目录,Recursively。
-v # 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c # cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F # ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i # identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l # limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o # ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P # port 注意是大写的P, port是指定数据传输用到的端口号
-S # program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

# 使用实例
# 1. 从本地服务器复制到远程服务器
# 11. 复制文件
# 命令执行后需要输入密码
scp localfile remote_username@remote_ip:remote_folder  
scp localfile remote_username@remote_ip:remote_file  
# 命令执行后需要输入用户名和密码
scp localfile remote_ip:remote_folder  
scp localfile remote_ip:remote_file  
# 12. 复制目录
# 命令格式: 加-r参数
scp -r localfolder remote_username@remote_ip:remote_folder  
scp -r localfolder remote_ip:remote_folder  
# 2. 从远程服务器复制到本地服务器
# 从远程复制到本地的scp命令与上面的命令相似,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
# 21. 从远程复制文件到本地目录
scp remote_username@remote_ip:remote_file localfolder
# 22. 从远程复制文件夹到本地
scp -r remote_username@remote_ip:remote_folder localfolder
# 3. 带端口号
# 当 ssh 不为默认的22端口时,使用 scp 会遇到 ssh: connect to host my_server port 22: Connection refused
# 在需要指定端口时要使用-P(大写的P),而且要紧跟在scp之后
scp -P 12349 upload_file username@server

curl

curl 是一个工具,用于传输来自服务器或者到服务器的数据。

# 发送GET请求
curl URL
curl URL?a=1&b=nihao

# 发送POST请求
curl -X POST -d 'a=1&b=nihao' URL

# 发送json格式请求
curl -H "Content-Type: application/json" -X POST -d '{"abc":123,"bcd":"nihao"}' URL
curl -H "Content-Type: application/json" -X POST -d @test.json URL

# 其中,-H代表header头,-X是指定什么类型请求(POST/GET/HEAD/DELETE/PUT/PATCH),-d代表传输什么数据。这几个是最常用的。

# 查看所有curl命令: man curl或者curl -h
# 请求头:H,A,e
# 响应头:I,i,D
# cookie:b,c,j
# 传输:F(POST),G(GET),T(PUT),X
# 输出:o,O,w
# 断点续传:r
# 调试:v,--trace,--trace-ascii,--trace-time

others

# 用标准的格式显示进程
ps -ef | grep 'java'

# yum -y install net-tools
# 查看指定端口占用情况
netstat -tlnp | grep [端口号|程序]
# or
netstat -anp | grep [端口号|程序]

# 查看磁盘空间
df -lh 
# 打印当前目录和子目录中所有文件和目录的用户友好磁盘使用情况
du -h * 
# 显示当前目录下所有文件和文件夹的总大小
# 在不指定目录的情况下,默认会显示当前目录下的所有子目录的总大小
du -sh 
# 查看/data目录下的所有文件和文件夹大小,并从大到小排序
du -sh /data | sort -nr
# 查看/data目录下的所有文件和文件夹大小,找出所有GB大小的文件,并从大到小排序
du -sh /data | grep G | sort -nr
# 去掉 -s 参数,可以直接查看包括所有文件夹下的所有文件
du -h /data | grep G | sort -nr

# 查看服务器负载
top 
# 交互
q: 退出top命令
t: 显示或隐藏进程和CPU状态信息
m: 显示或隐藏内存状态信息
l: 显示或隐藏uptime信息
P: 按%CPU使用率排行
M: 按照%MEM(内存)排序
i: 只显示正在运行的进程
1,检测每个逻辑CPU的状况,CPU总利用率为逻辑CPU个数*100%

# 显示指定进程下面的线程信息,这个命令搭配JAVA的自带命令jstack可以非常快速并且有效的定位代码问题
top -Hp PID 

# 将空字符串写入txt文件
echo "" > filename.txt

# truncate命令可以将文件截断为指定大小或清空文件内容
truncate -s 0 bill-service.log # 清空名为logfile.log的日志文件

# 查找:grep -A -B -C n name file.txt
grep -A # 显示匹配指定内容及之后的n行
grep -B # 显示匹配指定内容及之前的n行
grep -C # 显示匹配指定内容及其前后各n行

# 剪切复制新建
mv oldfile.txt newfile.txt # 修改文件名
cp oldfile.txt newfile.txt # 复制
touch filename.txt # 创建文件
mkdir folder # 创建文件夹
mkdir -p /home/user/new_folder # 指定路径并创建多级文件夹

# 上传下载
# yum -y install lrzsz # 在Linux上安装lrzsz
# sz用法:发送出去
# 下载一个文件:
sz filename
# 下载多个文件:
sz filename1 filename2
# 下载dir目录下的所有文件,不包含dir下的文件夹:
sz dir/*
# rz用法:接收回来
rz

# 周期性的执行一个命令,并全屏显示
# 格式 watch [option] command
# -n: --interval,表示每n秒执行date,n最小为0.1s
watch -n 0.01 date  # 虽然指定每0.01s执行date命令,但是不会报错,依旧按最小的0.1s执行
watch -n 1 date # 每1秒刷新date命令  

后台进程管理

&

加在一个命令的最后,可以把这个命令放到后台执行 ,如firefox &,

jobs
firefox &
jobs

ctrl + z

可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行

jobs
firefox &
# ctrl + z
jobs

jobs

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;

fg

将后台中的命令调至前台继续运行

如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

bg

将一个在后台暂停的命令,变成继续执行 (在后台执行)

将一个在后台暂停的命令,变成继续执行 (在后台执行)
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
将任务转移到后台运行:
先ctrl + z;再bg,这样进程就被移到后台运行,终端还能继续接受命令。
> jobs -l 
[1]- 18741 运行中
[2]+ 20895 停止
> bg %2
[2]+ firefox &
> jobs -l 
[1]- 18741 运行中
[2]+ 20895 运行中
概念:当前任务
如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]” 的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务

进程终止

  1. 通过jobs命令查看job号(假设为num),然后执行kill %num

  2. 通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

  3. 前台进程的终止:ctrl + c

  4. ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别

    ctrl+c强行中断当前程序的执行。
    
    ctrl+z将任务中断,但是此任务并没有结束,他仍然在进程中,只是放到后台并维持挂起的状态。如需其在后台继续运行,需用“bg 进程号”使其继续运行;再用"fg 进程号"可将后台进程前台化。
    
    ctrl+\表示退出。
    
    ctrl+d表示结束当前输入(即用户不再给当前程序发出指令),那么Linux通常将结束当前程序。
    

环境

# rpm命令是RPM软件包的管理工具
rpm –i # 安装模式
rpm -q # 查询模式
rpm –V或 -verify # 验证模式
rpm –e # 删除模式
rpm -ivh # 安装一个包
rpm -Uvh # 升级一个包
rpm -e # 移走一个包
--force 即使覆盖属于其它包的文件也强迫安装
--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。

#获取系统位数
getconf LONG_BIT
#查询操作系统 release 信息
cat /etc/redhat-release 
#查询系统信息
cat /etc/issue
# 查看系统版本
uname -a
# 内核名称  主机名  内核版本号  内核版本  硬件名  处理器类型  硬件平台类型  操作系统名称
hostnamectl
cat /etc/os-release
cat /etc/redhat-release

yum 配置
# 已配置了的机器
cat /etc/yum.repos.d/ks10-adv.repo
# 未配置的机器
vi /etc/yum.repos.d/ks10-adv.repo # 粘贴已配置机器的内容
mkdir /mnt
# 已配置了的机器
scp -r /mnt/*  remote_username@remote_ip:/mnt

JDK

Linux安装JDK

MySql

# 查看现有版本 mariadb 和 mysql 都要查
rpm -qa | grep mariadb
rpm -qa | grep mysql
# 把上面查到的全部卸载
rpm -e --nodeps 【文件名】
# 再检查一边是否卸载干净
rpm -qa | grep mariadb
rpm -qa | grep mysql
# 查找mysql的目录全部删除,my.cnf要单独删
find / -name mysql

# 下载mysql压缩包上传服务器
# 解压
tar -zxvf mysql.tar.gz
# 若提示 gzip: stdin: not in gzip format 则换成 tar -xvf 命令
# 若使用root用户安装,则 创建linux用来运行mysql的用户,并授权
# groupadd mysql
# useradd -r -g mysql mysql
# chown mysql:mysql -R 【安装mysql的目录】
# 编写mysql运行的配置文件
# 先备份
mv ./my.cnf ./my.cnf.bak
vi my.cnf
# 创建出配置里不存在的文件夹
# 初始化mysql
./bin/mysqld --defaults-file=【my.cnf目录】 --basedir=【mysql安装目录】 --datadir=【mysql.data目录】 --user=用户名 --initialize

# 1.[ERROR] --initialize specified but the data directory has files in it. Aborting.
## 删除data目录后再次初始化

# 2.【error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory】
## yum install -y libaio

# 3.【./mysqld: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory】
## yum -y install libatomic
## 或 找到 mysql包中extra目录下libatomic.so.1文件复制到/usr/lib64目录下

# 4.libstdc++.so.6: version `GLIBCXX_3.4.21` not found
## strings /usr/lib64/libstdc++.so.6 | grep GLIBC
## 输出里没有 `GLIBCXX_3.4.21`
## 将 mysql包中extra目录下 libstdc++.so.6.0.26(也可能是其它小版本) 复制到/usr/lib64目录下
## 或者直接下载 
## wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
## cp libstdc.so_.6.0.26 /usr/lib64/libstdc.so_.6.0.26
## cd /usr/lib64
## ls | grep libstdc++
## mv libstdc++.so.6 libstdc++.so.6.bak
## ln -s libstdc++.so.6.0.26 libstdc++.so.6
## strings /usr/lib64/libstdc++.so.6 | grep GLIBC
## 再次查看输出

# 查看初始化密码,并记下来
cat ./log/mysql.err
# 启动 MySql
ln -s /opt/mysql/my.cnf /etc/my.cnf # 必须绝对路径
ll /etc/my.cnf
# 可查看mysql.server默认加载/etc/my.cnf配置参数,可直接修改文件改为自己的my.cnf目录或者创建软连接
./support-files/mysql.server start
# 提示 Starting MySQL.. ERROR! The server quit without updating PID file
## 1.给对应的目录赋予相应用户的权限 例如:chown -R mysql:mysql /var/data
## 2.vi /etc/my.cnf 在 [mysqld] 下加上 user=用户名

# 配置软链接
ln -s /opt/mysql/support-files/mysql.server /etc/init.d/mysql 
ln -s /opt/mysql/bin/mysql /usr/bin/mysql
# service mysql restart
service mysql status

# mysql -h remotehost -u username -p
mysql -u root -p
# 输入记录的初始密码
# 修改密码 (不同版本步骤可能会有不同)
use mysql ;
#  提示:You must reset your password using ALTER USER statement before executing this statement. 则直接执行ALTER
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
#刷新 
FLUSH PRIVILEGES;  
exit; # 重新登录测试密码是否修改成功
# 刷新规则允许外部访问
# use mysql
#使root能再任何host访问
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;

# 建表
CREATE DATABASE IF NOT EXISTS table_name default charset utf8 COLLATE utf8_general_ci;
# 执行sql文件
source xxx.sql;

my.cnf

[client]
port = 3306
socket = /tmp/mysql/mysql.sock

[mysqld]
user = root
port = 3306
basedir = /opt/mysql
datadir = /opt/mysql/data
tmpdir  = /opt/mysql/tmp
socket = /tmp/mysql/mysql.sock
pid-file = /opt/mysql/log/mysql.pid
log_error = /opt/mysql/log/error.log
slow_query_log_file = /opt/mysql/log/slow.log
lower_case_table_names=1   
log_timestamps = SYSTEM

#FOR AA
server-id=197
log-bin=mysql-bin
auto-increment-increment=2
auto-increment-offset=1
log-slave-updates=1

Nginx

# 下载
# http://nginx.org/en/download.html 
# Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
# Stable version:最新稳定版,生产环境上建议使用的版本
# Legacy versions:遗留的老版本的稳定版

# 安装要求的环境
# gcc环境
yum install gcc-c++
# PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
yum install -y pcre pcre-devel
# zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库
yum install -y zlib zlib-devel
# OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum -y install pcre  pcre-devel zlib  zlib-devel openssl openssl-devel
# 若无法使用yum安装组件
# 组件下载
# wget http://nginx.org/download/nginx-1.10.2.tar.gz
# wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
# wget http://zlib.net/zlib-1.2.11.tar.gz
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
# 组件安装
# openssl安装
tar zxvf openssl-fips-2.0.10.tar.gz
cd openssl-fips-2.0.10
./config && make && make install
# pcre安装
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure && make && make install
# zlib安装
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11

# nginx安装
tar -xvf nginx-1.14.0.tar.gz -C /usr/local
tar zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
# ./configure --prefix=自定义Nginx 的安装目录
./configure && make && make install
# 1.nginx: [emerg] unknown directive "gzip_static" in /usr/local/nginx/conf/ngin
## ./configure --with-http_gzip_static_module && make && make install

# 启动
# 找到nginx安装的位置
whereis nginx 
# 进入nginx目录并启动
cd /usr/local/nginx
# 报错 error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
# 1.用 whereis libpcre.so.1 命令找到libpcre.so.1在哪里
# 2.用 ln -s /usr/local/lib/libpcre.so.1 /usr/lib64/libpcre.so.1 命令做个软连接就可以了
# 3.用 sbin/nginx 启动Nginx
# 4.用 ps -aux | grep nginx 查看状态

# nginx的基本操作 
# nginx/sbin 目录下
# 测试是否安装成功
./nginx -t
# 启动
./nginx # /usr/local/nginx/sbin/nginx
# 停止/重启
./nginx -s stop 【quit / reload】
# 命令帮助
./nginx -h
# 验证配置文件
./nginx -t
# 配置文件
vim /usr/local/nginx/conf/nginx.conf

# nginx.conf
server {
	listen 80;
	server_name test.com;
	# charset kio8-r;
	# access_log logs/access.log main;
	location / {
		root html;
		index index.html index.htm;
	}
}
#  每一个server就是一个虚拟主机,我们有一个当作web服务器来使用

#  listen 80;代表监听80端口
#  server_name xxx.com; 代表外网访问的域名
#  location / {}; 代表一个过滤器,/ 匹配所有请求,我们还可以根据自己的情况定义不同的过滤,比如对静态文件js、css、image 制定专属过滤
#  root html; 代表站点根目录,即将页面放在 nginx/html 目录下
#  index index.html; 代表默认主页
# 这样配置完毕我们输入域名就可以访问到该站点了。
# 负载均衡功能往往在接收到某个请求后分配到后端的多台服务器上,那我们就需要upstream{}块来配合使用

upstream b.test.com {
    ip_hash;
    server 10.11.12.116:80;
    # server 10.11.13.21:80;
}
server {
	listen 80;
	server_name a.test.com;
	location / {
		proxy_pass http://b.test.com;
		# proxy_connect_timeout 600;
		# proxy_read_timeout 600;
	}
}
# upstream xxx{};upstream模块是命名一个后端服务器组,组名必须为后端服务器站点域名,内部可以写多台服务器# ip和port,还可以设置跳转规则及权重等等
# ip_hash;代表使用ip地址方式分配跳转后端服务器,同一ip请求每次都会访问同一台后端服务器
# server;代表后端服务器地址

# server{};server模块依然是接收外部请求的部分
# server_name;代表外网访问域名
# location / {};同样代表过滤器,用于制定不同请求的不同操作
# proxy_pass;代表后端服务器组名,此组名必须为后端服务器站点域名

# server_name和upstream{}的组名可以不一致,server_name是外网访问接收请求的域名,upstream{}的组名是跳转后端服务器时站点访问的域名

nginx.config

#user  nobody;
worker_processes  1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。
#错误日志存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid; # nginx进程pid存放路径
 
events {
    worker_connections  1024; # 工作进程的最大连接数量
}
 
 
http {
    include       mime.types; #指定mime类型,由mime.type来定义
    default_type  application/octet-stream;
    # 日志格式设置
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
     
    #access_log  logs/access.log  main; #用log_format指令设置日志格式后,需要用access_log来指定日志文件存放路径
    				
    sendfile        on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。
    #tcp_nopush     on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
 
    #keepalive_timeout  0;  #keepalive超时时间
    keepalive_timeout  65;
     
    #gzip  on; #开启gzip压缩服务
     
    #虚拟主机
    server {
        listen       80;  #配置监听端口号
        server_name  localhost; #配置访问域名,域名可以有多个,用空格隔开
     
        #charset koi8-r; #字符集设置
     
        #access_log  logs/host.access.log  main;
     
        location / {
            root   html;
            index  index.html index.htm;
        }
        #错误跳转页
        #error_page  404              /404.html; 
     
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
     
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
     
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
        #    root           html; #根目录
        #    fastcgi_pass   127.0.0.1:9000; #请求转向定义的服务器列表
        #    fastcgi_index  index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
     
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
     
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;  #监听端口
    #    server_name  localhost; #域名
     
    #    ssl_certificate      cert.pem; #证书位置
    #    ssl_certificate_key  cert.key; #私钥位置
     
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m; 
     
    #    ssl_ciphers  HIGH:!aNULL:!MD5; #密码加密方式
    #    ssl_prefer_server_ciphers  on; # ssl_prefer_server_ciphers  on; #
 
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

工具

rsync&lsync

# 安装准备:一台被同步服务器A(10.8.118.92),一台同步服务器B(10.8.118.93),
# 安装包:rsync(V3.1.2),lsync(V.2.2.2)(需要lua(V5.1.4)支持)

# 操作目的:实现A.B两台服务器之间的文件同步。
# 安装lua支持
sudo yum install -y lua
# 或
sudo rpm -Uvh lua-5.1.4-15.el7.x86_64.rpm --nodeps  --force

# 将rsync和lsyncd的rpm包拷贝到服务器的/home/xxx(当前登录用户)/rpm/rsync目录下
# 然后进入拷贝目录执行下面指令
sudo rpm -Uvh rsync-3.1.2-10.el7.x86_64.rpm --nodeps  --force
sudo rpm -Uvh lsyncd-2.2.2-1.el7.x86_64.rpm --nodeps  --force

# 开启rsync进程守护
sudo yum install -y xinetd
# 或
sudo rpm -Uvh xinetd-2.3.15-14.el7.x86_64.rpm --nodeps  --force

sudo vi /etc/xinetd.d/rsync
service rsync
{
        disable = no
        flags           = IPv4
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

sudo systemctl start xinetd
sudo systemctl enable xinetd
sudo chkconfig rsync on
netstat -ntlp
# 重启服务器之后检查873端口是否有xinetd(主要是为了验证开机自启是否生效)

# 修改lsync.conf配置文件
sudo vi /etc/lsyncd.conf
# 去掉所有的字符然后粘贴下面的代码
settings {
   --pidfile = "/var/run/lsyncd.pid",
   --nodaemon   = false,
   inotifyMode = "CloseWrite",
   maxProcesses = 8,
   statusFile = "/tmp/lsyncd.status",
   statusInterval = 1,
   logfile = "/var/log/lsyncd/lsyncd.log"
}
sync {
    default.rsync,
    source    = "/data/uploads",//源文件
    target    = "10.8.118.92::prod",//传输文件的目的地(IP92的设置93,93的设置92)
    delete="running",
    exclude = {"tmp/**"},
    delay = 5,
    init = false,
    rsync     = {
        binary = "/usr/bin/rsync",
        perms = true,
        acls = true,
        xattrs = true,
        links = true,
        quiet = true,
        archive = true,
        compress = true,
        verbose   = true,
        --password_file = "/etc/rsync.pwd",
        _extra    = {"--bwlimit=200"}
        }
}
# 多个目录则设置多个 sync{}, prod 为 92 机器 rsyncd.conf 里对应的model

# 修改rsyncd.conf文件
sudo vi /etc/rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[prod]
path = /data/uploads //同步目标的路径
hosts allow = 10.8.118.92 //同步目标的ip(92配置93,93配置92)
uid = root
gid = root
read only = false
# 多个目录则配置多了[model](例如[prod]),model上方为公共配置

# 确保防火墙873端口开启
sudo firewall-cmd --zone=public --add-port=873/tcp --permanent #防火墙开启873端口
sudo firewall-cmd --reload #重启防火墙
sudo firewall-cmd --zone=public  --query-port=873/tcp #查询防火墙873端口状态

# 运行rsync
sudo rsync --daemon
# 测试rsync是否可以正常启用,并进行文件的初始化
sudo rsync -avz   /data/uploads/* 10.8.118.92::prod
sudo rsync -avz   /data/uploads/* 10.8.118.93::prod
# 启动lsync
sudo systemctl start lsyncd.service
sudo systemctl status lsyncd.service
sudo systemctl enable lsyncd.service

# 重启命令
sudo killall rsync
sudo rsync --daemon
sudo systemctl restart lsyncd.service

目录

bin

/bin - 重要的二进制 (binary) 应用程序

包含二进制文件,系统的所有用户使用的命令都在这个目录下。

boot

启动 (boot) 配置文件

包含引导加载程序相关的文件

dev

设备 (device) 文件

包含设备文件,包括终端设备,USB或连接到系统的任何设备。

etc

配置文件、启动脚本等 (etc)

包含所有程序所需的配置文件,也包含了用于启动/停止单个程序的启动和关闭shell脚本。

home

本地用户主 (home) 目录

所有用户用home目录来存储他们的个人档案

lib

系统库 (libraries) 文件

包含支持位于/bin和/sbin下的二进制文件的库文件。

lost+found

在根 (/) 目录下提供一个遗失+查找(lost+found) 系统

在根 (/) 目录下提供一个遗失+查找(lost+found) 系统

media

挂载可移动介质 (media),诸如 CD、数码相机等

用于挂载可移动设备的临时目录

mnt

挂载 (mounted) 文件系统

临时安装目录,系统管理员可以挂载文件系统

opt

提供一个供可选的 (optional) 应用程序安装目录

包含从各个厂商的附加应用程序,附加的应用程序应该安装在/opt或者/opt的子目录下。

proc

特殊的动态目录,用以维护系统信息和状态,包括当前运行中进程 (processes) 信息

包含系统进程的相关信息,是一个虚拟的文件系统,包含有关正在运行的进程的信息,系统资源以文本信息形式存在。

root

root (root) 用户主文件夹,读作“slash-root”

sbin

重要的系统二进制 (system binaries) 文件

也是包含的二进制可执行文件。在这个目录下的linux命令通常都是由系统管理员使用的,对系统进行维护。

sys

系统 (system) 文件

tmp

临时(temporary)文件

包含系统和用户创建的临时文件。当系统重启时,这个目录下的文件将都被删除

usr

包含绝大部分所有用户(users)都能访问的应用程序和文件

包含二进制文件,库文件。文档和二级程序的源代码

var

经常变化的(variable)文件,诸如日志或数据库等

代表变量文件。在这个目录下可以找到内容可能增长的文件

posted @ 2024-01-09 10:49  Zzzy君不见  阅读(19)  评论(1编辑  收藏  举报