# 目录结构

Linux文件系统是采用层级式的树状目录结构,根目录是"/"

/bin         # 二进制文件、命令
/sbin        # 超级命令,只有root用户可以使用
/boot        # 存放引导文件、系统内核
/dev         # 类似于Windows的设备管理器,把所有的硬件用文件的形式存储
/etc         # 所有的系统管理所需的配置文件和子目录
/home        # 普通用户的根目录
/root        # root用户的根目录
/lib         # 系统开机所需的最基本的动态连接共享库,几乎所有的应用程序都需要用到这些共享库
/mnt         # 外部存储的默认挂载点、临时挂载点
/opt         # 第三方软件安装的位置
/tmp         # 临时存放文件的位置
/usr         # 存放用户软件,用户的很多应用程序和文件都放在这个目录下
/var         # 习惯将经常被修改的目录存放在这,如各种日志
/lost+found  # 隐藏目录,一般情况为空,当系统非法关机后会存放一些文件
/proc        # 虚拟目录,存放内存信息,进程,服务信息,不能动这个文件
/srv         # service的缩写,存放一些服务启动之后需要提取的数据,不能动这个文件
/sys         # 安装了内核中新出现的一个文件系统sysfs,不能动这个文件

# 当前目录

[root@sylone ~] # 此处的波浪线代表的当前目录,root用户为/root,普通用户为/home

# 常用命令

# 列出文件列表:ls、ll

ls -a # 列出所有文件,包括隐藏文件(以.开头的文件)
ls -l # 列出文件及文件夹的详细信息,权限、用户、时间等,可以简写为ll

ll -a / # 列出根目录下的所有文件

# 目录相关:cd、mkdir、rmdir、pwd

cd .. # 退出到上级目录
cd -  # 返回上次所在的目录
cd ~  # 退回到根目录

cd /var  # 切换到var目录

mkdir -p aaa/bbb     # 创建多级目录(即使没有aaa目录也可以)

pwd                  # 显示当前所在的目录
passwd               # 修改密码

# 浏览文件:cat、more、less、tail

cat install.log       # 查看文件的所有内容
more installl.log     # 一次只显示一屏,按回车看下一行,按空格显示下一屏,按q退出
less install.log      # 功能同more,按键盘的上下键还可以滚动查看
tail -10 install.log  # 只显示最后的10行,例如日志文件
tail -f  install.log  # 可以动态的查看文件的更新,ctrl+c即可退出

# 拷贝、剪切:cp、mv

cp anaconda-ks.cfg aaa        # 拷贝文件anaconda-ks.cfg到aaa
cp anaconda-ks.cfg aaa/a.txt  # 拷贝文件anaconda-ks.cfg到aaa,并保存为a.txt
# -r选项指定了递归复制 # /*/通配符表示复制每个目录下的所有文件和子目录
cp -r /path/dir1/*/ /path/dir2/*/  /path/to/destination/


mv a.txt /root/bb             # 剪切文件a.txt到/root/bb目录下
mv a.txt /root/bb/c.txt       # 剪切文件a.txt到/root/bb目录下,并保存为c.txt

# 删除文件:rm(不加参数只能删除文件,不能删除文件夹)

