命令 | 含义 |
---|---|
du -sh * |
文件夹的大小统计 |
ctrl + a |
光标移到命令的开头 |
ctrl + e |
光标移到命令的末尾 |
ctrl + u |
删除光标前面的内容 |
ctrl + k |
删除光标后面的内容 |
ctrl + f |
向右移到一个字符 |
ctrl + b |
向左移到一个字符 |
esc + f |
向右移到一个单词 |
esc + b |
向左移到一个单词 |
- 下载安装conda
- 下载最新Conda
- 双击安装
- 更新
conda update conda
- 创建独立工作环境
conda create -n fastai python=3
或者明确一个版本3.5conda activate fastai
开启实验环境conda deactivate
关闭实验环境conda remove -n fastai --all
删除环境
- 下载安装pdbpp 适配python 3.6而非3.7,所以先装更好
conda install pdbpp
is a must- not
pip3 install pdbpp
- 下载安装Jupyter notebook
- 更新 pip:
python3 -m pip install --upgrade pip
- 下载更新Jupyter:
python3 -m pip install jupyter
- 更新 pip:
- 下载安装 Pytorch和fastai libraries
- 一步安装:
conda install -c pytorch -c fastai fastai pytorch
- 更新
conda update conda -y
outside env - 更新
conda update -c fastai fastai
inside env - 检验
conda list
pip show
- 一步安装:
命令 | 含义 |
---|---|
useradd –d /home/username -m username |
为用户创建相应的帐号和用户目录 /home/username |
passwd username |
为用户设置密码 |
userdel -r username |
删除用户 |
su userB |
切换登录用户 |
exit |
退出当前用户回到 root 用户 |
groups |
添加用户操作也会相应的增加一个同名的组,用户属于同名组;查看当前用户所属的组 |
usermod -G groupNmame username |
一个用户可以属于多个组,将用户加入到组 |
usermod -g groupName username |
变更用户所属的根组(将用户加入到新的组,并从原有的组中除去) |
more /etc/passwd |
查看所有用户及权限, 系统的所有用户及所有组信息分别记录在两个文件中:/etc/passwd , /etc/group 默认情况下这两个文件对所有用户可读 |
more /etc/group |
查看所有的用户组及权限 |
usermod -G sudo username |
给 sudo 权限 |
# useradd -s /bin/bash {用户昵称} |
指定用户shell或者通过修改/etc/passwd文件 |
命令 | 含义 |
---|---|
chown username dirOrFile |
更改文件或目录的拥有者 |
chown -R weber server/ |
使用-R选项递归更改该目下所有文件的拥有者 |
which command |
查看 command 的路径 |
whereis command |
查看 command 的搜索路径 |
`find ./ | wc -l` |
`ls | cat -n` |
find ./ -name '*.o' |
查找目标文件夹中是否有obj文件 |
find ./ -name "*.o" -exec rm {} \ |
递归当前目录及子目录删除所有.o文件 |
`find ./ -name "core*" | xargs file` |
locate string |
find是实时查找,如果需要更快的查询,使用locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库 updatedb |
`ls -al | more` |
head -1 filename |
显示文件第一行 |
tail -5 filename |
显示文件倒数第五行 |
diff file1 file2 |
查看两个文件间的差别 |
tail -f crawler.log |
动态显示文本最新信息 |
:> a.txt |
清空文件内容 |
sort -nrk 1 data.txt |
排序,-n 按数字进行排序,-d 按字典序进行排序,-r 逆序排序,-k N 指定按第N列排序 |
uniq |
消除重复行 |
cut |
按列切分文本 |
paste |
按列拼接文本 |
wc -l file |
统计行数, wc -w file , 统计单词数,wc -c file 统计字符数 |
sed '/^$/d' file |
移除空白行, sed 用来进行文本替换 |
tar |
打包解包工具 |
ps -ef |
查询正在运行的进程信息 |
ps -ajx |
以完整的格式显示所有的进程 |
top |
显示进程信息,并实时更新 |
lsof -i:3306 |
查看端口占用的进程状态 |
lsof -u username |
查看用户username的进程所打开的文件 |
kill PID |
杀死指定PID的进程 (PID为Process ID) |
pmap PID |
输出进程内存的状况,可以用来分析线程堆栈 |
sar -u |
查看CPU使用率 |
free -m |
查看内存使用量 |
netstat -a |
列出所有端口 |
netstat -at |
列出所有 tcp 端口 |
route -n |
查看路由状态 |
ping IP |
发送ping包到地址IP |
traceroute IP |
探测前往地址IP的路由路径 |
host domain |
DNS查询,寻找域名domain对应的IP |
host IP |
反向DNS查询 |
ssh ID@host |
SSH登陆, ssh登陆远程服务器host,ID为用户名 |
sftp ID@host |
ftp/sftp文件传输 |
lftp |
同步文件夹(类似rsync工具) lftp -u user:pass host |
scp localpath ID@host:path |
将本地localpath指向的文件上传到远程主机的path路径 |
scp -r ID@site:path localpath |
以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath |
uname -a |
查看Linux系统版本 |
more /etc/release |
查看Unix系统版本:操作系统版本 |
arch |
显示架构 |
pagesize |
显示内存page大小(以KByte为单位 |
cat /proc/meminfo |
查看内存信息 |
`cat /proc/cpuinfo | grep processor |
cat /proc/cpuinfo |
查询CPU信息 |
sar -u 5 10 |
查看CPU使用情况 |
date |
显示当前系统时间 |
- 查看指定端口,可以结合grep命令:netstat -ap | grep 8080
- 也可以使用lsof命令:lsof -i:8080
- 关闭端口使用
- 若要关闭使用这个端口的程序,使用kill + 对应的pid: kill -9 PID号
使用ls -l
可查看文件的属性字段,文件属性字段总共有10个字母组成,第一个字母表示文件类型,如果这个字母是一个减号 -
, 则说明该文件是一个普通文件。字母 d
表示该文件
是一个目录。 后面的9个字母为该文件的权限标识,3个为一组,分别表示文件所属用户、用户所在组、其它用户的读写和执行权限; 例如:
[/home/weber#]ls -l /etc/group
-rwxrw-r-- colin king 725 2013-11-12 15:37 /home/colin/a
表示这个文件对文件拥有者 colin 这个用户可读写、可执行;对 colin 所在的组(king)可读可写;对其它用户只可读;
使用chmod命令更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式
- 字母方式:
$chmod userMark(+|-)PermissionsMark
- userMark取值:
- u:用户
- g:组
- o:其它用户
- a:所有用户
- PermissionsMark取值:
- r:读
- w:写
- x:执行
例如:
$chmod a+x main # 对所有用户给文件main增加可执行权限
$chmod g+w blogs # 对组用户给文件blogs增加可写权限
- 数字方式:
数字方式直接设置所有权限,相比字母方式,更加简洁方便;
使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。 如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
例如:
$chmod 740 main # 将main的用户权限设置为 rwxr-----
- 安装Jupyter Notebook库
$ pip install Jupyter
- 生成Jupyter Notebook 配置文件
生成的配置文件,后来用来设置服务器的配置
$ jupyter notebook --generate-config
- 设置Jupyter Notebook密码
设置密码用于设置服务器配置,以及登录Jupyter。打开 iPython 终端,输入以下:
In [1]: from IPython.lib import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: '这里是密码'
- 设置服务器配置文件
$ nano ~/.jupyter/jupyter_notebook_config.py
修改以下参数设置
- c.NotebookApp.ip = '*' # 所有绑定服务器的IP都能访问,若想只在特定ip访问,输入ip地址即可, 也可以使用 0.0.0.0 代表所有IP
- c.NotebookApp.port = 6666 # 端口设置,默认是8888
- c.NotebookApp.open_browser = False # 我们并不想在服务器上直接打开 Jupyter Notebook,所以设置成False
- c.NotebookApp.notebook_dir = '/home/username/jupyter_projects' # 这里是设置Jupyter的根目录
- c.NotebookApp.allow_root = True # 为了安全,Jupyter默认不允许以 root 权限启动jupyter
- c.NotebookApp.password = 'sha1:e1c8cc' # 生成的密码
- 启动Jupyter 远程服务器
$ jupyter notebook
- 远程访问
-
方法一: 在本地浏览器上,输入 http://ip_address:port,将会打开远程Jupyter
-
方法二:如果方法一登陆失败,则有可能是服务器防火墙设置的问题,此时最简单的方法是在本地建立一个ssh通道:
- 在本地终端中输入ssh username@address_of_remote -L127.0.0.1:your_port:127.0.0.1:remote_port
- 切换到对应的环境,打开 jupyter notebook
- 在localhost:your_port 就可以直接访问远程的jupyter
-
ssh remote_user@remote_host 22 -N -f -L localhost:8888:localhost:8889
- -N 告诉SSH没有命令要被远程执行; -f 告诉SSH在后台执行; -L 是指定port forwarding的配置
- Ubuntu16.04 Cuda9
#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-9-0; then
# The 16.04 installer works with 16.10.
curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
dpkg -i ./cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
apt-get update
apt-get install cuda-9-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1
- Ubuntu16.04 Cuda10
#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-9-0; then
# The 16.04 installer works with 16.10.
curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.1.105-1_amd64.deb
dpkg -i ./cuda-repo-ubuntu1604_10.1.105-1_amd64.deb
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
apt-get update
apt-get install cuda -y
fi
# Enable persistence mode
nvidia-smi -pm 1
命令 | 含义 |
---|---|
sudo apt-get install ufw | 安装 ufw |
ufw status | 查看状态 |
sudo ufw default allow outgoing | 允许所有传出连接 |
sudo ufw default deny incoming | 拒绝所有传入 |
sudo ufw allow ssh | 允许ssh |
sudo ufw allow http | 允许http |
sudo ufw allow https | 允许https |
sudo ufw allow 22 | 允许22端口 |
sudo ufw deny 111 | 禁止 111端口 |
sudo ufw allow 80/tcp | 允许80 tcp端口 |
sudo ufw allow 1725/udp | 允许1725udp端口 |
sudo ufw allow from 123.45.67.89 | 允许某ip |
sudo ufw delete allow 80 | 删除一条规则 |
$ git clone 仓库地址 # 克隆该项目
克隆下来后只会发现子模块并没有一起克隆下来,需要将子模块也克隆下来。
$ git submodule init #初始化你的本地配置文件
$ git submodule update #从那个项目拉取所有数据并检出你上层项目里所列的合适的提交
$ git checkout master # 切换到主分支
$ git checkout -- filename # or . 表示所有的文件
git submodule update --init --recursive
当我们fork一个项目后,在我们使用代码的时候就会以我们本地为准,不会跟随我们fork前的项目,如果需要同步对方的代码,需要进行同步操作
- 首先我们先看下远端现有分支
$ git remote -v
- 为fork的项目配置分支
$ git remote add upstream https://github.com/**/***.git
$ git remote -v
- 获取 upstream 分支到本地
$ git fetch upstream
- 切换到本地master分支
$ git checkout master
- 同步到主分支
$ git merge upstream/master
- push
$ git push
upstream 是原始仓库的名字