百度摘自各处

查看当前连接设备:

展开查看详情

  • 查看当前连接设备:
adb devices
  • 如果发现多个设备:
adb -s 设备号 其他指令

举例:

adb -s devicel install xxx.apk

查看顶部Activity:

展开查看详情

  • windows环境下:
adb shell dumpsys activity | findstr "mFocusedActivity"
  • Linux、Mac环境下:
adb shell dumpsys activity | grep "mFocusedActivity"

查看日志:

展开查看详情

adb logcat

安装apk文件:

展开查看详情

adb install xxx.apk
  • 此安装方式,如果已经存在,无法安装;推荐使用覆盖安装
adb install -r xxx.apk
  • 比如直接RUN出来的包是test-only的无法安装,推荐使用-t:
adb install -r -t xxx.apk

卸载App:

展开查看详情

adb uninstall com.test.app
  • 如果想要保留数据,则:
adb uninstall -k com.test.app

传递文件:

展开查看详情

  • 往手机SDCard传递文件:
adb push 文件名 手机端SDCard路径

例如:

adb push test.jpg /sdcard/
  • 从手机端下载文件:
adb pull /sdcard/xxx.txt

查看手机端安装的所有app包名:

展开查看详情

adb shell pm list packages

启动Activity:

展开查看详情

adb shell am start 包名/完整Activity路径

例如:

adb shell am start com.test.app/com.test.app.MainActivity
  • 如果需要携带参数(携带一个Intent, Key 为name):
adb shell am start com.test.app/com.test.app.MainActivity -e name xxx

启动一个隐式的Intent:

展开查看详情

adb shell am start -a "android.intent.action,VIEW" -d "https://www.google.com"

发送广播:

展开查看详情

adb shell am broadcast -a "broadcastactionfilter"
  • 如果需要携带参数(携带一个Intent,key为name):
adb shell am broadcast -a "broadcastactionfilter" -e name xxx

启动服务:

展开查看详情

adb shell am startservice "com.test.app/com.test.app.MyService"

屏幕截图:

展开查看详情

  • 可以使用screencap命令来进行手机屏幕截图,例如:
adb shell screencap /sdcard/screen.png

录制视频:

展开查看详情

  • 可以使用screenrecord[options] filename命令来录制屏幕视频,例如:
adb shell screenrecord /sdcard/demo.mp4


目录操作

mkdir: 创建目录

  • -p : 递归的创建目录 也就是可以创建多层目录
  • 一次创建多个目录: mkdir {a,b,c,d,e,f}
  • 一次创建 a b c d e f多个目录。

rmdir:删除一个空文件夹

cp:复制文件或者文件夹

  • -a =-pdr
  • -p 同时复制文件属性,比如修改日期
  • -d 复制时保留文件链接
  • -r: 复制文件夹时,递归复制子文件夹
  • -l 不复制,而是创建指向源文件的链接文件,链接文件名由目标文件给出。
  • note:可以在拷贝的同时重命名

mv:移动文件或者文件夹,可以在移动的时候重命名

rm :删除文件或者文件夹

  • -r:递归删除
  • -f:强制删除 即没有提醒

文件处理命令

ls :查看文件

  • -l 以列表形式查看
  • -h 以一种人性化的方式查看,也是文件的大小以合适的单位显示
  • -a 查看所有文件,包括隐藏文件
  • -i 显示出文件的i节点号

touch 文件名:

创建文件 可以一次创建多个文件,以空格隔开

cat :查看文件内容

  • -n:带行号

tac:反向显示文件内容

more:分页查看文件内容

进入浏览模式后:

  • f或者空格:下一页
  • enter:一行一行往下翻
  • q:退出

less:查看文件内容

  • 空格翻页
  • 回车换行
  • pageup:上一页
  • pagedown:下一页
  • 上箭头:向上翻
  • 下箭头:向下翻
  • /搜索词 n向下找

head -n 文件名 :

查看文件前n行。缺省-n显示前10行

tail -n 文件名 :

查看文件的末尾几行

  • -f: 动态显示文件末尾内容

