Linux-Ubuntu系统使用总结

总结在Ubuntu系统日常使用中遇到的基础问题。

0 常用总结

0.1 pip安装库时存在缓存及清除方法

手动清除缓存:pip cache purge
这个命令会清除所有缓存,包括已下载但未安装的软件包和已安装但未被使用的缓存
只想清除特定软件包的缓存:pip cache remove package-name

0.2 为 pip 配置国内镜像源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣:http://pypi.douban.com/simple/

永久配置:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

1 Linux常用命令归纳简表

序号命令描述备注
1du -sh xxx查看当前目录总大小
2unzip xxxxx.zip解压zip文件sudo apt-get install unzip
3unrar x test.rarx的官方说法:Extract files with full path(提取具有完整路径的文件)
4cp <filename> <filename1> <foldername>/复制多个文件
5rm [文件名] / rm -r [文件夹路径]删除文件/删除文件夹中所有文件

1.du
du = disk usage 磁盘使用率,输出每个文件或者目录总大小:du [OPTION]… [FILE]…
-c, --total 累计大小
-d, --max-depth=N 决定统计每个目录的深度
-B, --block-size=SIZE 决定显示文件大小的单位;比如 ‘-BM’,就是MB,'-BK’就是KB
-h, --human-readable 以高可读方式打印 (比如1K 234M 2G)
-s, --summarize 显示总大小

du -sh:查看当前目录总大小。
du -sh *:查看当前目录所有子目录大小。
du -ach *:查看当前目录和所有子目录大小,最后一行会显示当前目录的总大小,不包括隐藏文件。

2.压缩、解压工具
2.1 zip/unzip
压缩文件: zip xxx.zip file …
压缩目录: zip -r xxx.zip dir …
2.2 rar/unrar
压缩文件: sudo apt-get install rar
解压文件: sudo apt-get install unrar

x是unrar命令需接收的参数(unrar命令后必须要跟一个参数),即表示将test.rar压缩文件解压到当前目录下的test文件夹中,不会创建同压缩包相同的文件名,是直接将压缩包里面的东西解压出来。
如果使用unrar e命令,会将最底层的文件依次解压到当前目录下。

2 sh脚本

3 Linux包安装

Linux软件安装管理的几种方式:

3.1 源码安装

程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包)。源代码分发提供了软件所有程序源代码,需要用户自己编译成可执行的二进制代码并进行安装,根据应用环境的不同进行编译安装。

