Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Ubuntu——远程登录Ubuntu后只有一个$符号

对新添加的用户,我们远程登录Ubuntu后有时候只有一个$符号


问题描述

  • 对新添加的用户,远程登录Ubuntu后有时候只有一个$符号

问题原因

  • Ubuntu为新用户默认启动的是sh而不是bash
  • sh的命令比较少,只有一些ls, pwd这样的命令

解决方案

不修改源文件

  • 每次登录时先使用bash命令运行bash程序
  • 之后的指令都会是bash解释执行
  • 在bash中使用sh可会退到sh命令行
  • 该方法的缺陷在于多次执行bash和sh后,会造成进程嵌套多次,这样exit指令退出时需要多次

修改源文件

  • 标记文件/etc/passwd

    1
    sudo vi /etc/passwd
  • 找到用户对应的启动命令并将sh(可能没有sh,直接是空白)修改为bash

    1
    2
    3
    4
    # 修改前
    jiahong:x:1001:1001::/home/jiahong:
    # 修改后
    jiahong:x:1001:1001::/home/jiahong:/bin/bash

Markdown——基本语法

Markdown基本语法


上下标

<sup>上标</sup>

文字上标

<sub>下标</sub>

文字下标


删除线

~~删除线~~

删除线


引用

> 一级引用
>> 二级引用
>>> 三级引用

一级引用

二级引用

三级引用


列表

* 一级列表
    * 二级列表
    - 二级列表
    + 二级列表
* 一级列表
- 一级列表
+ 一级列表
  • 一级列表
    • 二级列表
    • 二级列表
    • 二级列表
  • 一级列表
  • 一级列表
  • 一级列表

    1. 有序列表
      • 无序列表
      • 无序列表
    2. 有序列表
  1. 有序列表
    • 无序列表
    • 无序列表
  2. 有序列表

分割线

分割线
***
---

分割线




链接