ln: 链接命令

  • -s创建软连接
  • 硬链接和cp -p的区别是硬链接会同步更新
  • 源文件如果丢失,硬链接依然存在。
  • 硬链接和源文件的i节点相同。
  • 硬链接不能夸分区,软连接可以跨分区。
  • 硬链接不可以链接目录,链接可以
  • 软连接文件具有的权限是ugo都是rwx

权限管理命令

chmod:修改文件或目录的权限,只有root和所有者可以更改

  • [{ugoa}{+-=}{rwx}] [文件或目录]
  • [mode=421] [文件或目录]
  • -R 递归修改
  • 权限的数字表示:
  • r->4
  • w->2
  • x->1

例:

chmod u+x a.txt
chmod g+w,o-r a.txt //同时做多个权限的修改
chmod g=rwx a.txt
chmod 640 a.txt
chmod -R 777 testdir //把目录和下面所有文件的权限

     

针对文件 针对目录
r 读权限 可以查看文件内容 可以列出目录中的内容
w 写权限 可以修改文件内容 可以在目录中创建、删除文件
x 执行权限 可以执行文件 可以进入目录

chown:

更改文件所有者,只有root可以更改

chown root a.txt //把a.txt更改为root所有

chgrp:

更改所属组

chgrp lambrother fengjie //把fengjie的所属组更改为lambrother

umask -S:

查看创建文件的缺省权限,即默认权限

umask 023:

修改文件的缺省权限为777-023=754。即rwxr-xr--

文件搜索命令

find:搜索制定范围内的文件

  • find [搜索范围] [匹配条件]
  • -name 按文件名搜索
  • -iname 根据文件名查找,不区分大小写
  • -size +n大于 -n小于 n等于 这个n是数据块,在Linux中一个数据块是512字节大小
  • -user 根据所有者查找
  • -group 根据所属组查找
  • 根据文件属性查找:
    -amin 访问时间 access
    -cmin 根据文件属性被修改的时间 change
    -mmin 根据文件内容被修改的时间 modify

例:
find /etc -cmin -5: 查找/etc目录下五分钟内被修改过属性的文件和目录

  • -a 两个条件同时满足
    find /etc -size +10 -a -size -50
  • -o 两个条件满足一个即可
  • -type
    f 文件 d 目录 l软连接文件
  • -inum 根据i节点查找

对找到的结果进行操作

  • -exec或者-ok 命令 {} \;

例如:

find /etc -name init* -exec ls -l {} \; //对找到的文件名按列表查看

find /etc -name init : //搜索目录/etc下面所有的init文件,精确匹配,包括子目录中的init文件
find / -size +204800 //搜索大于100M的文件

locate: (查找速度非常快,因为它维护了一个文件库。缺点就是新建立的文件没有很快收录到文件库)

locate 文件名

  • updatedb 更新locate的文件资料库 文件资料库不收录/tmp下的文件
  • -i 不区分大小写

which :查找命令的目录以及别名

which 命令

whereis:

搜索命令所在目录及帮助文档路径。

grep:

在文件中搜寻字符串匹配的行并输出,多个文件以空格隔开。

  • -i不区分大小写
  • -v排除指定字符串
  • -E 以正则表达式的方式搜索
  • -F 以普通文本的方式搜索
  • -n 显示搜索到的内容在文件中的行号。

帮助命令

man:查看命令或者配置文件的帮助信息

  • man 命令/配置文件
  • 在手册里面,可以输入/要查找的str
  • man ls
  • man services
  • man fstab //直接输入配置文件的名字,而不需要使用绝对路径 重点查看name选项和配置文件的格式。
  • 如果一个命令即使命令又是配置文件,那么可以使用一个序号进行区分,比如:
  • man 1 passwd 查看命令passwd的帮助
  • man 5 passwd 查看配置文件passwd的帮助

whatis 命令:得到命令的简要信息

apropos 配置文件名:查看配置文件的简短信息

命令 --help:查看命令的选项。

help 命令:查看shell内置命令的帮助信息。 shell内置命令是没有命令路径。不能使用man查看帮助。

用户管理命令

useradd: 添加用户

useradd 用户名

passwd: 修改用户密码

passwd 用户名 不加用户名直接更改自己的密码

who:查看当前的账户