3.1.1 *.tar.gz/*.tgz、*.bz2形式的源代码软件包

一般会将源码包解压缩到/usr/local/src目录下;
PREFIX为安装位置,推荐安装位置为/usr/local/XXX
默认安装位置:

  • 可执行文件默认放在/usr/local/bin
  • 库文件默认放在/usr/local/lib
  • 配置文件默认放在/usr/local/etc
  • 其它的资源文件放在/usr/local/share

3.2 二进制安装

二进制包,如 Red Hat发行版的.rpm包,Debian发行版的.deb包。

3.2.1 rpm

3.2.1.1 RPM简介

RPM全称“RedHat Package Manager”,该机制最早由Red Hat这家公司开发出来的,后来实在很好用,因此很多distributons就使用这个机制来作为软件安装的管理方式,包括Fedora,CentOS,SuSE等知名的开发商都是用它。
RPM最大的特点就是需要安装的软件已经编译过,并已经打包成RPM机制的安装包,通过里头默认的数据库记录这个软件安装时需要的依赖软件。
当安装在你的Linux主机时,RPM会先依照软件里头的数据查询Linux主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。

3.2.1.2 rpm包基础知识

RPM包全名的命名格式:软件名称-版本号-发布次数.适合linux系统.硬件平台.rpm
例如:ftp-0.17-74.fc27.i686.rpm

注意:
包全名:rpm操作没有安装的软件包,软件包使用的是包全名
包 名:rpm操作的已经安装的软件,软件包使用的是包名

例如上面的例子,包全名为ftp-0.17-74.fc27.i686.rpm,包名为ftp。

默认安装路径
/etc 配置文件放置目录
/usr/bin 一些可执行文件
/usr/lib 一些程序使用的动态链接库
/usr/share/doc 一些基本的软件使用手册与说明文件
/usr/share/man一些man page档案

3.2.1.3 rpm使用
  • 软件安装(install)

rpm -ivh 包全名 //例: rpm -ivh emacs-25.3-1.fc28.aarch64.rpm
-i:install的意思,安装
-v:查看更详细的安装信息画面(provide more detailed output)
-h:以安装信息栏显示安装进度
如果想安装多个用空格间隔然后接上要安装的rpm包即可,同时也支持通过网址的资源来安装。

  • 软件升级

rpm –Uvh foo-2.0-1.i386.rpm
-U:upgrade的意思,更新软件,若系统中没有该软件则进行安装(upgrade package(s))
-F:freshen的意思,更新系统已安装的某个软件(upgrade package(s) if already instaalled)

3.2.2 deb和dpkg

3.2.2.1 deb和dpkg简介

dpkg - package manager for Debian (debian系统的包管理工具)。
dpkg是Debian的一个底层包管理工具,主要用于对已下载到本地和已安装的软件包进行管理。

dpkg这个机制最早由Debian Linux社区所开发出来的,通过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时能提供安装后的软件信息,实在非常不错。只要派生于Debian的其它Linux distributions大多使用dpkg这个机制来管理,包括B2D,Ubuntu等。

deb包的含义:
格式为:Package_Version-Build_Architecture.deb
如:nano_1.3.10-2_i386.deb
软件包名称(Package Name): nano
版本(Version Number):1.3.10
修订号(Build Number):2
平台(Architecture):i386

dpkg软件包相关文件介绍:
/etc/dpkg/dpkg.cfg dpkg包管理软件的配置文件【Configuration file with default options】
/var/log/dpkg.log dpkg包管理软件的日志文件【Default log file (see /etc/dpkg/dpkg.cfg(5) and option --log)】
/var/lib/dpkg/available 存放系统所有安装过的软件包信息【List of available packages.】
/var/lib/dpkg/status 存放系统现在所有安装软件的状态信息
/var/lib/dpkg/info 记安装软件包控制目录的控制信息文件

dpkg数据库:
dpkg 使用文本文件作为数据库来维护系统中软件,包括文件清单, 依赖关系, 软件状态, 等等详细的内容,通 常在 /var/lib/dpkg 目录

3.2.2.2 dpkg使用
  • 软件安装

dpkg -i package-name.deb # --install 安装软件包,必须是deb包的完整名称。
(软件的安装可被拆分为两个对立的过程“解包”和“配置”)
dpkg --unpack package-name.deb #“解包”:解开软件包到系统目录但不配置, 如果和-R一起使用,参数可以是一个目录
dpkg --configure package-name.deb #“配置”:配置软件包
dpkg -c package-name.deb #列出 deb 包的内容

  • 移除和卸载
  • dpkg -r package-name # --remove, 移除软件包,但保留其配置文件
    dpkg -P package-name # --purge, 清除软件包的所有文件(removes everything, including configfiles)

3.3 在线安装

3.3.1 yum

3.4 APT和APT-Get

注意pip也有源:apt 及 pip 使用国内源

  • apt 使用阿里云源:

备份原文件
/etc/apt/source.list 是包管理工具 apt 记录软件包仓库位置的配置文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑源文件列表
sudo vim /etc/apt/sources.list
更新软件列表及软件包
sudo apt-get update #更新软件列表
sudo apt-get upgrade #更新软件包

  • pip/pip3 使用清华源
    临时使用

//pip3
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
// pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

设置为默认

// pip3
// 注意更新指令前面是 pip3 后面是 pip
pip3 install --upgrade pip -U #更新
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple #配置
//pip
pip install pip -U #更新
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple #配置

如果 pip 默认源的网络连接较差,可以临时使用清华镜像站来升级 pip:

// pip3
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
// pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U

之前就没注意到pip也有源,导致pytorch下载下不下来

3.4.1 APT

apt是命令行接口,跟APT(Advanced Packaging Tool) 工具apt-get 和 apt-cache 相比,apt 具有一些更适合交互式场景的选项,它更倾向于成为面向最终用户的工具(而不仅仅是系统管理员)。
换句话说,apt 比 apt-get 用起来更简单,用户体验更好。

用法:apt [选项] 命令
配置文件:早期 apt 默认的配置文件为 /etc/apt/apt.conf,但是当前的 Ubuntu 系统中默认没有这个文件。如果 /etc/apt/apt.conf 文件存在,apt 仍然会读取它。但现在的设计思路是把配置文件分隔后放置在 /etc/apt/apt.conf.d 目录下,这样更容易管理。

常用子命令:

命令例子描述备注
listlist packages based on package names类似dpkg-query --list,提供选项可安装(–installed), 可升级(–upgradeable),所有(–all-versions) versions.
searchapt searchsudo search in package descriptions
showapt showsudo show package details
installapt install vim=2:8.0.1453-1ubuntu1install packages类似apt-get
reinstallreinstall packages类似apt-get
removeremove packages类似apt-get
autoremoveRemove automatically all unused packages类似apt-get
update从配置的源下载包信息类似apt-get
upgradeupgrade the system by installing/upgrading packages类似apt-get
full-upgrade升级,如果需要将系统升级到新的版本,则会删除当前已安装的包。类似apt-get
edit-sourcesapt edit-sourcesedit the source information file类似apt-get
satisfyapt satisfy “foo, bar (>= 1.0)” “Conflicts: baz, fuzz”satisfy dependency strings类似apt-get

使用apt安装实践及说明:
sudo apt update
sudo apt install libopencv-dev 安装opencv
sudo apt install libeigen3-dev 安装Eigen3
sudo apt-get install libjsoncpp-dev 安装jsoncpp
(sudo apt install libjson-c-dev 安装json-c)
库的头文件安装在/usr/include/jsoncpp中, 库API文档默认在/usr/share/doc/libjsoncpp-dev/jsoncpp-api-html/目录下 . jsoncpp 的github主页上也给出了生成库文档的方法. 使用该库的方法很简单, 在你的程序中加入: #include <jsoncpp/json/json.h>

使用 apt-get install 或 apt install 下载安装软件:
软件包:/var/cache/apt/archives
安装位置:/usr/share
快捷方式:/usr/share/applications
可执行文件:/usr/bin ,系统范围内可执行文件的主要存放位置
lib库文件:/usr/lib,在 /usr/lib 或 /usr/lib64 目录下,这里存放了共享库文件(动态链接库)
配置文件:/etc,大多数软件的配置文件都会存储在这个目录中
文档和帮助文件:/usr/share/doc或/usr/share/man 目录下,这里存放了软件包的文档和帮助文件。
某些软件包可能会有特殊的配置需求,导致文件被安装到其他位置。

ubuntu查询命令:
which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。当加上-a参数时返回所有查找结果。
whereis: 只能用于程序名的搜索,而且只会搜索二进制文件(-b),manual路径下的说明文件(-m),源代码文件(-s)以及其他特殊文件(-u)。如果省略参数则返回所有查找信息。Linux系统会将系统内的所有文件都记录在一个数据库文件里面。whereis利用该数据库来查找数据,速度相当快,而且没有实际查询硬盘,比较节省时间。
如:whereis eigen3
find:该命令直接查找硬盘,所以花费时间比较长。该命令可以找到你想要的任何文件!
locate:作用相当于find -name,但是比后者要快很多,因为locate命令也是用数据库查找的。但是因为该数据库默认是一天更新一次的,所有使用locate命令有可能找不到最近新建的文件。这时就需要手动更新数据库,命令很简单,直接输入“updatedb”就好了!
type: 这个命令可以区分某个命令是bash自带的(builtin)还是bash外部(其他非bash所提供的)的独立二进制文件提供的。如果一个命令式外部命令,那么使用-p参数,会显示该命令的路径作用相当于which。


apt安装包 dev、dbg、utils后缀的含义:

In general,
-dev: Contains the library interface (header files) in case you are developing a program that wants to link to it.
-dbg: Contains debugging symbols, which usually just used by developers linking against that software or people debugging the software.
-utils: (I’m speaking from my Debian experience) Usually provides some additional command line tools. It may expose the user to internal features or just provide a CLI.
Having different packages like this is all about removing features and/or accessibility to reduce file size. This allows for faster downloads and less used disk space.

-dev后缀(develope):包含了库的接口(.h文件即头文件),这个为了当你开发一个程序时想要链接到这个包时
-dbg后缀(debug):包含调试符号,通常仅供开发人员使用该软件或调试软件的人员使用
-utils后缀(utility):通常提供一些额外的命令行工具。 它可能会将用户暴露给内部功能或仅提供CLI

dev后缀包通常包含必要的文件,如果你要从使用相关库的源代码编译软件。它们通常包含C头文件(foo.h)和无版本共享库(libfoo.so)。 非dev包只包含已编译二进制文件所需的版本化共享库(libfoo.so.1.1)

再补充一点。假如有一个包叫libfoo(/usr/lib这个目录下面存放的系统级的库文件,后面就省略这个目录).安装libfoo包实际是安装的libfoo.so.0.0,但安装libfoo-dev包却是libfoo.so.0和libfoo.so(即另外两个库文件版本的链接)。这种机制允许你同时安装新库和旧库,这样使用旧版本库的软件和使用新版本库的软件就可以一起用啦,安装libfoo-dev时,任何编译的软件都将遵循* .so链接并链接到该链接引用的库版本。

3.4.2 APT-Get

apt-get
apt-get 是一个下载安装软件包的简单命令行接口。最常用的命令是update(更新)和install(安装)。

用法: apt-get [选项] 命令

命令例子说明备注
updateapt-get update从所有已配置的源/etc/apt/sources.list同步软件包索引文件只检查,不更新
upgradeapt-get upgrade sudo更新已安装的包sudo包到最新版本若已经最新则忽略
dist-upgradeapt-get dist-upgrade升级系统有一定风险!此时 apt 将首先升级重要的包,如果有冲突的话,可能会删除一些次要的包(详见 man apt_preferences)
installapt-get install pac1 sudo …安装或升级一个或多个软件可指定版本号,pac可是用正则匹配
removeapt-get remove pac1 sudo…删除软件,保留配置文件 用法类似install
purgeapt-get purge pac1 sudo…删除软件和配置文件 用法类似remove
sourceapt-get source pac获取源码到当前目录
checkapt-get check更新缓存,检查是否有损坏的依赖
downloadapt-get download pac下载二进制包到当前目录
cleanapt-get clean清除检索到的软件包文件的本地存储库
autocleanapt-get autoclean类似clean,但仅删除不再下载且几乎无用的软件包文件更安全
autoremoveapt-get autoremove删除只是为了满足依赖,而自动安装的软件包,并且不再需要了更安全

3.4.3 apt 与 apt-get 的区别

简单来说 apt 命令就是 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。下面是几个常见命令的对照关系:
list:与 dpkg --list 相似
search:与 apt-cache search 相似
show:与 apt-cache show 相似
update:与 apt-get update 相同
install/remove:与 apt-get install/remove 相似,但是多了进度条提示
upgrade:与 apt-get upgrade --with-new-pkgs 相同
full-upgrade:与 apt-get dist-upgrade 相似

在我们使用的过程中,比较明显的区别是可以看到 apt 命令的进度条,个人感觉并不是太有用。

执行 apt update 命令,会提示可以升级的包的个数,而 apt-get update 命令则没有这样的提升

3.5 whl

4 Linux中的环境变量

4.1 Linux中环境变量初识

系统级:

  • 所有进程:/etc/environment
  • 所有用户:/etc/profile
    用户级:
  • 当前用户:~/.profile
  • 当前bash:~/.bashrc

系统级:通常是通过配置文件进行设置和管理的,/etc/profile和/etc/environment

  • PATH(用于指定可执行文件的搜索路径)
  • LANG(用于设置系统语言环境)
    用户级:在登录时通过不同的配置文件(如.bashrc、.bash_profile、.profile等)设置
  • HOME(指定用户的主目录路径)
  • USER(当前用户名)
    进程级:由特定进程设置的,并且仅对该进程及其子进程可见
    可以通过编程语言(如C语言中的setenv函数)在程序中进行设置,或者通过终端命令行在特定的进程上下文中设置

环境变量查看:printenv、env或者echo命令来查看当前系统中定义的所有环境变量

echo $PATH
显示当前用户的所有环境变量
printenv 或 env
查看指定环境变量
echo $PATH 或者 echo $HOME 或者 echo $USER
使用set查看所有本地定义的环境变量

4.2 添加环境变量

  • 添加系统级环境变量(需root权限,针对所有用户,永久生效)

vim /etc/profile
export PATH=“/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH”
source /etc/profile

  • 添加用户级环境变量

在用户的家目录(~)下,当使用 Bash shell 时,系统会自动加载以下文件(如果存在,请注意,这是默认的行为,具体的加载顺序可能会受到系统配置的影响。):
.bash_profile:这是在登录时加载的主要文件。通常用于设置用户的个人环境变量和启动脚本。
.bash_login:如果 .bash_profile 不存在,则会尝试加载此文件。
.profile:如果 .bash_profile 和 .bash_login 都不存在,则会尝试加载此文件。这是一个通用的配置文件,适用于多种类型的 shell。
.bashrc:这是在每次打开新的终端窗口时加载的文件。它包含了用户定义的别名、函数、自定义环境变量等。
通常情况下,用户可以在.bash_profile、.bash_login 或 .profile文件中设置一些全局的环境变量和启动脚本,而在.bashrc 文件中设置一些特定于 Bash 的配置和个人设置。

在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
例如:编辑guok用户目录(/home/guok)下的.bash_profile

vi /home/guok/.bash.profile 或
v ~/.bash.profile
添加如下内容:
export CLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

  • 添加终端临时环境
    直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
    在shell的命令行下直接使用[export 变量名=变量值] 定义变量,
    该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,
    shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH

4.3 删除环境变量

  • 永久删除环境变量
    编辑配置文件:要永久删除环境变量,您需要编辑适当的配置文件,并将其从文件中删除。具体的配置文件取决于您要删除的是系统环境变量还是用户环境变量。
    如果要删除系统环境变量,需要使用root用户权限编辑/etc/environment文件。在该文件中,找到并删除相应的环境变量。
    如果要删除用户环境变量,需要编辑/.bashrc、/.bash_profile或~/.profile文件(根据您使用的Shell)并删除相应的环境变量。
    例如,如果要删除名为VAR的环境变量,可以使用文本编辑器打开适当的文件,找到VAR并将其删除。保存文件后,系统会在下次启动时生效。
    注意:修改这些配置文件可能需要root权限或适当的用户权限(系统级配置文件要root权限、用户级不需要)。

  • unset删除指定的环境变量
    set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:

export TEST=“Test…” #增加一个环境变量TEST
env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test…
unset TEST #删除环境变量TES
env|grep TEST #此命令没有输出,证明环境变量TEST已经删除

4.4 修改环境变量配置文件后生效

  • 针对修改的配置文件执行:source ~/.bashrc 当前终端和新连接的终端自动生效。
  • 针对已连接的终端:执行上面命令 或者 exec bash

5 头文件 库文件 bin文件环境变量设置方法

Ubuntu 头文件和库文件添加环境变量

  • 在PATH中找到可执行文件程序的路径。

export PATH =$PATH:$HOME/bin

  • gcc找到头文件的路径

C_INCLUDE_PATH=/usr/include/libxml2:/MyLib
export C_INCLUDE_PATH

  • g++找到头文件的路径

CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib
export CPLUS_INCLUDE_PATH

  • 找到动态链接库的路径

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib
export LD_LIBRARY_PATH

  • 找到静态库的路径

LIBRARY_PATH=$LIBRARY_PATH:/MyLib
export LIBRARY_PATH

6 解压文件不是所有者

  • 利用chown改变所有者(参数-R用来递归实现更改所有子文件和子目录的权限)
    修改所有者为users用户组的username用户:

chown -R username:users 文件名
username:users —— users用户组的username,用户组参数不是必须有。

例如sudo su后,在root用户下执行: chown -R liuchen:users 路径+文件名。 这样就把文件的所有者改成了 liuchen)

  • 利用chmod修改权限
    对Document/目录下的所有子文件与子目录执行相同的权限变更:

chmod -R 777 文件名
(chmod +x 文件名 >>> 使此文件变为可执行文件!)

7 Ubuntu Restricted Extras

一条命令在 Ubuntu 中安装所有基本的媒体编解码器

ubuntu-restricted-extras 是一个包含各种基本软件,如 Flash 插件、unrar、gstreamer、mp4、Ubuntu 中的 Chromium 浏览器的编解码器等的软件包
由于这些软件不是开源软件,并且其中一些涉及软件专利,因此 Ubuntu 默认情况下不会安装它们。你必须使用 multiverse 仓库,它是 Ubuntu 专门为用户提供非开源软件而创建的仓库
由于 ubuntu-restrcited-extras 软件包在 multiverse 仓库中,因此你应验证系统上已启用 multiverse 仓库:sudo add-apt-repository multiverse
然后你可以使用以下命令安装:sudo apt install ubuntu-restricted-extras
看到 EULA(最终用户许可协议)按 Tab 键,它将高亮选项。当高亮在正确的选项上,按下回车确认你的选择。安装完成后,由于新安装的媒体编解码器,你应该可以播放 MP3 和其他媒体格式了。

8 Ubuntu侧边栏添加Smartgit图标

ubuntu系统中侧边栏的程序一般放在/usr/share/applications或者~/.local/share/applications文件夹中
将smartgit的程序进行解压(我放到了~/Apps文件夹中),然后在~/.local/share/applications文件夹中添加一个新的smartgit.desktop文件,添加如下内容:

[Desktop Entry]
Name=SmartGit
Comment=Smart Git Client
Exec=/home/allen/Apps/smartgit/bin/smartgit.sh #smartgit的启动脚本
StartupNotify=true
Terminal=false
Type=Application
Icon=/home/allen/Apps/smartgit/bin/smartgit-256.png #smartgit的程序图标

经过以上步骤之后就可以在ubuntu的搜索栏中搜索smartgit程序了,启动之后右键lock to launcher添加到侧边栏中.
其他程序的添加只需要修改一下desktop文件即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周陽讀書

周陽也想繼往聖之絕學呀~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值