Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

LaTex——编译问题

VSCode环境中引用出错问题排查

  • 参考链接:latex报错:Citation ‘×××ב on page x undefined.与众不同的解决方案

  • 除了排查自身代码问题 && 修改配置文件外,还可以使用命令行重新编译PDF文件,具体流程如下

    • 切换到xxx.tex文件所在目录下

      1
      2
      3
      4
      xelatex xxx
      bibtex xxx
      xelatex xxx
      xelatex xxx
    • 执行以上语句后PDF引用恢复正常

Linux——Logstash时区问题

有时候Linux系统重启或者有修改后会造成时区被修改,默认一般是UTC时间,有时候会变成CST时间
在阿里云主机扩展后出现过一次,造成了Logstash 使用JDBC连接数据库时读取报错:大概是JavaLang::IllegalArgumentException: HOUR_OF_DAY: 2 -> 3这样的错


解决方案:

改系统时区

  • 将系统的时区改回去,然后重启
    1
    2
    3
    4
    # 修改时区命令:	
    timedatectl set-timezone UTC
    # 重启命令:
    shutdown -r now

重启后继续运行之前出错的程序,成功解决问题

链接时加参数

  • 在连接mysql-connector时加上一个时区参数

  • 以logstash为例子

    • 在mysql.config中修改连接语句原来为(连接到名称为”docker“的数据库,但是没有指定参数)

      1
      jdbc:mysql://localhost:3306/docker
    • 修改后连接语句为(制定参数为UTC)

      1
      jdbc:mysql://localhost:3306/docker?serverTimezone=UTC

注意,这种方式修改后我的系统时区可为任意的,比如我的系统时区就一直为CST

替换JDBC版本【未测试】

  • 网上有博客指出可以通过换jdbc connector的版本解决问题

Linux——alias功能使用


整体说明

  • 命令别名(alias)是为复杂命令或命令组合创建的“快捷方式”
  • 可以减少重复输入,提高效率

创建别名

  • 别名创建命令

    1
    alias 别名="原命令"
  • 常用别名举例:

    1
    2
    # 创建 ll 别名,替代 ls -l
    alias ll='ls -l'
  • 创建别名后,直接使用别名即可实现与原命令同等效果

    1
    2
    # 输入 ll,相当于执行 ls -l
    ll

别名管理

  • 别名管理命令:
    1
    2
    3
    4
    5
    6
    7
    8
    # 查看所有别名
    alias

    # 查看某个别名的定义
    alias ll

    # 删除 ll 别名
    unalias ll

别名永久生效

  • 以上命令创建的别名是临时的,重新启动终端后会消失,为了长久保留别名,可通过修改配置文件实现

  • 编辑配置文件 :

    1
    2
    3
    4
    5
    # 用 vim 打开配置文件(适用于 bash 终端)
    vim ~/.bashrc

    # 如果你使用的是 zsh 终端,则打开
    vim ~/.zshrc
  • 添加别名定义(在文件末尾添加类似以下内容:):

    1
    2
    3
    4
    5
    6
    7
    8
    # 常用文件列表别名
    alias ll='ls -l'
    alias la='ls -a'
    alias lla='ls -la'

    # 系统管理别名
    alias update='sudo apt update && sudo apt upgrade -y'
    alias reboot='sudo reboot'

附录:常见通用实用别名实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安全删除(删除前询问确认)
alias rm='rm -i'

# 带颜色的 grep
alias grep='grep --color=auto'

# 快速回到上级目录
alias ..='cd ..'

# 查看网络连接
alias net='netstat -tulpn'

# 查看磁盘使用情况
alias df='df -h'

# ll 替代 ls -l
alias ll='ls -l'

附录:其他注意点

  • 单引号 ':不解析变量,适合直接替换命令

  • 双引号 ":会解析变量,适合需要动态内容的别名(不常用)

  • 别名优先级高于原始命令,若要执行原始命令,可使用 \[原命令名](比如 \ls)

    1
    \命令名  # 例如:\ls
  • 不要使用系统已有命令作为别名,否则会覆盖原命令

Linux——exec命令的使用


整体说明

  • Linux Shell 脚本中,exec 命令用于在当前 shell 进程中执行指定的命令,而不是启动一个新的子进程

  • exec 常常用来替换当前 shell 进程,或者重定向文件描述符

  • exec 基本语法如下:

    1
    exec 命令 [参数...]
    • 执行后,当前 shell 进程会被新命令替换,原 shell 脚本后续的内容将不会再执行

exec 替换进程用法

  • 假如在脚本中写:

    1
    2
    3
    4
    #!/bin/bash
    echo "Before exec"
    exec ls -l
    echo "After exec"
    • 输出只会有 “Before exec” 和 ls -l 的结果,而不会有 “After exec”,因为 exec ls -l 之后,脚本所在的 shell 进程已经被 ls 取代,后续语句不会执行

exec 实现文件描述符重定向

  • exec 也常用于重定向输入输出,不会启动新进程,而是改变当前 shell 的文件描述符。例如:

    • 将标准输出重定向到文件:

      1
      2
      exec > output.txt
      echo "This will go to output.txt"
      • 这样,后续所有标准输出都会写入 output.txt 文件
    • 将标准输入重定向为某个文件:

      1
      2
      3
      exec < input.txt
      read line
      echo $line
      • 这样,read 命令会从 input.txt 读取内容
    • 关闭文件描述符:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 打开一个文件用于读取,赋予文件描述符3
      exec 3< myfile.txt

      # 通过文件描述符3读取一行
      read line <&3
      echo "读取到的内容: $line"

      # 关闭文件描述符3
      exec 3<&-
      • 这表示关闭文件描述符 3

Linux——find命令详解

本文介绍Linux下find命令的使用方法

  • 参考博客: https://www.cnblogs.com/weijiangbao/p/7653588.html