显示的格式为: 登录用户名 登录终端(tty:本地登录 pts:远程终端) 登录时间 ip地址

  • w:查看更详细的用户登录信息。

压缩解压缩命令

.gz格式

  • 压缩:gzip 文件名 只能压缩文件不能压缩目录,压缩完源文件也不见了
  • 解压缩:gunzip/gzip -d 压缩包名称

tar:

  • -zcvf 压缩后文件名 打包的目录 :生成.tar.gz文件 注:这个命令先用tar归档,然后把归档的包压缩成.gz
  • -zxvf 要解压的文件名 :解压缩.tar.bz2的文件
  • -jcvf 压缩后的文件名 打包的目录:生成.tar.bz2 注:这个命令先用tar归档,然后把归档的包压缩成.bz2
  • -jxvf 要解压的文件名 :解压.tar.bz2的文件

zip:

  • zip -r 压缩生成的文件名 要压缩的目录
  • zip 压缩生成的文件名 要压缩的文件。

unzip:

  • unzip 要解压缩的文件

bzip2:

  • bzip2 -k 要压缩的文件名 -k选项:保留源文件
  • bunzip2 -k 要解压的文件名 -k选项:保留压缩包

网络命令

ping: 测试网络连通性

ping ip地址

  • -c 要ping的次数

ifconfig:

直接回车查看当前网卡信息

  • ifconfig 网卡名 ip地址 临时修改网络ip
ifconfig th0:0 192.168.1.100 netmask 255.255.255.0 //给th0这个网卡新添加一个ip
ifconfig eth0:0 down
ifconfig eth0:0 up

ifdown th0

禁用th0这块网卡

ifup th0

开启th0这块网卡

mail:邮件命令

  • mail 要发送的用户名
  • mail 直接回车:查看命令
    help :查看支持的命令格式
    输入序列号:查看邮件详细内容
    h: 回到邮件列表
    d 序列号:删除序列号对应的邮件

last:统计计算机所有用户登录的时间信息,以及重启信息

lastlog:所有用户最后一次登录的时间

  • -u 用户的uid 查看指定用户的登录信息。

traceroute:显示数据包到主机间的路径

traceroute 要探测的地址.

  • -n 使用ip而不使用域名

nslookup www.baidu.com

查看百度的ip地址

netstat:显示网络相关信息

  • -t :tcp协议
  • -u :udp协议
  • -l:监听
  • -r:路由
  • -n:显示ip地址和端口号
  • netstat -tlun:查看本机监听的端口
  • netstat -an:查看所有的监听信息
  • netstat -rn :查看路由表,即网管

wget 文件地址

下载文件

service network restart:重启网络服务。

telnet 域名或ip

远程管理与端口探测
如: telnet 192.168.2.3:80 探测192.168.2.3是否开启了80端口

mount:挂在命令

mount -t iso9660 /dev/sr0 /mnt/cdrom //把sr0挂在到cdrom

关机重启命令

shutdown:这个关机命令更安全一些,不推荐使用其他关机命令。

  • -h:关机

shutdown -h now shutdown -h 20:30

  • -r:重启

shutdown -r now

  • -c:取消上次的关机命令

重启:

  • init 6
  • reboot

关机:

  • init 0
  • poweroff

系统运行级别:

  • 0 关机
  • 1 单用户 类似windows安全模式
  • 2 不完全多用户,不含nfs服务
  • 3 完全多用户
  • 4 未分配
  • 5 图形界面
  • 6 重启

可以通过查看/etc/inittab来查看系统启动的运行级别

  • runlevel:查看当前的运行级别
  • init n:设置系统运行级别

logout:退出当前用户,返回到登录界面

其他小技巧

\命令名字 :使用原始的命令

比如:

  • ls 实际上是ls --color auto
  • \ls 就是原始的ls

其他命令

ps 静态查看系统进程,系统默认安装

  • ps -aux 使用BSD语法查看所有进程
  • ps -ef 标准语法查看所有进程
    UID 程序被该 UID 所拥有
    PID 就是这个程序的 ID
    PPID 则是其上级父程序的ID
    C CPU 使用的资源百分比
    STIME 系统启动时间
    TTY 登入者的终端机位置
    TIME 使用掉的 CPU 时间。
    CMD 所下达的指令为何
  • ps -aux --sort -pcpu,-pmem
    根据CPU占用情况和内存占用情况来显示进程
  • watch -n 1 'ps -aux --sort -pcpu,-pmem'
    每隔1秒监控一次进程情况