[链接](https://joezjh.github.io/ "鼠标放到链接上显示此提示")

链接


图片

![图片标题](图片链接 "鼠标放到图片上显示此提示")

图片标题


可设置大小的图片

<img src="/Notes/xxx/xxx/xxx.png" title="" height="80%" width="80%">

表格

| 左对齐标题 | 右对齐标题 | 居中对齐标题 |
| :------| ------: | :------: |
| 短文本 | 中等文本 | 稍微长一点的文本 |
| 稍微长一点的文本 | 短文本 | 中等文本 |
左对齐标题 右对齐标题 居中对齐标题
短文本 中等文本 稍微长一点的文本
稍微长一点的文本 短文本 中等文本

折叠

<details>
    <summary><span style="color:blue">>>>点击展开折叠内容...<span></summary>
    这里是折叠内容
</details>
>>>点击展开折叠内容...

Hexo——相关问题汇总

本文记录Hexo使用过程中可能遇到的问题


Hexo生成的html文件是空的

  • 表现为部署到云端后,显示为空白页面

问题起因

  • 由于node版本问题导致的,可能是node版本太新了

  • 重新安装node为旧版本即可,本文使用的暂时是node 12版本

  • 安装命令(注意:直接使用brew install node@12可能无法安装成功,会出现找不到指定版本的错误,12版本太老了,过期了):

    1
    2
    3
    brew install nvm ## 安装nvm后按照提示将相应启动脚本配置到~/.zshrc中
    nvm install 12.14.0
    nvm use 12.14.0
  • nvm use 只是临时切换 node 版本,只适用于当前 terminal,如果打开新的 terminal,node 可能还是之前的旧版本。如果想要永久切换的话,可使用如下命令(实际上,本地切换到12.14.0后重启terminal也是该版本,未发现其他问题):

    1
    nvm alias default 12.14.0

符号有问题导致编译错误

  • 问题现象:编译 .md 文档时出现错误 Unhandled rejection Nunjucks Error: [Line xx, Column xx] expected variable end

  • 问题起因:Nunjucks 模板引擎可能会将 LaTeX 表达式中的某些符号(如 {, }, _, \ 等)误认为是模板语法的一部分,从而导致解析错误

  • 修复方式:

    • 方式一:不要写容易冲突的字符,一般来说常见的是 这两个,可以在中间加上空格(这不会改变latex内容),切换为 { {和} }

    • 方式二:使用

      1
      	

      $$
      rgt_{i \cdot }(\boldsymbol{v}) = \mathbb{E}_{v \sim F}\left[\max_{{v’}_{i \cdot } \in V_{i \cdot }} u_{i \cdot }(v_{i \cdot }; ({v’}_{i \cdot }, \boldsymbol{v}_{-i \cdot })) - u_{i \cdot }(v_{i \cdot }; \boldsymbol{v})\right].
      $$

      ```

      • 注:这种方式下,错误会消失,但是latex公式无法被渲染
  • 注:在使用 jinja2 模板代码时,常常会出现问题,建议统一使用类似 {% set a=10 %} 的方式解决

Hexo——不显示post时间


方案

  • 不同主题不同

next主题

  • 去除正文页面的post时间:

    • 在./themes/next/layout/_macro/post.swig中找到”post-time”相关的tag,然后注释掉该tag的所有内容(注释方式为``)
  • 去除归档中每个文档的时间

    • 在./themes/next/layout/_macro/post-collapse.swig中找到”post-time”相关的tag,然后修改该tag中的内容
      1
      2
      {# {{ date(post.date, 'MM-DD') }} #}
      {{ date(post.date, ' ') }}
  • 去除归档中的年份

    • 在./themes/next/layout/archive.swig中找到”archive-year”相关的tag,然后修改该tag中的内容,把关键信息注释掉
      1
      2


Python-Jupyter——Jupyter使用笔记


pip 命令与执行环境不同

  • 原因是 pip 执行的是系统的命令行,而系统的命令行默认 shell 环境与 python 环境不同,可以通过下面的代码确认原因:

    1
    2
    3
    4
    5
    6
    # 查看内核的 Python 路径(应正确)
    import sys
    print(sys.executable) # 输出:.conda/envs/xxx_env/bin/python

    # 查看 shell 中的 pip 路径(可能错误)
    !which pip # Linux/Mac
    • 若两者输出不同,则说明是 shell 环境问题
  • 解法一:指定 python 来执行对应的 pip

    1
    2
    import sys
    !{sys.executable} -m pip list
  • 解法二:修改 ~/.bashrc 文件,并重启 Jupyter

    • 待尝试

Ubuntu-Jupyter——修改默认路径

Ubuntu下修改Jupyter的默认路径

  • 经测试,按照本文的方法修改后不一定生效
  • 一个比较优雅的方法是每次进入指定路径,从该路径启动jupyter notebook
    • 这种方法可确保Jupyter根目录为指定目录

查看配置文件

  • 首先查看是已经生成Jupyter的配置文件,默认新装的Jupyter根目录为~/, 是没有配置文件的
    1
    2
    # 查看配置文件命令
    cat ~/.jupyter/jupyter_notebook_config.py

生成配置文件

  • 如果没有配置文件,则首先需要生成新的配置文件

    1
    2
    # 生成配置文件命令
    jupyter notebook --generate-config
    • root用户执行时可能需要按照要求加上参数

编辑配置文件有两种方式

相对路径方式

打开配置文件修改相对目录c.NotebookApp.default_url,这里默认为/tree, 修改成自己想要的地址即可

1
2
3
# /tree表示当前路径pwd, 如下则表示当前终端路径下的/Coding路径
c.NotebookApp.default_url = '/tree/Coding'
# 这种情况以后打开Jupyter时都需要到指定的文件目录下才行,适用于多个jupyter路径的情况

一般使用这种情况时建议直接保留相对目录/tree即可,这样可以在启动Jupyter时直接在那个文件目录下启动

绝对路径方式

打开配置文件配置绝对目录c.NotebookApp.notebook_dir

1
2
# 这种情况下无论在哪里打开都是绝对目录 	
c.NotebookApp.notebook_dir = u'/home/jiahong/JupyterWorkspace'

如果两种情况都配置了,默认以第一中情况为主,因为第一个是redirect的
如果两种情况都没配置,默认等价于配置了c.NotebookApp.default_url = '/tree'

Python-Jupyter——安装pip包

安装pip包


在Jupyter环境中安装pip包

  • 为了方便使用,我们一般会选择将Jupyter的内核切换为某个特定的虚拟Python环境,切换后,Jupyter的Python命令会按照新环境运行,但是安装软件包不会默认安装到当前环境(而是base环境)

  • 直接使用下面的命令安装会安装在base环境中

    1
    !pip install xxx
  • 如果想要安装在当前运行环境中,可以使用下面的命令

    1
    2
    import sys
    !{sys.executable} -m pip install xxx

Python——list返回最大的K个元素的索引

自定义的一个有用的Python方法


返回最大的K个值的索引

引用自Stack Overflow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def get_top_k_indexes_of_list(target_list, k, is_max=True, min_value=None):
"""
get the top k indexes of elements in list
Example:
Problem: I have a list say a = [5,3,1,4,10],
and I need to get a index of top two values of the list viz 5 and 10.
Is there a one-liner that python offers for such a case?
Usage: get_top_k_indexes_of_list(target_list=a, k=2, is_max=True)
link: https://stackoverflow.com/questions/13070461/get-index-of-the-top-n-values-of-a-list-in-python
:param target_list: target list
:param k: the number of indexes
:param is_max: True means max else False means min
:param min_value: if min_value is not None
filter the indexes whose value less than or equals to min_value
:return: a list of indexes
"""
indexes = sorted(range(len(target_list)), key=lambda i: target_list[i], reverse=is_max)[:k]
result = list()
if min_value is not None:
for index in indexes:
if target_list[index] <= min_value:
break
result.append(index)
else:
result = indexes
return result

一次性索引出多个元素

1
2
3
4
5
6
7
8
9
def get_elements_from_list(target_list, indexes):
"""
get elements from target_list by indexes
:param target_list: target list
:param indexes: a list of indexes
:return: a list of elements
"""
elements = [target_list[i] for i in indexes]
return elements

Python-Jupyter——配置跨机器使用

Jupyter notebook默认是不能跨机器使用的,只能使用localhost访问,本文讲述了让其能跨机器访问的方法


Jupyter notebook跨机器使用配置说明

生成配置文件

1
jupyter notebook --generate-config
* 如果是`root`用户可能会存在问题,按照提示操作即可

生成密码

1
jupyter notebook password
* 按照提示输入密码,这就是以后在远程访问时使用的密码
* 生成的秘钥在`~/.jupyter/jupyter_notebook_config.json`下

修改配置文件

1
vim  jupyter_notebook_config.py
  • 需要修改以下行
    1
    2
    3
    4
    c.NotebookApp.ip='*' # 这里可以写成本机的公网ip,或者是局域网ip
    c.NotebookApp.password = u'sha1:***' # 这里需要复制修改成刚才生成的密文
    c.NotebookApp.open_browser = False # 启动Jupyter时是否自动打开Web页面
    c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口

Ubuntu-Jupyter——Python2与Python3共存

在Jupyter中同时配置Python 2和Python 3环境


准备工作

  • 检查对应的虚拟环境(Python2和Python3)是否都已经安装成功,如没有的话请安装相应版本号,下面是管理包时常用的一些命令

    • 检查版本号

      1
      conda env list # check all python versions
    • 创建虚拟环境

      1
      conda create -n Python3 Python=3.6 # Python3可以是自己自定义的名字
    • 激活虚拟环境

      1
      source activate Python3 # Windows中不需要`source`
    • 停止虚拟环境

      1
      deactivate Python3
    • 从硬盘删除虚拟环境

      1
      conda remove -n Python3 --all

Jupyter on Python 3

还需要配置Python2

  • 检查Python2对应的pip版本大于等于9.0

    1
    python2 -m pip --version
    • 注意,如果python2指的是我们想设置的版本,如果电脑上对应多个版本的Python2,请选择对应的那个,后面的pip会根据Python2版本自动被确定下来,比如可使用/home/jiahong/anaconda2/envs/Python3.6/python绝对路径来指定确定的Python版本
    • 这里的python2 -m是用于指定pip版本的修饰,用于指明pip的版本,所以上一步中的路径指定也可以直接直接pip的绝对路径
  • 安装方法1

    1
    2
    python2 -m pip install ipykernel
    python2 -m ipykernel install --user
    • 这种安装方法是可以随意重复的,不会造成重复安装,所以可以直接将Python 2和Python 3两个版本都安装一遍
  • 安装方法2

    1
    2
    3
    conda create -n ipykernel_py2 python=2 ipykernel
    source activate ipykernel_py2 # On Windows, remove the word 'source'
    python -m ipykernel install --user

Jupyter on Python 2

  • 将上面的Python2全都指定为Python3即可
    • 比如
      1
      2
      python3 -m pip install ipykernel
      python3 -m ipykernel install --user
1…596061…64
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

631 posts
53 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4