Awesomes-Process

本篇涉及一些常用操作及查询手册,汇总在这里 ,不断补充

MacDetails

Softmare

用途 软件
编辑器+IDE vscode,Typora,Subline3,Xmind
终端 ITem2,oh-my-zsh
办公文档 MS-onedirve, onenote, OS-keynote,pages,numbers
截图,快捷键 snipaste,cheatsheet
硬盘 paragon for Mac 15
公式截图转latex mathpix snipping tool
video/music Inna,MPV
网络调试 postman
温度控制 TempMonitor
Vim配置 https://github.com/amix/vimrc
Homebrew https://brew.sh/
修改电脑名(侧边栏) sudo scutil –set ComputerName xxx
修改终端显示主机名 sudo scutil –set HostName xxx
修改本地主机名 xxx.local sudo scutil –set LocalHostName xxx

BugFix

  1. Mac无法播放音乐或视频

    1
    sudo killall coreaudiod
  2. 修改名称

    • 电脑名,finder侧边栏显示的名称 sudo scutil –set ComputerName xxx

Jupyter服务器布置

RT,由于服务器端是不提供图形界面的,因此在进行开发时候,一般采用的是本地开发调试,通过之后再进行服务器端的deploy,对于机器学习来说,由于本人使用的Mac电脑,硬件配置是在堪忧,而服务器端用的是4*1080Ti,如何实现在服务器端启动jupyter服务,并且在本地进行文件编写及测试呢?

  1. 登录远程服务器,一般的使用的是ssh的方式

    1
    ssh usrname@server_url

    提示输入密码登录即可

  2. 确保在服务器端安装了jupyter notebook 或者jupyterlab,可以先进入个人账户名下的虚拟环境并激活,接下来进行jupyter的设置

    1
    2
    3
    4
    5
    6
    sudo pip install pyzmq
    sudo pip install tornado
    sudo pip install jinja2
    sudo pip install jsonschema
    sudo pip install jupyter
    sudo pip install jupyterlab
  3. 生成配置文件

    1
    jupyter notebook --generate-config

    生成的配置文件保地址为

    1
    ~/.jupyter/jupyter_notebook_config.py
  4. 生成本地登录密码,在服务器端打开ipython

    1
    2
    3
    4
    5
    6
    In [1]: from IPython.lib import passwd
    In [2]: passwd()
    # 这里输入的密码为本地访问服务器jupyter是需要输入的密码
    Enter password:
    Verify password:
    Out[2]: 'sha1:0e422dfccef2:84cfbcbb3ef95872fb8e23be3999c123f862d856'
  5. 保存并复制生成的密码sha1:....,修改第三步生成的配置文件

    1
    vim ~/.jupyter/jupyter_notebook_config.py

    会看到该文件大部分为注释,随便选个位置复制粘贴如下内容并保存配置文件

    1
    2
    3
    4
    5
    c.NotebookApp.ip='*'
    c.NotebookApp.password = u'sha1:ce...刚才复制的那个密文'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port =9999 #随便指定一个端口,为本地访问的端口
    c.IPKernelApp.pylab = 'inline'
  6. 服务器端启动jupyter

    下面这两个启动一个就可以,jupyter labjupyter notebook 的高级版本

    1
    2
    $ jupyter notebook  # 启动notebook
    $ jupyter lab # 启动jupyterlab
  7. 本地访问服务器端启动的jupyter

    • 在本地浏览器输入如下地址server_url:port,其中server_url为服务器的url地址,port为在第五步设置的端口

    • 此时会弹出输入密码窗口,输入第四步设置的密码即可实现登录

PyPI配置

配置源

python中一般使用pip或者conda进行package安装,在国内推荐使用镜像加速的功能,

  • linux && Mac

    修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url至tuna,内容如下:

1
2
3
4
5
[global]
# 清华镜像
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里镜像
index-url = https://mirrors.aliyun.com/pypi/simple

设置一个镜像即可,推荐使用阿里镜像

  • Windows

    直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下

1
2
3
4
5
[global]
# 清华镜像
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里镜像
index-url = https://mirrors.aliyun.com/pypi/simple