top 动态查看系统的状态

lsof -Pti: 8000

通过端口号获得进程pid

kill -9 pid

杀死指定pid的进程,强行杀死。

history

查看历史命令

执行历史命令

  • !! 执行上一条命令
  • !n 执行历史命令的中第n条
  • !-n 执行导数第n条
  • !string 执行以string开头的历史命令行
  • !?string? 执行包含string的历史命令行

alias

给命令起别名

  • alias 命令='别名'
  • alias -p 查看已存在的别名

unlias

取消别名

  • unlias name

cal

查看某一年的日历,可以是1-9999中的任意一年

  • cal 88

zcat

查看压缩包中的内容

sed -i 's#old#new#g' 文件名

使用new替换文件中的old

ssh [email protected] "ifconfig"

远程执行命令

bash -x 脚本名

调试脚本

centos6上的三个网络配置文件

  • /etc/sysconfig/network-scripts/ifcfg-etho
  • /etc/sysconfig/network
  • /etc/resolv.conf # dns


算了不记了,GUI用户没情怀。会插入编辑强制保存退出Vans了

git速查

Reflog2.gif
Reflog2.gif
Reflog.gif
Reflog.gif
5164e18f44496040c3721d417a213ddc.gif
5164e18f44496040c3721d417a213ddc.gif
7fa397f2f716ef7fdccbc0c0e790f4f0.gif
7fa397f2f716ef7fdccbc0c0e790f4f0.gif
6daf895e1e4f033c1d29d34c97bb7b68.gif
6daf895e1e4f033c1d29d34c97bb7b68.gif
2869a725dd1d8be242de1db893f684ef.gif
2869a725dd1d8be242de1db893f684ef.gif
6583510ecf6aac9f13617710bc3fedae.gif
6583510ecf6aac9f13617710bc3fedae.gif
ebca219688b8e28d799b0d29e1d740e7.gif
ebca219688b8e28d799b0d29e1d740e7.gif
squash.gif
squash.gif
drop.gif
drop.gif
Rebasing.gif
Rebasing.gif
1205188948a1da6a9c5eb18de2e88f68.gif
1205188948a1da6a9c5eb18de2e88f68.gif
No-fast-foward-no-ff.gif
No-fast-foward-no-ff.gif
Fast-forward--ff.gif
Fast-forward--ff.gif

下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。

Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

一、新建代码库

在当前目录新建一个Git代码库

git init

新建一个目录,将其初始化为Git代码库

git init [project-name]

下载一个项目和它的整个代码历史

git clone [url]

二、配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

显示当前的Git配置

git config --list

编辑Git配置文件

git config -e [--global]

设置提交代码时的用户信息

git config [--global] user.name "[name]" 
git config [--global] user.email "[email address]"

git 修改当前的project的用户名的命令为:

git config user.name //你的目标用户名;

git修改当前的project提交邮箱的命令为:

git config user.email //你的目标邮箱名;

如果你要修改当前全局的用户名和邮箱时,需要在上面的两条命令中添加一个参数,–global,代表的是全局。

命令分别为:

git config  --global user.name 你的目标用户名;
git config  --global user.email 你的目标邮箱名;

三、增加/删除文件

添加指定文件到暂存区

git add [file1] [file2] ...

添加当前目录的所有文件到暂存区

git add .

添加每个变化前,都会要求确认

对于同一个文件的多处变化,可以实现分次提交

git add -p

删除工作区文件,并且将这次删除放入暂存区

git rm [file1] [file2] ...

停止追踪指定文件,但该文件会保留在工作区

git rm --cached [file]

改名文件,并且将这个改名放入暂存区

git mv [file-original] [file-renamed]

四、代码提交

提交暂存区到仓库区

git commit -m [message]

提交暂存区的指定文件到仓库区

git commit [file1] [file2] ... -m [message]

提交工作区自上次commit之后的变化,直接到仓库区

git commit -a

