linux/shell 深度学习、人工智能常用指令合集(持续更新中)

本文永久更新地址转移至:http://note.youdao.com/noteshare?id=bebeba0749202160d3265f9e3d3c2eb3&sub=68B1CC3C106C42EF9C4401187B44CBF6

本帖不再更新!

linux相关指令
------------------------------------linux权限、文件相关命令:--------------------
----------------权限操作------------------
----------------文件操作------------------
----------------容量、排序------------------
----------------编辑文件:------------------
------------------------------------anaconda相关:----------------------------------
----------------notebook------------------
----------------换源------------------
----------------备份、导入环境------------------
----------------问题解决------------------
------------------------------------screen 命令:-------------------------------------
------------------------------------linux 其他指令:----------------------------------
----------------连接服务器------------------
----------------tree 安装及命令使用:------------------
----------------文件下载、ftp------------------
----------------服务器设备状态------------------
------------------------------------使用中遇到的问题:------------------------------
------------------bashrc环境变量无法自动生效-------------------
---------------服务器GPU显存占用问题:----------------------
------------------…PyCharmXXX占用空间过大-------------------
windows相关
------------------------------------AutoHotKey--------------------------------------
------------------------------------other--------------------------------------
------------------装系统分区出错解决方法-------------------
git命令
------------------------------------git 命令--------------------------------------
----------------安装git------------------
----------------init->edit->(checkout)->add->(reset)->commit------------------
----------------状态查看------------------
----------------连接远程库------------------
----------------分支相关------------------
----------------git stash:暂存当前状态------------------
----------------git 标签管理------------------
------------------------------------问题与解决--------------------------------------
----------------gitignore不起作用------------------
----------------输入q回车即可退出详细信息界面------------------
----------------输入h可以显示所有命令(help)------------------


linux相关指令

------------------------------------linux权限、文件相关命令:--------------------
----------------权限操作------------------
sudo su 、sudo -i 、su root 、su - //进入root模式
退出root模式:输入logout或exit
su 用户名 //切换到某个用户,也可以用于退出root模式
sudo useradd -d /home/zb/ -m zb //创建用户(-s /bin/bash 指定默认登录Shell)
sudo userdel -r zb //删除用户
赋予普通用户root权限:
输入指令sudo visudo找到下面一行,在root下面添加一行,如下所示:

Allow root to run any commands anywhere

root ALL=(ALL) ALL
tommy ALL=(ALL) ALL
修改完毕,执行“Ctrl+O”保存后,会输出”File Name to Write sudoers.tmp”,在tmp后执行回车,执行“Ctrl+X退出
----------------文件操作------------------
cat 文件名 //查看文件内容,如cat readme.txt
cat file1 file2 > file //将几个文件合并为一个文件
pwd //显示当前目录,print working directory
mkdir dir1 dir2 同时创建两个目录
mkdir -p /tmp/dir1/dir2 创建一个目录d树
rmdir dir1 删除一个叫做 ‘dir1’ 的目录’
rm -rf dir1 dir2 同时删除两个目录及它们的内容
mv dir1 new_dir 重命名/移动 一个目录
cp file1 file2 复制一个文件
ln -s [要创建的文件或文件夹] [软链接存放位置] //软链接,没有-s就是硬链接,ln命令会保持每一处链接文件的同步性,软链不占空间,硬链创建同样的文件,创建文件夹的链接要加参数-d