requirement.txt相关

  • 使用 pip freeze

    1
    2
    # 生成 requirements.txt
    pip freeze
  • pipreqs

    相关连接https://github.com/bndr/pipreqs

    1
    2
    3
    4
    # 安装
    pip install pipreqs
    # 生成requirements.txt
    pipreqs /home/project/location
  • pigar

    相关链接https://github.com/damnever/pigar

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Generate requirements.txt for current directory.
    $ pigar

    # Generate requirements for given directory in given file.
    $ pigar -p ../dev-requirements.txt -P ../

    # Specify a requirements file.
    $ pigar -c ./requirements.txt

    # Or, you can let pigar search for *requirements.txt in the current directory
    # level by itself. If not found, pigar will generate requirements.txt
    # for the current project, then check for the latest versions.
    $ pigar -c
  • 安装requirements

    1
    pip install -r requirements.txt

虚拟环境

CONDA

  • 下载anaconda

  • 在.zshrc中加入一行

    1
    PATH="$HOME/anaconda3/bin:$PATH"
  • source .zshrc 生效

  • 命令行启用conda

  • 创建环境,conda create -n env_name python=2.7

  • 首次启用会报错,使用source activate env_name的方法

  • 之后可以使用conda的方式激活,conda activate env_name

  • 如果要更换环境内的python版本,使用conda install python=xx

Conda配置源

使用conda默认package下载路径一般下载较慢,在conda中配置源,类似于pip配置方法,提升下载速度

文件~/.condarc

在文件中添加

1
2
3
4
5
6
7
8
auto_activate_base: false
channels:
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
- defaults
show_channel_urls: true

第一行表示是否默认启动base环境,默认为true,此处更改为false

第二行表示源的url,此处使用的中科大和清华源

第三行表示是否展示package来源于那个url中

conda安装本地文件

1
conda install --use-local your-pkg-name

Conda添加系统路径

使用conda管理环境,但是在系统中存在很多公共包,外网无法安装,这时候需要在conda的虚拟环境中添加环境路径

解决方法:

参考链接:https://python3-cookbook.readthedocs.io/zh_CN/latest/c10/p09_add_directories_to_sys_path.html

  • 首先查看默认python的环境,找到默认python中的环境

  • 在conda环境下添加路径文件

    • 在环境的’lib/python2.7/site-packages/‘路径下创建’add.pth’文件

    • 在’add.pth’内部填写python中的路径

      1
      2
      3
      4
      5
      6
      7
      8
      /usr/lib/python2.7/lib-tk
      /usr/lib/python2.7/lib-old
      /usr/lib/python2.7/lib-dynload
      /usr/local/lib/python2.7/dist-packages
      /data00/tiger/ss_lib/python_package/lib/python2.7/site-packages
      /usr/lib/python2.7/dist-packages
      /usr/lib/pymodules/python2.7
      /opt/tiger/ss_lib/python_package/lib/python2.7/site-packages
    • 之后再次查看conda环境下的路径,可以看到已经将’pth’文件内的路径加入到了环境路径内

virtualenv

want coding
linux install sudo apt-get install python-virtualenv
virtualenv如果继承全局Python的库 virtualenv –system-site-packages venv
默认不使用全局Python安装的库 virtualenv venv
激活虚拟环境 source venv/bin/activate
关闭虚拟环境 deactivate

常用命令

归纳常用命令如下

Description Command
install latest version pip install xxx
Install Specified version pip install xxx==version
show package list pip list
show specified package details pip show numpy
update all packages pip freeze –local \ | grep -v ‘^-e’ \cut -d = -f 1 \xargs pip install -U
update specified package pip install -U numpy
Generate requirements.txt pip freeze
Install requirements.txt pip install -r requirements.txt

Linux常用命令

查找文件夹下的指定文件名文件

1
find ./ -name "*.png"

如上是查找文件名后缀为png的文件

查看文件夹的文件数量

  • 统计当前目录下文件的个数(不包括目录)
1
ls -l | grep "^-" | wc -l
  • 统计当前目录下文件的个数(包括子目录)
1
ls -lR| grep "^-" | wc -l
  • 查看某目录下文件夹(目录)的个数(包括子目录)
1
ls -lR | grep "^d" | wc -l

用户相关