提交时显示所有diff信息

git commit -v

使用一次新的commit,替代上一次提交

如果代码没有任何新变化,则用来改写上一次commit的提交信息

git commit --amend -m [message]

重做上一次commit,并包括指定文件的新变化

git commit --amend [file1] [file2] ...

五、分支

列出所有本地分支

git branch

列出所有远程分支

git branch -r

列出所有本地分支和远程分支

git branch -a

新建一个分支,但依然停留在当前分支

git branch [branch-name]

新建一个分支,并切换到该分支

git checkout -b [branch]
git checkout -b appoint_box(别名) origin/feature/20181128_1491627_appoint_box_1(分支名)

新建一个分支,指向指定commit

git branch [branch] [commit]

新建一个分支,与指定的远程分支建立追踪关系

git branch --track [branch] [remote-branch]

切换到指定分支,并更新工作区

git checkout [branch-name]

切换到上一个分支

git checkout -

建立追踪关系,在现有分支与指定的远程分支之间

git branch --set-upstream [branch] [remote-branch]

合并指定分支到当前分支

git merge [branch]

选择一个commit,合并进当前分支

git cherry-pick [commit]

删除分支

git branch -d [branch-name]

删除远程分支

git push origin --delete [branch-name]
git branch -dr [remote/branch]

六、标签

列出所有tag

git tag

新建一个tag在当前commit

git tag 

新建一个tag在指定commit

git tag  [commit]

删除本地tag

git tag -d 

删除远程tag

git push origin :refs/tags/[tagName]

查看tag信息

git show 

提交指定tag

git push [remote] 

提交所有tag

git push [remote] --tags

新建一个分支,指向某个tag

git checkout -b [branch] 

七、查看信息

显示有变更的文件

git status

显示当前分支的版本历史

git log

显示commit历史,以及每次commit发生变更的文件

git log --stat

搜索提交历史,根据关键词

git log -S [keyword]

显示某个commit之后的所有变动,每个commit占据一行

git log  HEAD --pretty=format:%s

显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件

git log  HEAD --grep feature

显示某个文件的版本历史,包括文件改名

git log --follow [file]
git whatchanged [file]

显示指定文件相关的每一次diff

git log -p [file]

显示过去5次提交

git log -5 --pretty --oneline

显示所有提交过的用户,按提交次数排序

git shortlog -sn

显示指定文件是什么人在什么时间修改过

git blame [file]

显示暂存区和工作区的代码差异

git diff

显示暂存区和上一个commit的差异

git diff --cached [file]

显示工作区与当前分支最新commit之间的差异

git diff HEAD

显示两次提交之间的差异

git diff [first-branch]...[second-branch]

显示今天你写了多少行代码

git diff --shortstat "@{0 day ago}"

显示某次提交的元数据和内容变化

git show [commit]

显示某次提交发生变化的文件

git show --name-only [commit]

显示某次提交时,某个文件的内容

git show [commit]:[filename]

显示当前分支的最近几次提交

git reflog

可以得到cimmit id

从本地master拉取代码更新当前分支:branch 一般为master

git rebase [branch]

八、远程同步

git remote update  --更新远程仓储

下载远程仓库的所有变动

git fetch [remote]

显示所有远程仓库

git remote -v

显示某个远程仓库的信息

git remote show [remote]

增加一个新的远程仓库,并命名

git remote add [shortname] [url]

取回远程仓库的变化,并与本地分支合并

git pull [remote] [branch]

上传本地指定分支到远程仓库

git push [remote] [branch]

强行推送当前分支到远程仓库,即使有冲突

git push [remote] --force

推送所有分支到远程仓库

git push [remote] --all

九、撤销

恢复暂存区的指定文件到工作区

git checkout [file]

恢复某个commit的指定文件到暂存区和工作区

git checkout [commit] [file]

恢复暂存区的所有文件到工作区

git checkout .

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

git reset [file]

重置暂存区与工作区,与上一次commit保持一致

git reset --hard

重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

git reset [commit]

重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

git reset --hard [commit]

重置当前HEAD为指定commit,但保持暂存区和工作区不变

git reset --keep [commit]

新建一个commit,用来撤销指定commit