rm -r bb    # 删除文件夹
rm -rf bb   # 删除文件,不询问
rm -rf /*   # 删除所有文件

# 压缩、解压缩:tar(默认只打包不压缩)

最好切换到当前目录再操作

tar -cvf xxx.tar aaa            # 打包文件夹aaa为xxx.tar
tar -zcvf xxx.tar.gz aaa        # 打包并压缩文件夹aaa为xxx.tar.gz
tar -xvf xxx.tar                # 解压打包文件到当前目录
tar -zxvf xxx.tar.gz            # 解压压缩的文件xxx.tar.gz到当前目录
tar -zxvf xxx.tar.gz -C ./cc    # 解压压缩的文件xxx.tar.gz到当前目录下的cc文件夹

# 查找文件:find

find / -name ins*   # 查找文件名是ins开头的文件

# 查找文件内容:grep

# 查找address字符
grep address /root/apache-tomcat-7.0.57/logs/catalina.2022-10-30.log
# 高亮显示
grep address /root/apache-tomcat-7.0.57/logs/catalina.2022-10-30.log --color

# 管道:|

可以将一个命令的输出作为另一个命令的输入

ls --help | more      # 分页显示帮助信息
ps -ef | grep java    # 查看正在进行的进程,并通过管道的方式查找java相关的进程

# 重定向输出

任何命令,只要在控制台上有输出都可以这样操作

cat bb.txt > aa.txt   # 会把bb的内容放到aa中,再次执行会被覆盖
cat bb.txt >> aa.txt  # 会把bb的内容放到aa中,再次执行会被追加
ifconfig >> aa.txt    # 会把ifconfig的配置信息追加到aa

# 进程管理

ps -ef                # 查看正在进行的进程
ps -ef | grep java    # 查看正在进行的进程,并通过管道的方式查找java相关的进程
kill -9  进程ID       # 强制关闭进程     
    
# 查看内存使用最多的进程
ps aux --sort=-%mem | head  

# 查看端口被哪个进程占用

# 查看被占用的端口的进程,
netstat -antulp | grep :端口号

# 根据PID查询进程
ps -ef | grep 进程PID

# 时间时区

# 检查时间和时区,改成上海的时间时区
timedatectl
timedatectl list-timezones
timedatectl set-timezone Asia/Shanghai
# 查看时间
date           

# 主机系统信息

lscpu                # 查看CPU信息
df -h                # 查看磁盘使用
free –m              # 查看内存使用
hostnamectl status   # 查看主机名
cat /etc/os-release  # 查看系统版本信息
getconf LONG_BIT     # 查看系统是32位还是64位
uname -a             # 查看系统信息
uname -m             # 查看操作系统架构  arm64=aarch64  x86_64=x64=amd64       

# 权限命令

# 文件权限

10个字符:drwxr-xr-x,第一个是文件类型,后面每3个为一组

  • 文件的类型
    • -表示文件
    • d表示文件夹
    • l表示链接(类似快捷方式)
  • 当前用户具有该文件的权限
    • r:read
    • w:write
    • x:excute
  • 当前组内其他用户具有该文件的权限
  • 其他组内的用户具有该文件权限

# 修改文件权限

chmod u=rwx,g=rx,o=rx a.txt
r:4、w:2、x:1

chmod -R 777 redis.conf
chmod +x /usr/local/bin/docker-compose # docker-compose文件添加执行权限

# 用户相关

# 可以使用su命令(Switch User)来切换到其他用户身份
su test
# 切换到管理员账号
su -

groupadd -g 5866 test  # 添加组
useradd -u 5866 -g test sylone # 组里添加用户
passwd QwXypJ@n46  # 设置密码

cat /etc/group  # 查看所有组信息
cat /etc/group|grep groupname  # 查找组 groupname
groupdel groupname  # 删除组 groupname

cat /etc/passwd  # 查看所有用户信息
cat /etc/passwd|grep username # 查找用户 username
killall -u username  # 杀死用户的所有进程
userdel -r username  # 删除用户 username

# VIM编辑

  • 三种模式:命令(默认)、插入、底行模式
切换到命令模式: 按Esc键
切换到插入模式: 按i(在当前位置前插入)、o(在当前位置后插入)、a(在当前行后插入一行)键
切换到底行模式: 按:(冒号) wq(保存退出) q!(不保存退出)
  • 编辑不存在的文件时会自动创建该文件
  • 在编辑页面查找内容
:/8080  # 查找8080字符

# 设置时区

# 检查主机名
hostnamectl status
# 检查时间和时区,改成上海的时间时区
timedatectl
timedatectl list-timezones
timedatectl set-timezone Asia/Shanghai
# 查看时间
date

# 网络操作

# 主机配置

hostname         # 查看主机名
hostname sylone  # 修改主机名为sylone(重启后无效)
# 如果想要永久生效,可以修改/etc/sysconfig/network文件

# IP地址配置

ifconfig                     # 查看网络配置
ifconfig eth0 192.168.12.22  # 修改IP地址(重启后无效)

# 如果想要永久生效,修改/etc/sysconfig/network-scripts/ifcfg-eth0文件
DEVICE=eth0                 # 网卡设备名称
HWADDR=00:0C:29:FE:1A:09    # 网卡MAC地址
TYPE=Ethernet               # 网卡类型为以太网

ONBOOT=yes                 # 启动时是否激活 yes | no
BOOTPROTO=static           # 协议类型
IPADDR=192.168.1.90        # 网络IP地址
NETMASK=255.255.255.0      # 网络子网地址
GATEWAY=192.168.1.1        # 网关地址
BROADCAST=192.168.1.255    # 广播地址

# 解决ping: www.baidu.com: Name or service not known

需要在2个地方添加DNS

# 修改/etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=8.8.8.8
DNS2=114.114.114.114

# 修改/etc/resolv.conf
nameserver 8.8.8.8
nameserver 114.114.114.114

# 如何测试端口通不通

# -c表示发送的ping数据包数量
# -p表示将ICMP数据包重定向到指定的端口
ping -c 1 -p <port> <hostname>

ping -c 1 -p 80 192.168.1.1

curl -v 192.168.1.1:3306

# 本地域名映射

/etc/hosts文件用于在通过主机名进行访问时做IP地址解析用
相当于windows的c:\windows\system32\drivers\etc中的hosts文件

# hosts文件添加IP
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts

# 网络服务管理

service network status    # 查看网络服务状态
service network stop      # 停止网络服务
service network start     # 启动网络服务
service network restart   # 重启网络服务

netstat -nltp             # 查看系统中网络进程的端口监听情况
netstat -anp | grep 8080

# 防火墙设置

iptables 主要是用于 centos6

service iptables status    # 查看网防火墙状态
service iptables stop      # 关闭防火墙
service iptables start     # 启动防火墙
chkconfig iptables off     # 禁止防火墙自启

# 防火墙的配置文件/etc/sysconfig/iptables来控制本机出入访问的行为
# 打开11211端口
iptables -A INPUT -p tcp --dport 11211 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 11211 -j ACCEPT

iptables -L -n --line-number # 查看开放端口

firewalld 主要是用于 centos7

systemctl status firewalld  # 查看网防火墙状态
systemctl enable firewalld  # 设置开机启动

# 开放6379端口
firewall-cmd --add-port=6379/tcp --permanent
# 移除6379端口
firewall-cmd --remove-port=6379/tcp --permanent
# 查询6379端口
firewall-cmd --query-port=6379/tcp

firewall-cmd --reload       # 重启防火墙
firewall-cmd --list-all     # 查询全部已开放的端口

# 解决docker容器映射的端口无法用firewalld防火墙管理的问题

  • 设置docker服务参数,禁止使用iptables,保存后重启docker服务
//编辑docker服务的配置文件/etc/docker/daemon.json,如果没有这个文件,需要创建一个空文件
{
  "iptables":false
}

//重启docker服务
systemctl restart docker
  • 设置防火墙参数,允许地址转发(可以将docker容器的IP转发到系统IP)
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
  • 限制端口仅允许特定IP地址访问,例如设置9200端口只能被192.168.0.184访问
# 查看防火墙是否开启了9200端口
firewall-cmd --list-all

# 从防火墙中删除9200端口,如果没有,可忽略这一步
firewall-cmd --remove-port=9200/tcp --permanent
firewall-cmd --reload

# 添加rich-rules防火墙规则,仅允许192.168.0.184访问9200端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.0.184" port protocol="tcp" port="9200" accept" --permanent
# 限制IP为192.168.0.184的地址禁止访问9200端口即禁止访问机器
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.0.184" port protocol="tcp" port="9200" reject" --permanent 
# 删除已设置规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address=" 192.168.0.0" port protocol="tcp" port="9001" accept"

# 上面的命令要在一行中输入,不能分行
# 让修改及时生效
firewall-cmd --reload
  • 这样设置,即使重启操作系统,也仅有192.168.0.184能访问9200端口

# 软件安装

# 二进制发布包

软件已经针对具体平台编译打包发布,只要解压,修改配置即可,缺点是不能兼容所有平台

# RPM包

软件已经按照redhat的包管理工具规范RPM进行打包发布,只需要获取到相应的软件RPM包,然后用RPM命令进行安装,此方式可以兼容大多数Linux平台,但是不能安装所依赖的包

# Yum在线安装

软件已经以RPM规范打包,但发布在了网络上,可用yum在线安装,并且会自动解决安装过程中库依赖的问题,需要有网络的支撑

# 源代码编译安装

软件以源代码的形式发布,获取到源代码工程后用相应开发工具进行编译打包部署

# 定时任务

  • 第一步:编写数据库备份脚本database_mysql_shell.sh,目录: /root/database_mysql_shell.sh
# !/bin/bash
DATE=`date +%Y%m%d%H%M`                # every minute
DATABASE=springboot-admin              # database name
DB_USERNAME=root                       # database username
DB_PASSWORD="mysql"                    # database password
BACKUP_PATH= /var/databackup           # backup path
# backup command
/usr/bin/mysqldump -u$DB_USERNAME -p$DB_PASSWORD -h 127.0.0.1 -R --opt $DATABASE | 
gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz
# just backup the latest 5 days
find ${BACKUP_PATH} -mtime +5 -name "${DATABASE}_*.sql.gz" -exec rm -f {} \;
  • 第二步:给脚本授权
chmod +x database_mysql_shell.sh
  • 第三步:编写定时备份任务 输入如下命令:
crontab –e   # crontab -r   删除任务  crontab -l    显示任务

在页面中编写如下内容:

00 3 * * * ./etc/profile;/root/database_mysql_shell.sh

可实现每天凌晨三点自动执行第一步编写的脚本,备份mysql数据库到/backup/mysqldata, 且只保留最近5天的数据库备份。

# centos linux 下 crontab -e 命令插入及保存

查看crontab服务状态:service crond status
启动crontab服务:service crond start
开机自启动:systemctl enable crond
输入 crontab -e
按下 a 键进入到编辑模式
输入0 */1 * * * /home/work/start-service.sh  */5 * * * * curl http:# www.aa.cn 定时访问网页
同时按下 ctrl+c 退出编辑模式
按下 shift+: 输入 wq 退出 crontab
使用命令 crontab -u root -l 可以查看当前定时任务
测试任务是否执行:tail -f /var/log/cron
输入该文件的绝对路径/root/database_mysql_shell.sh就可执行该文件
注意sh文件格式:
查看文件的format格式:
用vi命令打开文件vi database_mysql_shell.sh
在vi命令模式中使用 :set ff 命令  可以看到改文件的格式为dos
使用命令:set ff=unix   执行完后再通过set ff命令查看文件格式

