Linux 基础命令

一、常见关机&重启命令

shutdown -h now    [立刻关机] 
shutdown -h  1     [1 分钟后,关机] 
shutdown -r  now   [立刻重启] 
shutdown -r 2      [2 分钟后,重启] 
reboot  [立刻重启]
halt    [立刻关机]

不管是重启系统还是关闭系统,通常先要要运行 sync 命令,把内存中的数据写到磁盘中

sync  [把内存的数据,写入磁盘] 

二 、用户和用户组

Linux 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。

1.用户管理

useradd 用户名  [当创建用户成功后,会自动的创建和用户同名的家目录]
useradd -d  家目录路径 用户名 [创建用户时指定家目录]

passwd 用户名  [如果没有带用户名,则是给当前登录的用户修改密码]

userdel 用户名  [删除用户保留家目录]
userdel –r 用户名  [删除用户和用户的家目录   危险操作,得注意]

su - 用户名  [切换用户,默认进入该用户的家目录]

id 用户名  [查询用户信息]

2.用户组

类似于角色,系统可以对有共性的多个用户进行统一的管理。

groupadd 组名   [新增组]
useradd –g 用户组 用户名  [增加一个用户 , 直接将他指定到组]
groupdel 组名   [删除组,前提是这个组没有用户,才能删除]
usermod –g 新的组名 用户名  [修改用户的组]

3. 用户和组的相关文件

(1)/etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录

image.png

(2)/etc/shadow 文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留
(3)/etc/group 文件
组(group)的配置文件,记录 Linux 包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表

三、运行级别

运行级别说明:
0 :关机
1 :单用户 [类似安全模式, 这个模式可以帮助找回 root 密码]
2:多用户状态没有网络服务
3:多用户状态有网络服务 [使用最多]
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是 3 和 5 ,要修改默认的运行级别可改文件

如果指定运行级别
/etc/inittab 的
id:5:initdefault:这一行中的数字
也可以通过 init 来切换不同的运行级别

init [012356] 
image.png

假设我们的 root 密码忘记了,请问如何找回密码
启动时->快速输入 enter->输入 e-> 进入到编辑界面-> 选择中间有 kernel 项->
输入 e(edit)-> 在该行的最后写入 1 [表示修改内核,临时生效]-> 输入 enter->
输入 b [boot]-> 进入到单用户模式 【这里就可以做补救工作】

四、帮助指令

main  [命令或配置文件]    (功能描述:获得帮助信息)
help [命令]    (功能描述:获得 shell 内置命令的帮助信息)

五、文件和目录相关的指令

pwd      (功能描述:显示当前工作目录的绝对路径)

ls [选项] [目录或是文件]   (显示目录的文件)
 常用选项
   -a :显示当前目录所有的文件和目录,包括隐藏的 (文件名以.开头就是隐藏)。
   -l :以列表的方式显示信息
   -h : 显示文件大小时,以 k , m, G 单位显示

cd [参数]    (功能描述:切换到指定目录)

mkdir [选项] 要创建的目录     (功能描述:创建目录 )
  常用选项
   -p :创建多级目录

rmdir [选项] 要删除的空目录
 常用选项
   -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

rm -rf 要删除的目录  (删除非空目录)
   r: 表示递归删除,就是将该目录下的文件和子目录全部删除
   f: 表示强制删除,就是不需询问

touch 文件名称  (创建空文件, 如果文件存在,则表示刷新该文件的修改时间)

cp [选项] source(源) dest(目的文件)  (拷贝文件到指定目录)
 常用选项
    -r :递归复制整个文件夹
    强制覆盖不提示的方法:\cp

mv 移动文件与目录或重命名
cat [选项] 要查看的文件
 常用选项
   -n :显示行号

more 要查看的文件   (它以全屏幕的方式按页显示文本文件的内容)
 常用操作
   空格键  代表向下翻一页
   Enter   代表向下翻一行
   q       代表立刻离开 more ,不再显示该文件内容
   CtrlF   向下滚动一屏
   CtrlB   返回上一屏
   等号    输出当前行的行号
   :f      输出文件名和当前行的行号