后者的所有变化都将被前者抵消,并且应用到当前分支

git revert [commit]

暂时将未提交的变化移除,稍后再移入

git stash
git stash pop

十、其他

生成一个可供发布的压缩包

git archive

上传本地项目到远程仓库

  1. (先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库
git init
  1. 把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“.”,意为添加文件夹下的所有文件
git add .
  1. 用命令 git commit告诉Git,把文件提交到仓库。引号内为提交说明
git commit -m 'first commit'
  1. 关联到远程库
git remote add origin 你的远程库地址

如:

git remote add origin https://github.com/githubusername/demo.git
  1. 获取远程库与本地同步合并(如果远程库不为空必须做这一步,否则后面的提交会失败)
git pull --rebase origin master
  1. 把本地库的内容推送到远程,使用 git push命令,实际上是把当前分支master推送到远程。执行此命令后会要求输入用户名、密码,验证通过后即开始上传。
git push -u origin master
  1. 状态查询命令
git status

摘自flhuoshan

1、文本编辑

  • 删除 ctrl + y
  • 复制 ctrl + d
  • 光标跳到类头 ctrl + home
  • 光标跳到类尾 ctrl + end
  • 光标快速移动 ctrl + <-/->
  • 光标快速选中 ctrl + shift + <-/->
  • 光标在类内方法头部快速移动 alt + 上下箭头
  • 光标所在位置每次选中一行 shift + 上下箭头
  • 内容在方法体内上下移动 ctrl + shift + 上下箭头
  • 内容在类内上下移动 alt + shift + 上下箭头

2、智能提示

  • 提示 ctrl + space
  • 智能提示 ctrl + shift + space
  • 完成当前语句 ctrl + shift + enter
  • 建议提示为参数 ctrl + alt + p
  • 对代码重新排列格式 ctrl + alt + l
  • 对imports进行优化 ctrl + alt + o

3、位置定位

  • 定位到下一个或上一个错误 f2/Shift + f2
  • 定位文件行 ctrl + g
  • 定位到代码块开始 ctrl + [
  • 定位到代码块结束 ctrl + ]
  • 回到最近的窗口 f12
  • 回到之前的文件 alt + left
  • 回到之后的文件 alt + right
  • 定位到最后编辑位置 ctrl + shift + backspace
  • 焦点切换到文件编辑 esc
  • 关闭最近打开的窗口 shift + esc

4、类方法文件定位

  • 查找类 ctrl + n
  • 查找文件 ctrl + shift + n
  • 符号定位 ctrl + alt + shift + n
  • 查看文件结构 ctrl + f12
  • 最近打开的文件 ctrl + e
  • 定位下一个方法 alt + down
  • 定位上一个方法 alt + up
  • 查看方法参数信息 ctrl + p
  • 查看方法、类的doc ctrl + q

5、类和方法的结构查看定位

  • 跳到类或方法的声明 ctrl + b
  • 定位到类的父类、接口 ctrl + u
  • 查看类的继承结构 ctrl + h
  • 查看方法的继承结构 ctrl + shift + h
  • 查看类或方法被调用情况 ctrl + alt + h
  • 原地参看类、方法的声明 ctrl + shift + i

6、运行与调试

  • 选择配置并调试 alt + shift + f9
  • 选择配置并运行 alt + shift + f10
  • 运行当前默认工程 shift + f10
  • 调试当前默认工程 shift + f9
  • 构建项目 ctrl + f9
  • 运行至光标处 alt + f9
  • 强制运行至光标处 ctrl + alt + f9
  • 生成断点 ctrl + f8
  • 查看断点 ctrl + shift + f8

7、重构

  • 弹出重构菜单 ctrlt + alt + shift + t
  • 重命名 shift + f6
  • 复制类 f5
  • 移动方法到另外一个类 f6
  • 安全删除 alt + delete
  • 内联 ctrl + alt + n

8、代码生成

  • 生成单元测试类 ctrl + shift + t
  • 代码标签输入完成后,按 Tab,生成代码 tab
  • 可以生成构造器/Getter/Setter等 alt + insert


最后修改:2020 年 07 月 31 日 02 : 21 PM
如果觉得我的文章对你有用,请随意赞赏