使用root权限添加用户

  • root@host 登陆

  • 添加用户

  • useradd -d /data00/home/xxx -m -s /bin/bash xxx
    
    1
    2
    3
    4
    5
    6
    7

    添加用户,并指定用户bash

    - 为用户设置登陆密码

    ```bash
    passwd xxx
  • 如果在新建用户的时候没有指定shell,可以使用命令:

    1
    usermod -s /bin/bash  user0;其中user0是用户名,来为用户指定shell;

    2、可以使用命令将用户添加到sudo用户组:

    1
    usermod -aG sudo  user0;这儿的a参数代表追加 。或者命令 gpasswd  –a  user0  sudo;

删除


#### 过滤删除
1
2
shopt -s extglob
rm -rf !(file1|file2|file3)

过滤删除文件,!表示不要删除括号内文件

快速删除大文件

如果目录中文件太多,使用常用的rm -rf进行删除,会耗费大量时间,推荐使用

1
2
3
4
5
# 先创建一个空目录
# 注意:最好是用和被清空目录的所有者(用户)去创建这个空目录,使用的命令会将空目录的权限带过去
mkdir ./empty
# 清除目标目录的文件,不要忘记目录后面的`/`
rsync --delete-before -av /tmp/empty/ /var/log/target/

选项说明

1
2
3
-delete-before 接收者在传输之前进行删除操作
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-v 详细输出模式

rsync快的原因

1
2
rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复遍历很多次;
rsync删除内容时,建立好新的空目录,替换掉老目录,不需要进行大量的遍历操作。

添加环境

1
2
3
4
# 添加当前文件夹到环境中
export PYTHONPATH=$PYTHONPATH:`pwd`
# 如果要添加多个环境
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

如果需要添加到系统默认启动的环境中,可以在home目录下的.bashr.zshrc文件下添加上述内容

解压缩文件

进行文件的解压缩操作

want how to Description
Zip compress zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.
zip -d myfile.zip smart.txt 删除压缩文件中smart.txt文件
zip -m myfile.zip ./rpm_info.txt 向压缩文件中myfile.zip中添加rpm_info.txt文件
unzip -o -d /home/sunny myfile.zip 把myfile.zip文件解压到 /home/sunny/
zip -e yourZipFileName.zip yourSourceFile 创建加密压缩文件-压缩单个文件
zip -e -r yourZipFileName.zip yourSourceFileDir 创建加密压缩文件-压缩文件夹
jar xvf xx.zip unzip无法解压的时候试试这个
tar -zcvf /home/x.tar.gz /x 将文件夹压缩到指定路径
tar tar -zxvf /x.tar.zip -C /home/x 将tar解压到指定目录
  • 如果压缩文件较大或者压缩文件中文件数量较多,使用cpu并发进行解压缩

    1. 安装pigz

      1
      sudo apt install pigz
    2. 打包文件

      1
      tar --use-compress-program=pigz -cvpf package.tgz ./package
    3. 解压文件

      1
      tar --use-compress-program=pigz -xvpf package.tgz -C ./package

查询ip地址

1
2
3
ip addr show
# 或者
hostname -I

使用ip addr show得到下述信息

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
27
28
29
30
31
32
33
34
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:04:08:67 brd ff:ff:ff:ff:ff:ff
inet 10.224.11.207/22 brd 10.224.11.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe04:867/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:0e:68:0f:a7 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
shixiaofeng@n224-011-207:~$
shixiaofeng@n224-011-207:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:04:08:67 brd ff:ff:ff:ff:ff:ff
inet 10.224.11.207/22 brd 10.224.11.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe04:867/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:0e:68:0f:a7 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever

可以看到ip为10.224.11.207端口为22

使用hostname -I得到信息如下

1
10.224.11.207 172.17.0.1

查询系统信息

1
uname -a

查询得到系统的版本,内核信息

1
2
shixiaofeng@n224-011-207:~$ uname -a
Linux n224-011-207 4.9.0-0.bpo.5-amd64 #1 SMP Debian 4.9.65-3+deb9u2~bpo8+13 (2018-05-15) x86_64 GNU/Linux

GPU进程管理

查看GPU当前使用信息

  • 每个10s循环查看信息

    1
    watch -n 10 nvidia-smi
  • 安装pip install gpustat,实时监控

    1
    watch --color -n1 gpustat -cpu 
  • 查看GPU显存占用情况

    1
    sudo fuser -v /dev/nvidia*

kill进程

  • 强制杀死进程
1
kill -9 PID
  • 过滤删除进程 killall
1
killall -9 xxx

这里xxx表示过滤条件,通过给定的xxx作为过滤条件删除进行

1
ps -ef | grep xxx | grep -v grep | awk '{print $2}' | xargs kill -9

和killall差不多,这里的xxx也是进程的过滤条件

Hadoop 常用命令

Reference

https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html

command

Description HowTo
从hdfs拉取文件到本地 hdfs dfs -get hdfs_file local _file
hadoop fs -get hdfs_file local_file
在hdfs上创建文件夹 hdfs dfs -mkdir hdfs_dir
hadoop fs -mkdir hdfs_dir
将本地文件上传Hadoop hdfs dfs -put local_file hdfs_file
上传之前最好将文件打包,文件不怕大,就怕文件碎 hadoop fs -put local_file hdfs_file

SSH配置

GitHub+GitLab

  • 场景

    对于 Git 来说,邮箱是识别用户的唯一手段,所以对于不同的服务商,由于邮箱不同,那么通过邮件名创建的 SSH Key自然是不同的,这时候在不同的服务商之间进行push命令的时候,Git 是不知道使用哪个 SSH Key ,自然导致 push 的失败。场景如下:

    • 在公司团队使用搭建的 Gitlab 服务,提交邮箱$xxx@company.com$
    • 个人 Github 服务,提交邮箱$ xxx@163.com$
    • 有两个Github账户,不同的账户想不通的服务器进行提交
  • 解决方案-gitconfig

    • 首先进行全局配置,在不加特殊说明时,默认使用全局用户名及用户邮箱
    • 该文件路径~/.gitconfig
    1
    2
    # 全局配置,Github仓库中默认使用此配置
    git config --global user.name 'github' && git config --global user.email 'xxx6@163.com'
    • Generate ssh key and upload to github/gitlab

      1
      2
      3
      4
      # 生成默认,Github使用
      ssh-keygen -t rsa -C " xxx@163.com"
      # 生成公钥、密钥的同时指定文件名,Gitlab使用
      ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "xxx@company.com"

      执行命令之后,会在文件夹~/.ssh文件夹下生成id_rsa.pubid_rsa.gitlab.pub两对ssh key文件

      • id_rsa.gitlab.pub 为为要上传到gitlab的密钥文件
      • id_rsa.pub文件为要上传到github的密钥文件
    • 配置config文件

      ~/.ssh目录下,如果不存在config文件,则新建touch ~/.ssh/config 添加内容如下:

      1
      2
      3
      4
      # Host 进行过滤设置,如果仓库的前缀符合gitlab.yc345.tv,均采用~/.ssh/id_rsa.gitlab这个密钥进行验证连接
      Host gitlab.yc345.tv*
      IdentityFile ~/.ssh/id_rsa.gitlab
      User gitlab
    • 测试连接

      • 首先在github和gitlab账户下添加对应的pub密钥

      • 进行测试:github+gitlab

        1
        2
        3
        4
        5
        6
        7
        8
        9
        # 测试github连接
        ssh -T git@github.com
        # 得到输出信息如下
        # Hi xiaofengShi! You've successfully authenticated, but GitHub does not provide shell access.
        #####################
        # 测试gitlab连接
        ssh -T git@gitlab.yc345.tv
        # 得到输出信息如下
        # Welcome to GitLab, @shixiaofeng!
    • 使用方法

      • 对于日常个人使用github来说,不需要进行特殊设置,会自动使用全局设置

      • 对于在公司内部来说,由于在config中进行了设置,也不用进行特殊设置,会根据设置的config文件,对于gitlab.yc345.tv*形式的仓库使用对应设置的密钥连接

      • 在本地新建要上传到gitlab的项目,在创建之后要在仓库目录中进行local设置,方法如

        1
        2
        # 团队项目配置,每次新创建一个项目,需要执行下
        git config --local user.name 'gitlab' && git config --local user.email 'xiaofeng@company'

Github+Github

  • 场景:

    一台电脑多人使用,这时候需要进行多个ssh key的管理,方法与github+gitlab相同

  • 首先同样进行全局设置,如果没有特殊声明,就会使用全局设置

    1
    git config --global user.name 'github' && git config --global user.email 'sxf1052566766@163.com' 
  • 生成ssh key

    使用不同的邮箱生成密钥文件名

  • 配置config文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 该配置用于用户xiaofeng
    # Host 服务器别名,这个别名以后在clone、pull、push时替代具体的IP或域名
    Host xiaofeng
    # HostName 服务器ip地址或机器名
    HostName github.com
    # User连接服务器的用户名
    User git
    # IdentityFile 密匙文件的具体路径
    IdentityFile ~/.ssh/id_rsa


    # 该配置用于用户icey
    # Host
    Host icey
    # HostName 服务器ip地址或机器名
    HostName github.com
    # User连接服务器的用户名
    User git
    # IdentityFile 密匙文件的具体路径
    IdentityFile ~/.ssh/id_rsa_icey
  • 测试

    1
    2
    3
    4
    # 测试用户xiaofeng
    ssh -T git@xiaofeng
    # 测试用户icey
    ssh -T git@icey
  • 使用

    • clone

      假设仓库ssh为git@github.com:xiaofengShi/CV-detection.git

      在进行clone时要使用 git clone git@xiaofeng:xiaofengShi/CV-detection.git

      也就是将原来的guthub.com改成xiaofeng ,会使用xiaofeng这个账户进行仓库的clone

    • pull & push

      1
      2
      3
      git remote add origin git@xiaofeng:mti/xxx.git
      git pull origin master
      git push origin master

gitignore

在项目文件中使用.gitignore对文件是否进行上传过滤,比如一些大的数据文件或者临时文件显然是不希望上传到github上的,编写规则如下

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
## 使用文件扩展名进行过滤
*.pyc
*.tfrecord
*.DS_Store

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

ssh连接服务器

在日常工作中,一般使用ssh的方法对开发机进行配置,配置之后可以实现免密登录

相关链接:https://blog.csdn.net/knight_zhen/article/details/47001449

  • 本地生成密钥对,如果已经存在了,那么就用已经存在的密钥对就可以,保存的路径在~\.ssh

  • 系统中默认使用的密钥是id_rsa,如果不想用默认的密钥,跟上文中配置GitHub+gitlab的方式,在.ssh\config文件中加入

    1
    2
    3
    4
    5
    6
    7
    # 设置服务器地址
    Host crm.abc.com
    # 设置一个用户名
    User xxx
    PreferredAuthentications publickey
    # 如果满足设置的服务器地址,那么让ssh寻找下面的私钥进行配对
    IdentityFile ~/.ssh/id_rsa.abc
  • 上传密钥到服务器,并把公钥的内容添加到服务器端的.ssh/authorized_keys

    1
    2
    3
    scp ~/.ssh/id_rsa.pub user@host_id
    ssh user@host_id
    cat id_rsa.pub >> ~/.ssh/authorized_keys

    依次执行上述命令

  • 设置私钥和公钥访问权限

    • 本地私钥权限

      1
      2
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/id_rsa
    • 服务器端设置公钥权限

      1
      2
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys

GitHub&GitLab

.gitignore

创建仓库的时候推荐先创建文件.gitignore,文件中记录不需要上传到远程仓库的文件或路径,这里记录一个常有的.gitignore模板文件。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Initially taken from Github's Python gitignore file

# vscode
.vscode

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
*.pyc

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

实际上看

删除远程仓库中的文件夹

有时候会误操作,比如在没有写.gitignore之前进行了add和push操做,但是仓库中包含一些很大的文件,比如一些模型的预训练权重,这个时候想要删除已经存在于远程仓库的文件,具体操作方法

  1. git clone xxx 拉取远程仓库到本地
  2. git rm -r xxx 在本地删除想要删除的路径
  3. git commit -m “remove ignore directory”
  4. git push -u origin master 上传本地至远程

经过上述操作,远程仓库会被更新并且删除了你在本地删除的路径。

LINUX+ZSH

在Mac上安装zsh的教程有很多了,在Linux上安装zsh替换默认的bash,服务器上的bash实在是难用

  1. 安装zsh

    1
    sudo apt-get install zsh
  2. 更改系统默认设置

    1
    2
    3
    sudo vim /etc/passwd
    # find you name and change the bash to zsh
    # convert from name:x:2017:2017::/data00/home/name:/bin/bash to name:x:2017:2017::/data00/home/name:/bin/zsh
  3. Install oh-my-zsh

    1
    git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
  4. 更改主题显示样式

    1. 默认的zsh主题是robbyrussell.zsh-theme,
      cd ~/.oh-my-zsh/themes
      这里先备份一个并重命名为my_robbyrussell.zsh-theme

    2. 修改文件my_robbyrussell.zsh-theme第二行为

      1
      PROMPT='${ret_status} %{$fg[cyan]%}%M:[$PWD]%{$reset_color%} $(git_prompt_info)'
      1
      PROMPT='%{$fg_bold[red]%}-> %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}~#:'
    3. 修改~/.zshrc 文件中的theme为”my_robbyrussell”

    4. source ~/.zshrc

  5. 高亮zsh-syntax-highlighting

    1
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
  6. 自动补全 zsh-autosuggestion

    1
    git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

CUDA

install

  1. 安装NVIDIA驱动

    使用nvidia-smi进行测试,如果没有该命令,需要安装,安装链接为https://www.nvidia.com/Download/index.aspx?lang=en-us ,如果已经安装,进入下一步

  2. 安装cuda

    1. 首先要查询想要安装的TensorFlow版本与cuda版本的对应关系,可以在此处查询https://www.tensorflow.org/install/source,另外,补充TensorFlow1.14.0 对应cuda10.0

    2. 确认好版本之后在此处进行下载https://developer.nvidia.com/cuda-toolkit-archive 以cuda10+linux为例,当安装的是debain版本时,选择14.04的版本,因为cuda是向下兼容的,这样可以避免出错,

    3. 推荐下载runfile的方式,安装方式如下

      1
      2
      3
      Installation Instructions:
      Run `sudo sh cuda_10.0.130_410.48_linux.run`
      Follow the command-line prompts
    4. 按照提示一步步进行安装即可,最后在.zshrc 或者.bashrc中加入cuda的路径

  3. 安装cudnn

    1. 下载地址https://developer.nvidia.com/rdp/cudnn-download

    2. 根据安装的cuda版本找到对应的cudnn版本,尽量选择runtime版本,下载完之后,进行安装

      1
      sudo dpkg -i xxx.deb
  4. 安装tensorflow

    1
    pip install tensorflow-gpu=1.14.0

VIM

https://github.com/amix/vimrc

TMUX

http://blog.leanote.com/post/braveapple/Linux-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE-tmux

  1. install

    1
    sudo apt install tmux
  2. install theme refer

    1
    2
    3
    4
    cd ~
    git clone https://github.com/gpakosz/.tmux.git
    ln -s -f .tmux/.tmux.conf
    cp .tmux/.tmux.conf.local .
  3. install plugin

    1
    git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
  4. 编辑配置文件 ~/.tmux.conf

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
set -g default-terminal "screen-256color" # colors!
# setw -g xterm-keys on
# set -s escape-time 10 # faster command sequences
# set -sg repeat-time 600 # increase repeat timeout
# set -s focus-events on


# Send prefix
set -g prefix2 C-a # GNU-Screen compatible prefix
bind C-a send-prefix -2

# Use Alt-arrow keys to switch panes
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# expect UTF-8 (tmux < 2.2)
set -q -g status-utf8 on
setw -q -g utf8 on


# Shift arrow to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window


set -g history-limit 2000 # boost history

# Mouse mode
set-option -g mouse on

# Set easier window split keys
bind-key v split-window -h
bind-key h split-window -v


# Send prefix
# 把prefix的ctrl+b变为了ctrl+a,因为这样按起来方便些。基本上用tmux的都改了这个。

# Use Alt-arrow keys to switch panes
# 不用按prefix,直接用alt+箭头在pane之间switch。实际用过之后才发现真是太方便了!

# Shift arrow to switch windows
# 不用按prefix,直接用shift+箭头在window之间switch。太方便了!

# Mouse mode
# 开启鼠标模式。用鼠标就能切换window,pane,还能调整pane的大小,方便!

# Set easier window split keys
# 这一部分是用来更方便切分pane的。prefix + v 代表竖着切,prefix + h 代表横着切。比起默认的切割方法不仅直观而且方便。

# Easy config reload
# 下一次如果修改了.tmux.conf的设置的话,不用关掉tmux。直接用prefix+r,就能重新加载设置。
  1. 重新导入 tmux 配置环境

    1
    tmux source ~/.tmux.conf
  2. 安装插件使配置文件生效

    tmux new-session -s install # 创建一个 tmux 会话

    • tmux 会话中,按下快捷键 Ctrl + a + I 或者 Ctrl + b + I (注意 I 是大写,因此需要按下 Shift + i)
    • 输入以下命令,查看tmux配置已经导入系统环境中
    1
    tmux show-options -g
赏杯咖啡!