less 要查看的文件  (用来分屏查看文件内容)
常用操作
   空格键  代表向下翻一页
   PageDown 代表向下翻一页
   PageUp  代表向上翻一页
   CtrlF   向下滚动一屏
   CtrlB   返回上一屏  
   q      离开less

echo [选项] [输出内容]  
常用选项
   -n : 表示输出之后不换行
   -e : 表示对于[转义字符]按对应的方式进行处理。
image.png
查看系统的所有环境变量
env 
查看[PATH]环境变量
echo $PATH
head [选项] [选项] 文件 (功能描述:默认查看文件头 10 行内容)
head -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)

tail [参数] [文件]  (用于输出文件中尾部的内容,默认情况下,显示文件的后 10 行内容)
 常用操作
   -f 循环读取
  -q 不显示处理信息
  -v 显示详细的处理信息
  -c<数目> 显示的字节数
  -n<行数> 显示文件的尾部 n 行内容

输出重定向和 >> 追加

  ls -l >文件 (功能描述:列表的内容写入文件 a.txt 中(覆盖写))
  ls -al >>文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)
  cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)
  echo "内容" >> 文件  (功能描述:将"内容" 追加到文件 aa.txt 的末尾)
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

history [选项] [参数](功能描述:查看已经执行过历史命令)
   n    显示最近的n条记录(参数)    
  -a    将历史命令缓冲区中命令写入历史命令文件中     
  -c    将目前的shell中的所有 history 内容全部消除    实际为假删除
  -r    将历史命令文件中的命令读入当前历史命令缓冲区   
  -w    将当前历史命令缓冲区命令写入历史命令文件中    
  -d    删除历史记录中指定的行
  执行历史编号为 5 的指令 !5 

六、时间日期类

七、搜索查找类

find [搜索范围] [选项]
 -name <文件名>,   按照指定的文件名查找文件,可以使用通配符*?
 -user <用户名>,   查找属于指定用户名的所有文件
 -size<文件大小>,   按照指定的大小查找文件((+n 大于 -n 小于 n 等于)
locate [文件名]  (快速定位文件路径)
由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库
grep 过滤查找 , 管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep [选项] 查找内容 源文件
   -n 显示匹配行及行号
   -i 忽略大小写

八、压缩解压类

gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)

zip [选项] XXX.zip 需要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
  zip 常用选项
   -r:递归压缩,即压缩目录
  unzip 的常用选项
   -d<目录> :指定解压后文件的存放目录
tar [选项] XXX.tar.gz 打包的内容/目录  (功能描述:打包目录,压缩后的文件格式.tar.gz) 
 常用选项
   -c 生成.tar打包文件
   -v 显示详细信息
   -f 指定压缩后的文件名
   -z 打包同时压缩
   -x 解包.tar打包文件

九、组管理和权限管理

1. 组介绍

image.png
  1. 修改文件所有者 chown
    chown newowner file 改变文件的所有者
    chown newowner:newgroup file 改变用户的所有者和所有组
chown -R root:root 123.txt
  1. 修改文件所在组 chgrp
    chgrp newgroup file 改变文件的所有组

2. 文件权限

  1. 权限的基本介绍


    image.png
  2. 修改权限
    第一种方式:+ 、-、= 变更权限
    u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
    2.1 chmod u=rwx,g=rx,o=x 文件、目录 【表示:给所有者rwx, 给所在组的用户 rx, 给其他人 x】
    2.2 chmod o+w 文件、目录 【表示:给其它用户增加w 的权限】
    2.3 chmod a-x 文件、目录 【表示:给所有用户 去掉 x权限】
    第二种方式:通过数字变更权限
    r=4 w=2 x=1 rwx=4+2+1=7
    chmod u=rwx,g=rx,o=x 文件、目录
    相当于 chmod 751 文件、目录

十、定时任务调度

1. 概述

  1. 任务调度:是指系统在某个时间执行的特定的命令或程序。
  2. 任务调度分类:
    2.1 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
    2.2 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。

2 基本语法

  1. 语法
    crontab [选项]
  2. 选项
    -e:编辑 crontab 定时任务
    -l:查询 crontab 定时任务
    -r:删除 crontab 定时任务
  3. 快速入门
    设置任务调度文件:/etc/crontab 设置个人任务调度。执行 crontab –e 命令。 接着输入任务到调度文件
    每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt 命令