# CRUL命令

curl(CommandLine Uniform Resource Locator [官网](https:# curl.se/)),即在命令行中利用URL进行数据或者文件传输。它是一款强大的http命令行工具,支持文件的上传和下载,是综合传输工具,习惯称curl为下载工具

# 获取所有curl命令用法及描述
curl -h

# 获取该网址的文本信息
curl www.baidu.com

# 获取该网址的文本信息以及协议头部信息
curl -i www.baidu.com

# 仅返回协议头部信息
curl -l www.baidu.com

# 下载文件,O大写
curl -O url

# 下载文件并重命名,o小写
curl -o rename url

# 使用代理获取网页文本信息
curl -x 127.0.0.1:8080 www.google.com

# 使用post模拟json格式请求接口
# X指定请求方式,header 指定请求头部信息,data 指定json请求体数据内容
curl -X POST --header "Content-Type:application/json" --data "{}" url
# 示例
curl --header "Content-Type: application/json" \
-X POST \
--data '{"text":"germany"}' \
https:# labs.tib.eu/falcon/api?mode=short

# 分区挂载

刚刚在腾讯云买了一台服务器,刚买的服务器的数据盘都是需要自己来分区的,下面就记录一下操作。

  • 先查看有没有未挂载的磁盘:fdisk –l (200GB暂时没有挂)

查询出增加的硬盘

  • df –hT 查看挂载的磁盘情况

查看挂载的磁盘情况

  • 根目录创建data文件夹(将/dev/vdb 200Gb挂着在data下,这个随意)
  • 然后执行 parted /dev/vdb 进行硬盘分区

硬盘分区

  • 再执行 mklabel gpt 选择gpt方式进行分区

选择gpt方式进行分区

  • 再执行 mkpart primary 0% 100% 确定分区大小,这里将20GB硬盘全部挂接在一个盘中

确定分区大小

  • 执行 printgpt

执行print和gpt

  • 再执行 quit

再执行quit

  • 执行 mkfs -t ext3 /dev/vdb 进行格式硬盘

格式硬盘

  • 结束后执行 done

结束后执行

  • 开始挂载

开始挂载

  • 验证是否挂载上了200GB(之前说了,是将200GB全部挂在data下)

验证是否挂载上了

  • 执行 blkid 命令,查看ECS实例上磁盘的分区情况以及文件系统。
    如下图所示,ECS实例数据盘分区为/dev/xvdb1,文件系统类型为ext4

查看分区情况

  • 重启自动挂载需要向 /etc/fstab 文件写入
vim /etc/fstab

# nofail参数:在启动实例时,若设备不存在会直接忽略它,从而不发生报错
/dev/vdb /data  ext4 defaults,nofail 0 0
  • 重启服务器 reboot,通过命令df -TH查看磁盘信息

# IPV6设置

# linux系统

# 以centos7为例,IP配置:
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=211.149.xxx.xxx
NETMASK=255.255.255.0
TYPE=Ethernet
NM_CONTROLLED=no
ONBOOT=yes
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6ADDR=240E:D9:C200:xx:xx::A0/64
IPV6_DEFAULTGW=240e:d9:c200:xx::1

# 以上是单IPv6,如果要绑定多ipv6,添加以下行,里面的ip替换为自己服务器的ipv6地址
IPV6ADDR_SECONDARIES="2604:4300:a:8f:100:10::1/64 \ 2604:4300:a:8f:100:20::1/64"

# DNS:
/etc/resolv.conf
nameserver 223.5.5.5
nameserver 114.114.114.114
nameserver 240e:56:4000:8000::69
nameserver 240C::6666

# 重启网卡
service  network   restart

# windows系统

  • 启用IPV6,仅支持win7 及以上版本系统(win7、win2008、win2012、win2016支持)win2003不支持

启用IPV6

启用IPV6

  • IP地址设置

启用IPV6

  • 配置成功之后,如何测试IPV6是否通
# 使用命令,注意若要测试ping IPV6是否正常,服务端和客户端都必须支持并正确配置了IPV6地址
ping -6 IPV6地址

# 使用第三方网站提供的ping,https://noc.ah.edu.cn/lg/ 
# 检测网站  https://www.boce.com/ipv6/