目录
2、修改docker0网桥、docker_gwbridge网桥地址
3、 selinux开启状态,会导致docker容器产生服务异常,导致宕机,关闭方式如下:
13、在大多数文本编辑器和集成开发环境(IDE)中,注释的快捷键通常是:
1、配置Linux网络IP
一般存放在/etc/sysconfig/network-scripts/路径下
文件一般为ifcfg-ens33或192
修改BOOTPROTO=static 固定IP是none 、static
修改ONBOOT=yes
IPADDR=IP地址
NETMASK=子网掩码
GATEWAY=网关
DNS=域名解析服务器的IP地址
修改主机名:
1.sudo hostnamectl set-hostname newname 2.systemctl restart systemd-hostnamed
cp 操作,备份目录使用 cp -arfp 参数,scp传文件夹使用 scp -r ,kubectl cp 文件夹使用 cp a 参数
!+ 行数,可以直接执行Linux的历史第n行命令
Ctrl+R可以快捷搜索历史命令,Ctrl+L快捷清屏
Alt+Shift可以选中多行进行编辑,可以在首行点击一下,滑动到末尾按住Alt+Shift点击即可
查看centos系统版本:
cat /etc/redhat-release
Linux快捷替换文件中的路径: "/"一般作为分割线,路径中的正斜杠需替换为反斜杠''"或使用":"分割
sed -i 's:/home/user/old_folder:/home/user/new_folder:g' example.txt
快捷替换文字:用/分割开替换前和后
sed -i 's/v8.0.17.16/v8.0.17.17/g' middleware-master-cluster.yml
添加标签: 需注意节点标签不可重复
docker node update --label-add nodetype=Chunfeng-river nodeid
查看swarm节点标签
docker node inspect nodeid --pretty|head
临时关闭某个service
docker service scale proxy_proxy=1
2、修改docker0网桥、docker_gwbridge网桥地址
vi /etc/docker/daemon.json 文件
{ "bip": "172.201.0.1/16", "default-address-pools": [ {"base": "172.201.0.0/16", "size": 24} ] }
第一行是docker0,第二行是docker_gwbridge 注意应在创建docker swarm集群前修改,如果是之后,应先
docker network rm docker_gwbridge
再重启docker
重建docker网络,网段根据实际情况更改 如使用默认网段则去掉--subnet
docker network create macrowing --driver overlay --subnet 192.168.200.0/24
修改 Docker 的存储路径,需要进行以下步骤:
-
停止 Docker 服务:打开终端(或命令提示符)并执行以下命令以停止 Docker 服务:
sudo systemctl stop docker
-
备份现有的 Docker 数据文件:将当前存储路径下的所有 Docker 数据文件复制到新的存储路径中,以便将现有数据迁移到新路径。
-
编辑 Docker 配置文件:使用文本编辑器打开 Docker 的配置文件。在大多数 Linux 系统中,该文件位于
/etc/docker/daemon.json
或/etc/docker/daemon.conf
。 -
添加存储路径配置:在配置文件中添加一个
data-root
键,并设置其值为新的存储路径。例如:{ "data-root": "/new/storage/path" }
-
保存并关闭配置文件。
-
创建新的存储路径:使用以下命令创建新的存储路径:
sudo mkdir /new/storage/path
-
设置新的存储路径的权限:确保新的存储路径具有适当的权限,以便 Docker 可以访问和写入该目录。使用以下命令更改新路径的权限(根据需要进行调整):
sudo chown -R $USER:$USER /new/storage/path
-
启动 Docker 服务:执行以下命令启动 Docker 服务:
sudo systemctl start docker
3、 selinux开启状态,会导致docker容器产生服务异常,导致宕机,关闭方式如下:
1.临时调整为关闭状态:
setenforce 0
2.调整后修改配置文件永久生效
vi /etc/selinux/config #修改为SELINUX=disabled
ls |wc -l #可查看目录下文件个数
docker swarm init --advertise-addr=本机IP地址
4、中间件proxy代理容器进入数据库命令
mysql -urepl -pXJdooy -h middle-proxy -P 3306
5、调整相关内核参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf echo "vm.min_free_kbytes=1024000" >> /etc/sysctl.conf echo "net.core.somaxconn=2048" >> /etc/sysctl.conf echo "vm.swappiness=0" >> /etc/sysctl.conf echo " net.ipv4.ip_local_port_range=65300 1024 " >> /etc/sysctl.conf echo " fs.inotify.max_user_watches=1048576 " >> /etc/sysctl.conf echo " net.ipv4.ip_forward=1 " >> /etc/sysctl.conf echo " net.ipv4.vs.expire_nodest_conn=1 " >> /etc/sysctl.conf echo "fs.file-max=655360" >> /etc/sysctl.conf echo "* - nofile 655350" >> /etc/security/limits.conf echo "* - nproc 65500" >> /etc/security/limits.conf ulimit -HSn 655300
sysctl -p 使上述命令生效
6、单机调整nginx相关参数
进入容器,nginx -T查看相关配置
一般配置文件存放在在/etc/nginx/nginx.conf 或/etc/nginx/conf.d/default.conf
修改后先执行nginx -T查看一下,再执行 nginx -s reload 进行热加载
7、redis
redis-cil auth PassWord
查看redis集群状态命令 : info replication
清空redis缓存
redis-cli auth PassWord
执行清除命令
flushall
查询key是否存在
keys "key1"
清空指定key值的缓存
del key1 key2 ...
8、MySQL数据库
1.数据库集群状态查看:select * from performance_schema.replication_group_members;
2.备份表:要备份MySQL表的数据,您可以使用以下语句创建表的备份:
CREATE TABLE backup_table AS SELECT * FROM original_table;
上述语句将创建一个名为backup_table
的新表,并将original_table
的内容复制到该表中。您可以根据需要自定义备份表的名称和原始表的名字。
请注意,这只是一个基本的备份方法,仅复制表的数据。如果您需要更全面的备份,包括表结构、索引和其他元数据,建议使用MySQL的官方工具mysqldump。mysqldump可以生成一个完整的数据库备份文件,包括表的结构和数据。
以下是使用mysqldump进行表备份的示例:
mysqldump -u username -p database_name table_name > backup.sql
上述命令将要求您输入数据库的用户名(username)和数据库名称(database_name),并将表(table_name)的备份保存在名为backup.sql
的文件中。
请确保在执行任何备份操作之前,先备份重要的数据,并仔细检查备份文件的完整性和准确性。
3.还原备份
要还原MySQL表的备份,您可以使用以下步骤:
-
打开终端或命令行界面,并登录到MySQL服务器。
-
创建一个新的数据库(如果尚未创建)。
-
进入新创建的数据库。
-
执行以下命令将备份文件中的数据导入到新数据库中:
source /path/to/backup_file.sql;
上述命令将还原备份文件中的所有表和数据到新数据库中。
请注意,在执行还原操作之前,请确保已经备份了原始数据,以防止意外数据丢失。此外,如果您使用的是物理备份,请确保在还原之前关闭MySQL服务器,并按照官方文档或备份软件提供的指南进行还原操作。
4.使用CREATE TABLE backup_table AS SELECT * FROM original_table;
这种方式备份的表可以通过以下步骤进行还原:
-
打开终端或命令行界面,并登录到MySQL服务器。
-
进入备份表所在的数据库。
-
删除原始表(如果需要)。
-
将备份表重命名为原始表的名称。
-
刷新数据库,以确保表结构生效。
以下是具体的步骤:
-
进入MySQL服务器,使用以下命令选择要还原的数据库:
USE database_name;
-
删除原始表(如果需要):
DROP TABLE IF EXISTS original_table;
-
将备份表重命名为原始表的名称:
RENAME TABLE backup_table TO original_table;
-
刷新数据库,以确保表结构生效:
FLUSH TABLES;
现在,原始表的备份已经成功还原到原始的名称和结构。请确保在执行任何还原操作之前,已经备份了原始数据,以防止意外数据丢失。
要查看MySQL表的结构,您可以使用以下SQL语句:
DESCRIBE table_name;
或者使用以下语句:
SHOW COLUMNS FROM table_name;
将 "table_name" 替换为您要查看结构的表的名称。执行这些语句后,将返回包含有关表结构的结果集,包括列名、数据类型、键信息和其他属性
9、查看有哪些定时任务
crontab -l
10、查看es集群状态
curl -XGET http://<es-host>:<es-port>/_cluster/health?v
查看集群下有无任务堆积
curl -s es0:9200/_cluster/pending_tasks
查看es节点信息
curl -s es0:9200/_cat/nodes?v
查询es中存储的文件内容索引
curl -s es:9200/file_1/_doc/文件id?pretty
查看es分片数量
curl -s es:9200/_cat/shards
11、k8s下拷贝某个路径
kubectl cp a podname:/path/ /root/path/ -n namespace
12、rabbitmq
方法一: 通过命令行查询
连接运行rabbitmq的服务器,执行如下命令:
docker exec $(docker ps | grep rabbitmq | awk '{print $1}') rabbitmqctl list_queues --no-table-headers | awk 'NR!=1&&NR!=2{print}' | sort -nr -k 2
rabbitmqctl list_queues --no-table-headers | awk 'NR!=1&&NR!=2{print}' | sort -nr -k 2
方法二:每秒输出消息数量
#!/bin/bash # while true do docker exec $(docker ps | grep rabbitmq | awk '{print $1}') rabbitmqctl list_queues --no-table-headers | awk 'NR!=1&&NR!=2{print}' | sort -nr -k 2 >> 1.log date >> 1.log sleep 1 done
ctrl+c 结束
cat 1.log 查日志
13、在大多数文本编辑器和集成开发环境(IDE)中,注释的快捷键通常是:
-
单行注释:将光标所在行或选定的代码行注释掉。
-
Windows和Linux系统:Ctrl + / 或 Ctrl + Shift + /
-
macOS:Command + / 或 Command + Shift + /
-
-
多行注释:将选定的多行代码块注释掉。
-
Windows和Linux系统:Ctrl + Shift + /(在一些编辑器中也可以使用Ctrl + K + C)
-
macOS:Command + Shift + /(在一些编辑器中也可以使用Command + /)
-
14、配置nfs共享目录
-
NFS server端安装 需共享出去的服务器
yum -y install nfs-utils rpcbind
-
配置nfs
vi /etc/exports
/opt/data *(rw,no_root_squash,no_all_squash,anonuid=0,anongid=0,sync)
注: 以上例子是通过NFS共享本地的/opt/data ,部署时请根据实际情况修改目录
-
启动nfs服务
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs
-
客户端挂载nfs
检查本地是否支持nfs文件系统
rpm -qa |grep nfs-utils
以上命令有输出说明己支持nfs文件系统
如果不支持需要安装nfs-utils
yum -y install nfs-utils
5.挂载NFS
mkdir /nfs mount -t nfs -o noac,nfsvers=4,_netdev NFS_SERVER_IP:/opt/data /nfs
6.设置开机自动挂载
vi /etc/fstab NFS_SERVER_IP:/opt/data /nfs nfs defaults,nfsvers=4,_netdev,noac 0 0
注: /nfs为本地路径,如果不存在,需要使用mkdir创建
NFS_SERVER_IP 为NFS server的ip
/opt/data 为nfs服务端共享的路径
请根据实际情况修改 /nfs,NFS_SERVER_IP,/opt/data 三个参数
15.ntp时间同步
1 NTP服务安装
如果当前环境可以联网:
yum install ntp -y
如果不能联网,需要提前下载好ntp服务安装包:
# 下载相关包,放在同一个目录中,假设为目录名为ntpcurl -o autogen-libopts-5.18-5.el7.x86_64.rpm curl -o ntp-4.2.6p5-28.el7.centos.x86_64.rpm curl -o ntpdate-4.2.6p5-28.el7.centos.x86_64.rpm # 进入ntp目录,执行安装命令yum localinstall *.rpm
2 NTP服务配置
如果服务器不能联网,需要客户提供内网的NTP服务器;
如果可以联网,一般配置阿里云的时间服务器,ntp1.aliyun.com,ntp2.aliyun.com
详细步骤如下:
# 对原配置文件进行备份 mv /etc/ntp.conf{,bak} # 编辑配置文件,增加时间服务器 vi /etc/ntp.conf driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log # Access Control Support restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict ::1 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery # local clock server 127.127.1.0 fudge 127.127.1.0 stratum 10 #阿里云的ntp服务器,这里可以配置多个; server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst
启动ntp服务并设置开机启动:
systemctl start ntpd && systemctl enable ntpd
验证时间同步:
ntpq -p
注意:LOCAL前面的 * 号,表示ntp服务已正常与本机进行同步
3 时区设置 环境变量配置: TZ=Asia/Shanghai
16.centos根目录扩容
1.查看本机磁盘环境
[root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 35G 5.5G 30G 16% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 11M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 275M 740M 28% /boot tmpfs 783M 52K 783M 1% /run/user/0 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 500G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─centos-root 253:0 0 35G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP]
可以看到根目录总容量为35G, 设备sda 的总容量为500G。
2.添加磁盘分区
[root@localhost ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): Using default response p 分区号 (3,4,默认 3): 起始 扇区 (83886080-1048575999,默认为 83886080): 将使用默认值 83886080 Last 扇区, +扇区 or +size{K,M,G} (83886080-1048575999,默认为 1048575999):+85G 分区 3 已设置为 Linux 类型,大小设为 85 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. [root@localhost ~]# partprobe /dev/sda #刷新分区 pvcreate /dev/sda3 #创建分区3
3.然后查看分区是否创建:
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 500G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 39G 0 part │ ├─centos-root 253:0 0 35G 0 lvm / │ └─centos-swap 253:1 0 4G 0 lvm [SWAP] └─sda3 8:3 0 85G 0 part sr0 11:0 1 1024M 0 rom
可以看到sda2 分区已创建。
4.开始扩容
4.1创建物理卷:
[root@localhost ~]# lvm lvm> pvcreate /dev/sda3 Physical volume "/dev/sda3" successfully created.
4.2查看物理卷和卷组:
lvm> pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name centos PV Size <39.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 9983 Free PE 0 Allocated PE 9983 PV UUID twmUZh-Vnqq-W5Pd-v3ms-6OkH-sSTs-nv8aA8 "/dev/sda3" is a new physical volume of "85.00 GiB" --- NEW Physical volume --- PV Name /dev/sda3 VG Name PV Size 85.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID vTD91f-b28E-GgL0-XsqI-ipQ5-rscT-GcQbT6 lvm> vgdisplay --- Volume group --- VG Name centos System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <39.00 GiB PE Size 4.00 MiB Total PE 9983 Alloc PE / Size 9983 / <39.00 GiB Free PE / Size 0 / 0 VG UUID 238Yz8-MEQa-NT6a-3aHC-J3TZ-mGux-e9vqPf
4.3将物理卷加入到卷组:
lvm> vgextend centos /dev/sda3 Volume group "centos" successfully extended lvm> vgdisplay --- Volume group --- VG Name centos System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 123.99 GiB PE Size 4.00 MiB Total PE 31742 Alloc PE / Size 9983 / <39.00 GiB Free PE / Size 21759 / <85.00 GiB VG UUID 238Yz8-MEQa-NT6a-3aHC-J3TZ-mGux-e9vqPf
可以看到卷组的Free size 增加了
4.4将卷组剩余空间(刚添加的85G)添加到逻辑卷/dev/centos/root :
lvm> lvextend -l +100%FREE /dev/centos/root Size of logical volume centos/root changed from <35.00 GiB (8959 extents) to 119.99 GiB (30718 extents). Logical volume centos/root successfully resized.
5.同步到文件系统
5.1之前只是对逻辑卷扩容,还要同步到文件系统,实现对根目录的扩容。
[root@localhost ~]# xfs_growfs /dev/centos/root meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2293504 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=9174016, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=4479, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 9174016 to 31455232
5.2然后再查看挂载情况:
[root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 120G 5.5G 115G 5% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 11M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 275M 740M 28% /boot tmpfs 783M 52K 783M 1% /run/user/0
可以发现有120G的空间挂载在根目录上。
17.磁盘扩容
1.目的
针对Linux服务器的LVM磁盘扩容
2.注意事项
1)扩容前请谨慎确认,小心操作,避免操作失误;
2)扩容后的磁盘无法从vg卷组里面移除,只能扩容,无法缩减;
3.操作步骤
1、查看需要扩容的分区的lv名 如果不是lvm类型不能进行扩容
使用lvdisplay
2、初始化新加的磁盘
假设新加的硬盘设备名为 /dev/sdb
3、新建分区有两种方式
方式一:
fdisk //这种方式最大只支持单分区2T ,单分区超过2T的可以使用parted
方式二:
使用parted进行分区,操作步骤如下:
parted /dev/sdb mklabel gpt #修改磁盘sdb的分区类型为gpt,mbr分区支持最大空间大小为2T
parted /dev/sdb mkpart primary 0 100% #分区使用sdb的100%的空间
partprobe #使分区生效
4、 扩容
常用命令:
pvs: 查看所有pv信息
vgs: 查看vg卷组信息
lvs: 查看lvm逻辑卷信息
pvcreate /dev/sdb1
vgextend centos /dev/sdb1 //将centos替换为真实的卷组名称
lvextend -L +szie /dev/centos/root // 将/dev/centos/root 换成要扩容的lv逻辑卷, size 为扩容的磁盘容量大小
或 扩充剩余 vg 的所有的存储的大小:lvextend -l +100%FREE /dev/centos/root
执行完成之后使用df -hT查看分区并没有变化,需要按实际环境执行下面的命令:
## XFS文件系统执行 xfs_growfs /dev/centos/root
4.常见问题
问题1:
xfs_growfs:/dev/vda1 is not a mounted XFS filesystem
解决办法:
需要执行xfs_growfs --help ,确认使用方式,按照文档说明使用;例如: xfs_growfs / 这里的/就是挂载点
原因:
新旧版本的xfs_growfs
命令使用问题。
新版的xfs_growfs
命令后面的参数需要为文件系统挂载点,而非文件系统本身;
## EXT4文件系统执行 resize2fs
18. Linux快捷替换文件中的路径
在Linux中,你可以使用sed
命令来替换文件中的路径。sed
是一个流编辑器,它可以对文本进行各种操作,包括替换。
下面是一个使用sed
命令替换文件中路径的示例:
sed -i 's/旧路径/新路径/g' 文件名
解释一下这个命令:
-
sed
:流编辑器的命令。 -
-i
:表示直接修改文件内容,而不是输出到标准输出。 -
's/旧路径/新路径/g'
:这是sed
的替换命令,其中s
表示替换,g
表示全局替换(即一行中的所有匹配项都将被替换)。 -
文件名
:要替换路径的文件名。
请将"旧路径"替换为你要查找和替换的实际路径,"新路径"替换为你要替换成的新路径。
例如,如果你要将文件example.txt
中的路径/home/user/old_folder
替换为/home/user/new_folder
,你可以运行以下命令:
sed -i 's:/home/user/old_folder:/home/user/new_folder:g' example.txt
注意,在路径中使用正斜杠(/
)时,需要使用反斜杠(\
)进行转义,以避免与sed
的分隔符混淆。在上述示例中,我使用了冒号(:
)作为分隔符,因为正斜杠在sed
中具有特殊含义。
19.compose语法关键字介绍
以chunfeng-river服务为例,本文只介绍一些关键性的语法指令,compose文件如下:
更多语法指令,可以参考官方文档:Compose file version 3 reference | Docker Docs
version: '3.5' #compose文件的版本 services: #定义服务 chunfeng-river: #服务名称,容器内部使用次出定义的服务名进行通信 hostname: chunfeng-river #主机名 image: chunfeng-river:test1 #使用的镜像地址 volumes: #挂载的持久化卷 - /var/run/docker.sock:/var/run/docker.sock # - /home/chunfeng/river/data/:/app/wwwroot/external - /home/chunfeng/river/data:/edoc2Docs labels: "type": "1" environment: #容器配置的环境变量 - LOGGER_ISDEBUG=false - LOGGER_MINCALLTIMESPAN=1000 - PUBLISH_EXTERNAL_ADDRESS=http://localhost/ - PRODUCTION=chunfeng - NUMS=25 - ThreadCheck=true env_file: #环境变量文件 ./envfile.env networks: #使用的网络 - chunfeng stop_signal: SIGKILL #容器的停止信号,SIGKILL信号其动作是立即结束指定进程 healthcheck: #健康检查 test: /bin/bash /opt/edoc2_check.sh #健康检查执行的命令 interval: 15s #15s执行一次 timeout: 10s #执行超时为10s retries: 3 # 失败时尝试执行的次数 deploy: placement: constraints: - node.labels.nodetype == InDrive #运行的标签限制,只有节点标签满足,才在节点运行 mode: global #运行的模式,global模式会在每个满足节点标签的节点上运行一个服务 endpoint_mode: dnsrr #部署的服务有多个时候,采用dns轮询的方式提供服务 restart_policy: #重启策略,当容器失败时,进行重启 condition: on-failure resources: #容器的资源限制 limits: cpus: '8' #限制只允许使用8个cpu memory: 16G #限制只允许使用16G内存 logging: #日志驱动,使用json格式的日志,输出至控制台 driver: "json-file" #日志驱动,默认为json options: max-size: "2000k" #日志大约2m会进行切片 max-file: "10" #日志切片会保留十个 networks: #定义容器的网络 chunfeng: #网络名 external: true #使用外置扩展网络 name: river #外置网络名