*/1 * * * * ls –l /etc/ > /tmp/to.txt    
  1. 参数细节说明


    image.png

    image.png

    image.png

十一、Linux 磁盘分区、挂载

1. 原理介绍

  1. Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一分。

  2. Linux 采用了一种叫“载入(mount)”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

2. 硬盘说明

  1. Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘
  2. 对于 IDE 硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了。“x”为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda3 表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
  3. 对于 SCSI 硬盘则标识为“sdx~”,SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE 硬盘的表示方法一样。sdb1 [表示第 2 块 scsi 硬盘的第 1 个分区]

3. 查看所有设备(光驱 /media,u 盘, 硬盘)挂载情况

  1. 命令 :lsblk 或者 lsblk -f


    image.png
  2. 挂载的经典案例 : 增加一块1G硬盘
    2.1 在vm设置中增加一块硬盘 1G, 重启一下服务器


    image.png

    2.2 给 sdb 硬盘分区


    image.png

    2.3 格式化 sdb1
mdfs -t ext4 /dev/sdb1   [把 /dev/sdb1 分区格式化]
image.png

2.4 挂载

mkdir /home/newdisk
mount /dev/sdb1 /home/newdisk [说明;挂载时,不要在 /home/newdisk 目录下]

2.5 上面的方式,只是临时生效,当你重启系统,挂载的关系没有, 配置 linux 的分区表,实现启动时,自动挂载

vim /etc/fstab
image.png

2.6 重启后,会自动挂载.
2.7 卸载
指令:umount 设备名 | 挂载路径

umount /dev/sdb1

4. 磁盘情况查询

  1. 查询系统整体磁盘使用情况
    1.1 基本语法:df -h
  2. 查询指定目录的磁盘占用情况
    2.1 基本语法:du -h /目录
    查询指定目录的磁盘占用情况,默认为当前目录
    -s:指定目录占用大小汇总
    -h:带计量单位
    -a:含文件
    --max-depth=1 子目录深度为1
    -c:列出明细的同时,增加汇总值
    2.2 查询 /usr 目录的磁盘占用情况,深度为 1
du -ach --max-depth= 1 /usr
  1. 磁盘情况-工作实用指令
# 统计/home 文件夹下文件的个数
ls –l /home/ | grep “^-” | wc -l

# 统计/home 文件夹下目录的个数
ls –l /home/ | grep “^d” | wc -l

# 统计/home 文件夹下文件的个数,包括子文件夹里的
ls –lR /home/ | grep “^-” | wc -l

# 统计/home 文件夹下目录的个数,包括子文件夹里的
ls –lR /home/ | grep “^d” | wc -l

# 以树状显示 home 目录结构 
tree /home/
# 没有 tree 指令,x先 使用 yum 来安装
yum install tree

十二、 linux 的网络配置

1.配置固定的 ip 地址

1.修改配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0
image.png
  1. reboot //重启
  2. service network restart // 重启网络服务

2. 修改主机名

  1. 查看当前主机名
hostname
  1. 修改linux的主机映射文件
vim /etc/sysconfig/network

文件中内容
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop //写入新的主机名
注意:主机名称不要有“_”下划线

  1. 修改 /etc/hosts 增加ip和主机的映射
vim /etc/hosts
#在hosts文件中加入
192.168.102.130 test
  1. 并重启设备,生效

十三、进程管理

1. 显示系统执行的进程 ps

  1. 指令:ps –aux //显示所有的进程
    ps -aux | grep sshd //查看 sshd 进程
    指令说明
    System V 展示风格
    USER:用户名称
    PID:进程号
    %CPU:进程占用 CPU 的百分比
    %MEM:进程占用物理内存的百分比
    VSZ:进程占用的虚拟内存大小(单位:KB)
    RSS:进程占用的物理内存大小(单位:KB)
    TTY:终端名称,缩写 .
    STAT:进程状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级
    更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
    STARTED:进程的启动时间
    TIME:CPU 时间,即进程使用 CPU 的总时间
    COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
  2. 指令:ps -ef //以全格式显示当前所有的进程
    -e 显示所有进程。-f 全格式。
    ps -ef|grep xxx
    是BSD风格
    UID:用户ID
    PID:进程ID
    PPID:父进程ID
    C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
    STIME:进程启动的时间
    TTY:完整的终端名称
    TIME:CPU时间
    CMD:启动进程所用的命令和参数