参考链接:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html
----------------容量、排序------------------
df -h #查看硬盘剩余空间
du -hs 查看当前目录占用空间
du -sk * | sort -rn //显示当前路径下各文件大小并排序
du -sh .[!.]* * | sort -hr #显示所有隐藏文件和非隐藏文件的大小并根据占用空间排序
du -sh xxx #显示总目录的大小,但是不会列出目录中的每一个文件
du -sh xxx/* #列出xxx下每个目录和文件所占的容量
----------------编辑文件:------------------
gedit xxx

vim编辑器:
sudo apt-get install vim 安装vim。
vi XXX //打开并编辑文件
按i进入编辑模式
编辑好文本后按Esc,退出插入状态。
保存退出:输入冒号,输入wq(write,quit)或x(x==wq)回车,或者按了ESC后,直接按shift+zz,或者切换到大写模式按ZZ
文本没改动退出:Esc+冒号+q
不保存退出:Esc+冒号+q!

使用vi编辑时按上下左右变成ABCD:
sudo apt-get remove vim-common 卸载原先的vim-common组件。
------------------------------------anaconda相关:----------------------------------
anaconda-navigator //打开anaconda图形界面
conda --version //版本
conda create --name XXX python=3.5 //新增一个环境
conda info --envs 或 conda env list //显示所有环境
activate XXX //激活环境,linux前面要加个source或conda(需要把“. /home/zb/mysoftware/anaconda3/etc/profile.d/conda.sh”加到.bashrc里才能用conda activate)
deactivate //退出环境,linux前面要加个source或conda
spyder ipython notebook //进入环境后可以输入这些指令打开相应环境下的应用
conda list //查看所有安装的包
conda create --name new_env_name --clone old_env_name //复制某个环境
conda remove --name your_env_name --all //删除某个环境
----------------notebook------------------
将conda环境加入ipython notebook:
在要激活的环境中安装ipykernel:conda install ipykernel
将选择的conda环境注入Jupyter Notebook:
python -m ipykernel install --user --name XXX(环境名) --display-name “XXX”(显示名)
例如:
python -m ipykernel install --user --name dl --display-name dl
----------------换源------------------
pip换源:
pip install --index https://pypi.mirrors.ustc.edu.cn/simple XXX(包名) //通过源安装包
pip install XXX -i https://pypi.douban.com/simple
另一种方法:home/用户名/.pip 目录下建一个pip.conf的文件,文件内容为:
[global]
index-url=http://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn

conda换源参考:
https://blog.csdn.net/observador/article/details/83618540

----------------备份、导入环境------------------
conda env export > environment.yaml //导出环境
conda env create -f environment.yaml //导入环境
----------------问题解决------------------
使用ss之后输入conda指令出现错误:“ValueError: Unable to determine SOCKS version from socks://127.0.0.1:10808/”。
解决方法:
在终端中输入
unset all_proxy && unset ALL_PROXY 取消所有代理设置
export all_proxy=“socks5://127.0.0.1:10808”
这只能在当前终端的使用中有效,重新打开的终端中仍然会有错误。
------------------------------------screen 命令:-------------------------------------
screen -S yourname //新建一个叫yourname的session
screen -X -S XXXID quit //结束session
screen -r XX //恢复离线的screen:
screen -ls //显示所有screen session
screen -d XX //将指定的screen离线
screen -wipe //检查目前所有的screen作业,并删除已经无法使用的screen作业
screen -d -r yourname //结束当前session并回到yourname这个session

C-a d //detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

exit //结束screen以及在该screen中运行的程序

Ctrl-a [ //进入到复制模式,可以用方向键或者翻页键显示历史输出,用g移动到输出顶部,用G移动到底部

ctrl + a + c:在session下创建新窗口(create)
ctrl + d :退出(关闭)当前窗口
Ctrl-a " :列出session下所有窗口
ctrl + a + n:切换至下一个窗口(next)
ctrl + a + p:切换至上一个窗口(previous)
ctrl + a + A: 窗口重命名
ctrl + a + [1-9]: 切换到指定窗口(1-9为窗口号)
Ctrl-a S 新建水平分割窗口
Ctrl-a | 新建竖直分割窗口
Ctrl-a Tab 切换分割窗口,切换后可在新的分割窗口内使用ctrl + a + c或Ctrl-a "打开一个窗口
Ctrl-a X 关闭当前分割窗口

会话锁定与解锁:C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。也可以使用C-a x 锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。
------------------------------------linux 其他指令:----------------------------------
----------------连接服务器------------------
ssh zb@10.18.57.171 //连接服务器
ssh -X zb@10.18.57.171 //加这个参数可以传输图形界面
ssh hizengbiao@10.18.50.223 //连接到我的linux台式机
----------------tree 安装及命令使用:------------------
tree --help
tree XXX

linux非root用户安装tree命令:
注:我的安装目录为/home/zb/mysoftware/,文中出现的路径请记得更改为自己的路径。
1.通过链接地址: http://mama.indstate.edu/users/ice/tree/下载tree安装包。
2.使用指令tar -zxvf tree-1.8.0.tgz解压。
3.进入解压目录,编辑目录中的Makefile文件,将prefix=后面的路径改为自己的安装目录,比如我的改为prefix = /home/zb/mysoftware/tree-1.8.0,保存。
4.cd到解压目录,输入指令make install进行安装。
5.编辑用户目录(/home/zb/)下的.bashrc文件,加入以下内容:export PATH=/home/zb/mysoftware/tree-1.8.0/bin:$PATH
6.输入source .bashrc指令更新。
tree命令行参数:
-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|“号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用”?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

MobaXterm乱码:加-A 或用windows Powershell连接

样例:

----------------文件下载、ftp------------------
wget -c XXX //XX是该网络地址和文件的位置,其中-c是断点续传

ftp 10.18.50.XXX #连接windows上的ftp共享
binary # 设定以二进制方式传送文件.
get readme.txt # 下载 readme.txt 文件
put /path/readme.txt # 上传 readme.txt 文件
更多:https://www.cnblogs.com/feiquan/p/9236768.html
----------------服务器设备状态------------------
nvidia-smi //显示当前GPU使用情况
watch -n 0.1 nvidia-smi //显示当前GPU使用情况,每0.1秒刷新一次
watch --color -n 0.1 gpustat -cpu //动态实时监控GPU 的使用情况,可显示谁在占用
top //显示内存CPU占用情况、cmmand等
------------------------------------使用中遇到的问题:------------------------------
------------------bashrc环境变量无法自动生效-------------------
Ubuntu: 用户无法自动加载 .bashrc的问题:
现象:用户ssh登录到服务器,.bashrc里的环境变量设置无法自动生效。
查找原因:对比其他相同操作系统的机器,发现用户目录下多了一个.bash_profile文件
解决办法:删除.bash_profile或在~/.bash_profile里添加上(第二个方法没试过):
if [ -f ~/.bashrc ] ; then
source ~/.bashrc
fi
---------------服务器GPU显存占用问题:----------------------
tensorflow在训练时默认占用所有GPU的显存
方法1、在构造tf.Session()时候通过传递tf.GPUOptions作为可选配置参数的一部分来显式地指定需要分配的显存比例,如下所示:

假如有12GB的显存并使用其中的4GB:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
方法2、动态按需分配显存设置:
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
3、以上方法在执行训练脚本(CUDA_VISIBLE_DEVICES=0,1 python XXX.py)前使用,指定GPU设备也可以通过代码:
import os
os.environ[“CUDA_VISIBLE_DEVICES”]=“0,1,2,3”
------------------…PyCharmXXX占用空间过大-------------------
原因:这取决于你有多少个项目;它们有多大(文件的数量和大小),项目里的数据集图片数据过大过多造成的。
解决:在Pycharm中相关数据集目录右键-》Mark Directory as -》 Excluded,然后File -》 Invalidate Caches,然后重启。。(貌似没用?)


windows相关

------------------------------------AutoHotKey--------------------------------------
使用说明:
新建文本文件,编写脚本.
保存为 test.ahk (脚本后缀名都为 .ahk)。
右键选择 “打开方式” -> 浏览计算机中的程序 -> 定位到 AutoHotKey 软件所在目录中 -> 选择 AutoHotkeyU64.exe,确定。
以后双击 test.ahk 脚本,即可运行。

; ## 注释

## win 键

! ## alt
^ ## ctrl

  • shift

& ## 把两个键合成组合键
:: ## 意味着每次按下前面的热键时,其后的命令将会被执行

Run ## 用来启动一个程序、文档、URL 网址或者快捷方式。如:
Run D:\software\QQ.exe
Run www.yahoo.com
Run C:\My Documents\Address List.doc

Send, joe ## 发送文本
clipboard = username ## 给剪切板赋值
Send, ^v ## 发送剪切板的内容
Send, {tab} ## 发送tab
Send {up}
Send {left}
Send {down}
Send {right}
Send {home}
Send {end}
Send {Pgup}
Send {Pgdn}
Send {Delete}
Send {BackSpace}
Send {WheelUp}
Send {WheelDown}
------------------------------------other--------------------------------------
------------------装系统分区出错解决方法-------------------
shift+f10,diskpart,select disk 0,clean(电脑中的东西全删了),convert mbr,exit,exit,刷新,选未分配(也只有那一个),下一步。


git命令

------------------------------------git 命令--------------------------------------
----------------安装git------------------
试着输入git,看看系统有没有安装Git:
如果出现:usage:git […等一大堆提示说明已经安装
如果出现:The program ‘git’ is currently not installed. 说明没安装。
安装指令:sudo apt-get install git

安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name “zb”
$ git config --global user.email “hizengbiao@qq.com”
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
查看配置信息:
git config user.name
git config user.email
----------------init->edit->(checkout)->add->(reset)->commit------------------
git init //把当前目录变成Git可以管理的仓库

git diff 文件名 //查看difference,git add之前使用才有效
add/commit 前撤销对文件的修改:
git checkout – 文件名 //直接丢弃工作区的修改,恢复到未修改的状态
git checkout – README.md // 注意, commit提交后就无法通过这种方式撤销修改,add后可以通过unset后再用checkout

git add readme.txt(文件名) //将修改内容或者单文件添加到本地缓存区
git add * //添加所有文件到仓库
git add -A // 添加所有改动
git add * // 添加新建文件和修改,但是不包括删除
git add . // 添加新建文件和修改,但是不包括删除
git add -u // 添加修改和删除,但是不包括新建文件

在 commit 前撤销 add:
git reset // 撤销提交单独文件
git reset // unstage all due changes

git commit -m “wrote a readme file”(备注说明) //告诉Git,把文件提交到仓库
【commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m “add 3 files.”】

在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100
git reset --hard HEAD^ //回退到上一个版本
git reset --hard 版本号 //回退到具体的版本(时间节点)
----------------状态查看------------------
git status //查看工作区状态
git reflog //查看命令历史,以便确定要回到未来的哪个版本

git log //显示从最近到最远的提交日志,看到的一大串类似3d6e8…的是commit id(版本号)
git log --pretty=oneline //如果嫌输出信息太多,可以试试加上–pretty=oneline参数
git log --graph --pretty=oneline --abbrev-commit //用带参数的git log也可以看到分支的合并情况
git 输入 git log --all 命令后出现标记, 按q退出历史记录列表即可
git log 参数:
–graph 会在各个提交之间打印出线条,这些线条可以展示出分支之间的关系。
–decorate 显示出分支处在哪一次提交上。
–pretty=oneline 只是在一行中显示 sha1 和 提交的注释(译者将title一词应对到更精确的注释)
–abbrev-commit 用开始的7个sha1字符代替整个sha1(他在你的仓库中是唯一的)。
----------------连接远程库------------------
----------------推送------------------
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
可以关联多个远程库如:
git remote add origin git@github.com:hizengbiao/learngit.git
git remote add origin2 git@github.com:hizengbiao/learngit2.git

git remote remove origin 解除关联仓库,remove可以使用简写rm
git remote set-url origin git@github.com:hizengbiao/新的仓库地址.git 修改关联

git remote //查看远程库的信息,默认名称是origin
git remote -v //显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址

git push -u origin master 关联后,第一次推送master分支的所有内容;
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,此后,每次本地提交后,就可以使用命令git push origin master推送最新修改
git push origin <本地分支名>:<远程分支名> 注意:pull是远程在前本地在后,push相反
git push origin <本地分支名> 推送到 与本地当前分支同名的远程分支上
git push origin 将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支)

----------------抓取------------------
git clone git@github.com:hizengbiao/仓库名.git //从远程库github克隆
git clone https://github.com/xxx/xxx.git

git checkout -b 本地分支名 origin/远程分支名 //在本地创建和远程分支对应的分支

git pull <远程分支名如master> //把最新的提交从origin/master抓下来,与本地当前分支合并,解决冲突,再推送
git pull origin <远程分支名>:<本地分支名> 将远程指定分支 拉取到 本地指定分支
git pull origin 将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支)
git pull失败:没有指定本地dev分支与远程origin/dev分支的链接,根据提示设置dev和origin/dev的链接:$ git branch --set-upstream-to=origin/dev dev
Branch ‘dev’ set up to track remote branch ‘dev’ from ‘origin’

----------------扩展知识------------------
冲突时文件里出现的:
<<<<<<<head
XXX

YYY

34af5460735625b3103e7e7e79b1ef2639d0f8e3

head 到 =======里面的XXX是指你本地的分支的commit的内容
=====到 >>>>34af54607…(commit id)里面的YYY是您下拉的(远程的)内容
根据需要把代码改完后把<<<<
=>>>>删了冲突就解决了
----------------分支相关------------------
git checkout -b dev //创建dev分支,然后切换到dev分支
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev //创建dev分支
git checkout dev //切换到dev分支
git branch -d dev //删除分支dev
git branch -D dev //分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用该命令

git branch //命令会列出所有分支,当前分支前面会标一个*号。

git merge dev //合并指定分支到当前分支(不建议使用)
git merge --no-ff -m “merge的描述信息” dev //强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git log --graph --pretty=oneline --abbrev-commit //用带参数的git log也可以看到分支的合并情况
git log --graph //分支合并图
----------------git stash:暂存当前状态------------------
git stash //可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash save “test1” //同git stash,区别是可以加一些注释
git stash list //查看所有的工作现场
git stash pop //将当前stash中的内容弹出(会删除),并应用到当前分支对应的工作目录上
git stash apply //将堆栈中的内容应用到分支对应的工作目录上(不会删除)
git stash apply + “stash@{0}”(要加引号) //指定恢复哪个stash到当前的工作目录。
git stash drop + 名称 //从堆栈中移除某个指定的stash
git stash clear //清除堆栈中的所有内容
git stash show //查看堆栈中最新保存的stash和当前目录的差异。
git stash show “stash@{0}” //查看指定的stash和当前目录差异。
git stash show -p //查看详细的不同
git stash branch 分支名 //从最新的stash创建新分支
----------------git 标签管理------------------
git tag 标签名 //默认标签是打在最新提交的commit上的
git tag 标签名 提交号 //比方说要对add merge这次提交打标签,它对应的commit id是6224937,敲入命令$ git tag v1.0 6224937
git tag //查看所有标签,标签不是按时间顺序列出,而是按字母排序的。可以用git show 查看标签信息
git tag -a 标签名 -m “标签说明文字” 提交号 //创建带有说明的标签
git tag -d v0.1 如果标签打错了,也可以删除,创建的标签都只存储在本地,不会自动推送到远程
如果要推送某个标签到远程,使用命令git push origin
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
git push origin master 然后再推送到云端
------------------------------------问题与解决--------------------------------------
----------------gitignore不起作用------------------
git清除本地缓存命令如下(解决先建项目再创建git或修改gitignore导致的gitignore不起作用):
git rm -r --cached .
git add .
git commit -m ‘update .gitignore’
----------------输入q回车即可退出详细信息界面------------------
----------------输入h可以显示所有命令(help)------------------
----------------如何删除github上的远程分支------------------
命令:$ git push origin 【空格】【冒号】【你的分支名字】
比如我github上有master和feature分支,我现在想着删除feature分支,命令如下:
$ git push origin :feature
删不掉的话可能是github上该分支被设为默认分支了
----------------提高Github Clone速度------------------
参考:https://www.jianshu.com/p/5e74b1042b70


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值