常用方法说明

  • find命令用于在给定目录下查找符合给定条件的文件

  • 用法:

    1
    Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
  • 常用的用法:

    1
    2
    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
    find 目标目录 选项 查找完成后执行的操作
  • 实例1:

    1
    find . -name "*a*.py" -exec cat {} \; | grep test
    • 解析:将当前文件夹下的名字能匹配*a*.py的文件找出来,并输出其中含有”test”的行
      • .对应path参数,代表搜索路径为当前文件夹, 默认会递归搜索
      • -name "*a*.py"对应选项,指出找文件的筛选条件
      • -exec cat {} \; | grep test指明找到文件后需要执行的操作,{}用于表示前面被固定下来的接受参数, 由于{}后面必须使用分号;,而命令行中分号需要转义字符转义,所以就是\;
        • 注意: 这里{} \;中间必须空一格,且{} \;中间不能加任何字符或命令等
  • 示例2:

    1
    find . -maxdepth 1 -name "test*.py" -exec cat {} \;| grep test
    • 在前面的基础上指定只从第一层目录中查找,不递归

参数和选项详解

1
find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

参数

  • -print: find命令将匹配的文件输出到标准输出
  • -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和;之间的空格
  • -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行

选项

  • -name: 按照文件名查找文件
  • -perm: 按照文件权限来查找文件
  • -prune: 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略
  • -user: 按照文件属主来查找文件
  • -group: 按照文件所属的组来查找文件
  • -mtime -n +n: 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项
  • -nogroup: 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
  • -nouser: 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
  • -newer file1 ! file2: 查找更改时间比文件file1新但比文件file2旧的文件
  • -type: 查找某一类型的文件
    • 默认是查找所有类型
参数 文件类型
d 目录
c 字符设备文件
p 管道文件
f 普通文件
l 符号链接文件
b 块设备文件

Python-Jupyter——将ipynb文件转成py文件

jupyter nbconvert --to script test.ipynb 

Anaconda——Python环境和pip包安装方式

文本适用于anaconda,miniforge等包含conda的所有软件

conda对Python虚拟环境的管理方式

  • 虚拟环境均存储在./envs目录下,按照虚拟环境名称命名
  • 在不同虚拟环境下,conda会切换到当前envs目录,从而实现访问不同Python和pip

pip包的管理方式

  • pip对包默认存储在当前虚拟环境下的lib目录下与Python版本有关,比如,lib/python3.10/site-package
  • 具体包的安装路径可使用pip show [package_name]判断
  • pip是一个脚本文件,可以使用vim打开,第一行指定了当前pip对应的Python脚本位置,需要设置准确,第一行必须与当前环境下执行which python的结果一致,如果有问题可以修改到指定目录(特别是手动迁移conda管理的虚拟环境时)

如何迁移Python虚拟环境?

  • 迁移虚拟环境只需要copy envs文件下下的指定环境目录即可,迁移后记得修改pip/pip3文件对应的第一行路径

Anaconda——安装和常用命令

Anaconda安装和使用


安装

  • Anaconda官网下载安装即可

使用

管理conda版本

  • 检查conda版本

    1
    conda --version
  • 升级版本

    1
    conda update conda

管理环境

  • 创建环境

    1
    2
    3
    conda create --name your_env_name python=3.6
    # <==>
    conda create -n your_env_name python=3.6
  • 激活环境

    1
    source activate your_env_name # On Windows, remove the word 'source'
  • 列出所有环境

    1
    2
    3
    4
    5
    conda info --envs 
    # or
    conda info -e
    # or
    conda env list
  • 退出当前环境

    1
    source deactivate # On Windows, remove the word 'source'
  • 复制一个环境

    1
    conda create -n new_env_name --clone old_env_name
  • 删除环境

    1
    conda remove -n your_env_name

管理包

  • 查看已经安装的包

    1
    conda list
  • 向指定环境中安装包

    1
    conda install --name your_env_name package
    • 如果没有--name参数,package默认安装到当前环境中
    • tips: 一般来说当需要在同一个环境下面安装的包比较多时,我们会先激活想要操作的环境,然后直接不使用 --name参数安装

Anaconda——conda命令不能执行

出现包导入异常的错误

  • 错误如下

ImportError: No module named conda.cli

  • 解决方案:重装anaconda

    • 官网上下载anaconda的安装包,注意Python2,和Python3不能错
    • 执行时加上-u参数即可
      1
      bash Anaconda2-2018.12-Linux-x86_64.sh -u
  • 说明:

    • 上面的修复方案不会影响其他第三方包
    • 其他conda环境相关的问题也可以通过重装解决

Anaconda——conda和pip管理包的区别

conda和pip对包的管理有什么区别?

  • conda 使得我们可以在conda环境中安装任何语言的包(包括C语言和Python)
  • pip 使得我们可以在任何环境中安装Python包
管理工具 conda pip
使用环境 conda环境 任意平台
包语言 任意语言 Python语言

管理包命令

  • conda

    • 安装包

      1
      2
      # 从虚拟环境 your_env_name 中安装 packge_name包
      conda install -n your_env_name package_name
    • 删除包

      1
      2
      # 在虚拟环境 your_env_name 中删除 package_name包
      conda remove -n your_env_name package_name
  • pip

    • 安装包

      1
      2
      # 安装包到默认路径
      pip install package_name
    • 卸载包

      1
      2
      # 删除包
      pip uninstall package_name
    • 查看已经安装的包

      1
      2
      3
      4
      # 列出所有包
      pip list
      # 查看指定包的详细信息
      pip show --files package_name
    • 升级包

      1
      pip install --upgrade package_name

关于conda 命令更多详情参考Anaconda——安装和常用命令

1…63646566
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

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