2. 终止进程kill和killall

  1. 基本语法:
    kill [选项] 进程号(功能描述:通过进程号杀死进程 -9 强制终止)
    killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
  2. 常用选项:
    -9 :表示强迫进程立即停止

3. 查看进程树 pstree

  1. 基本语法:
    pstree [选项] 可以更加直观的来看进程信
  2. 常用选项:
    -p :显示进程的 PID
    -u :显示进程的所属用户

4. 服务(service)管理

  1. 介绍:
    服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程
  2. service 管理指令:
    service 服务名 [start | stop | restart | reload | status]
    在 CentOS7.0 后 不再使用 service ,而是 systemctl
  3. 案例:
    3.1查看当前防火墙的状况,关闭防火墙和重启防火墙
service iptables status
service iptables stop 
service iptables start

这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用 chkconfig 指令

  1. chkconfig 指令
    4.1 通过chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭
    4.2 基本语法
chkconfig --list|grep xxx     [查看服务]
chkconfig 服务名 --list        [查看服务]
chkconfig --level 5 服务名 on/off    [可以指定(5)某个服务,某各个运行级别,开启或关闭]
chkconfig 服务名 on/off   [不管是哪个级别都开启或关闭]

4.3 应用实例

# 1: 请显示当前系统所有服务的各个运行级别的运行状态 
chkconfig --list
# 2:请查看sshd服务的运行状态
chkconfig sshd –list 或者 chkconfig –list | grep sshd
# 3: 将sshd 服务在运行级别5下设置为不自动启动,看看有什么效果?
chkconfig –level 5 sshd off
# 4: 当运行级别为5时,关闭防火墙。
chkconfig –level 5 iptables off
# 5: 在所有运行级别下,关闭防火墙
chkconfig iptables off
# 6: 在所有运行级别下,开启防火墙
chkconfig  iptables on

4.4 使用细节
chkconfig重新设置服务后自启动或关闭,重启机器就会按设置的状态运行

5.动态监控进程

  1. top命令界面详解:


    image.png

1.1 第一行:任务队列信息

  • 系统当前时间:top - 09:15:52
  • 系统运行时间:up 0 min
  • 当前登录用户:1 user
  • 负载均衡情况:load average: 1.78,0.49,0.17(average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。)
  • 注意:load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

1.2 第二行:Tasks — 任务(进程)

  • 总进程:95 total
  • 运行进程:1 running
  • 休眠进程:94 sleeping
  • 停止进程:0 stopped
  • 僵尸进程:0 zombie

第三行:cpu状态信息

  • 0.3 us:用户空间占用CPU的百分比。
  • 0.0 sy:内核空间占用CPU的百分比。
  • 0.0 ni:改变过优先级的进程占用CPU的百分比
  • 99.7 id:空闲CPU百分比
  • 0.0 wa:IO等待占用CPU的百分比
  • 0.0 hi:硬中断占用CPU的百分比
  • 0.0 si:软中断占用CPU的百分比
  • 0.0 st:当Linux系统是在虚拟机中运行时,等待CPU资源的时间占比

第四行:内存状态

  • total:总内存量
  • free:空闲内存
  • used:已用内存
  • buff/cache:缓存内存

第五行:swap交换分区信息

  • total:总内存量
  • free:空闲内存
  • used:已用内存
  • avail Mem:可用内存

第六行:各进程状态监控

  • PID — 进程id
  • USER — 进程所有者
  • PR — 进程优先级
  • NI — nice值。负值表示高优先级,正值表示低优先级
  • VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR — 共享内存大小,单位kb
  • S — 进程状态。D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪/停止;Z=僵尸进程
  • %CPU — 上次更新到现在的CPU时间占用百分比
  • %MEM — 进程使用的物理内存百分比
  • TIME+ — 进程使用的CPU时间总计,单位1/100秒
  • COMMAND — 进程名称(命令名/命令行)
  1. 基本语法:
    top [选项]
    常用命令参数为:
    -c :显示整个命令行而不只是显示命令名
    -d <时间> :设置间隔时间
    -u <用户名> :指定用户名
    -p <进程号> :指定进程
    -n <次数> :循环显示的次数
    -i :使top不显示任何闲置或者僵死进程
  2. top命令使用举例
# 每隔3秒显式所有进程的资源占用情况
top   
# 每隔1秒显式所有进程的资源占用情况
top -d 1  
# 每隔3秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -c  
# 每隔3秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -p 12345 -p 6789
# 每隔2秒显示pid是123456的进程的资源使用情况,并显式该进程启动的命令行参数
top -d 2 -c -p 123456 
  1. top的交互命令
    4.1 过滤用户 u:在top命令显示中,输入u,然后输入用户名,则可以查看相应的用户进程。如按u键,然后输入root,按回车则只显示root用户的进程
    4.2 查看各个CPU的使用情况 1:在top命令下,输入1,可以看到各个CPU的使用情况
    4.3 隐藏闲置或僵死的进程 i:在top命令下,输入i,可以隐藏闲置或僵死的进程,效果跟输入top -i 是一样的。
    4.4 切换内存信息的单位 E/m:top命令默认以K为单位显示内存大小,这让人十分抓狂,我们可以通过大写字母E来切换内存信息区域的显示单位。小写字母m可以控制是否显示内存信息
    4.5 切换进程列表中的内存显示单位 e:在进程列表中,内存的单位默认也是KB,我们可以通过小写字母e来切换单位
    4.6 粗体显示排序的列 x:f键可以改变排序的列,但界面中看不出是以哪个列来排序的,可以通过小写字母x来粗体显示当前排序的列
    4.7 快速切换排序的列:虽然可以通过f键来修改排序的列,但还有一些快速切换排序列的方式:比如大写字母M以%MEM列排序,大写字母N以PID列排序,大写字母P以%CPU列排序,大写字母T以TIME+列排序。大写字母R可以将当前的排序结果反转
    4.8 显示完整的执行命令 c:默认COMMAND列只显示程序的名字,并不包含程序的路径,可以通过小写字母c来显示完整的执行命令(效果跟top -c相同)
    4.9 终止指定的进程 k:输入“k”回车,再输入要结束的进程ID号
  2. 更改显示内容
    5.1 通过按f键可以编辑显示内容,在top命令显示中,按f键后,会出现下图


    image.png

    5.2 根据图中描述可知:

  • 当前是按照%CPU这一列来排序的
  • 可以通过上、下键来导航
  • 按右键可以选择整个列,然后按上、下键来移动整个列(调整列的显示位置,前移或后移),按回车确定
  • 按空格键来显示/隐藏该列,带的是显示,不带的是不显示
  • 按s键可以将当前列设置为排序列
  • 按q键退出

6. 监控网络状态

查看系统网络情况

  1. 基本语法
    netstat [选项]
  2. 选项说明
    -a 显示所有连线中的Socket。
    -A 列出该网络类型连线中的相关地址。
    -c 持续列出网络状态。
    -C 显示路由器配置的快取信息。
    -e 显示网络其他相关信息。
    -F 显示路由缓存。
    -g 显示多重广播功能群组组员名单。
    -h 在线帮助。
    -i 显示网络界面信息表单。
    -l 显示监控中的服务器的Socket。
    -M 显示伪装的网络连线。
    -n 直接使用IP地址,而不通过域名服务器。
    -N 显示网络硬件外围设备的符号连接名称。
    -o 显示计时器。
    -p 显示正在使用Socket的程序识别码和程序名称。
    -r 显示Routing Table。
    -s 显示网络工作信息统计表。
    -t 显示TCP传输协议的连线状况。
    -u 显示UDP传输协议的连线状况。
    -v 显示指令执行过程。
    -V 显示版本信息。
    -w 显示RAW传输协议的连线状况。
    -x 此参数的效果和指定"-A unix"参数相同。
    --ip 此参数的效果和指定"-A inet"参数相同。
  3. 案例
# 查看服务名为 sshd 的服务的信息。
netstat -anp|grep sshd
#如果我们希望查看当前系统有哪些端口在监听
netstat -tlnp
#查看nginx监听的端口
netstat -ntulp|grep nginx
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容