基础命令
0 快捷键
打开终端: Ctrl+Alt+T
终端内复制/粘贴:Ctrl+Shift+C Ctrl+Shift+V
自动补全命令:Tab
超级权限文件管理系统:sudo nautilus
重启计算机:reboot
1 系统相关命令
uname -a # 查看内核/操作系统/CPU信息
lspci | grep -i nvidia # 查看显卡型号
nvidia-smi # 查看gpu信息
cat /proc/meminfo | grep MemTotal # 查看内存
cat /proc/cpuinfo | grep model\ name # 查看CPU
df -h # 查看磁盘
htop # 查看进程使用情况,top的加强版
ip addr show 或 ifconfig # 查看ip
apt-get update # 更新软件包列表
apt-get upgrade # 更新所有已安装的软件包
apt-get install packagename # 安装一个新软件包
apt-get remove packagename # 卸载一个已安装的软件包(保留配置文件)
apt-get --purge remove packagename #卸载一个已安装的软件包(删除配置文件)
2 文件系统命令
ls命令
命令格式:ls
意义:ls是 list 的缩写,即列表的意思,用于列出目录下的文件。
ls -a # 列出文件下所有的文件,包括以“.“开头的隐藏文件,..代表存在着父目录。
ls -l # 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等。缩写 ll
ls -F # 在每一个文件的末尾加上一个字符说明该文件的类型。
# "@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
ls -s # 在每个文件的后面打印出文件的大小。size(大小)
ls -t # 按时间进行文件的排序。Time(时间)
ls -A # 列出除了"."和".."以外的文件。
ls -R # 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现。
ls -L # 列出文件的链接名。Link(链接)
ls -S # 以文件的大小进行排序
除此之外,ls
命令也可以用来统计文件或文件夹数量:
# 查看当前目录下的文件数量(不包含子目录中的文件)
ls -l|grep "^-"| wc -l
# 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录
ls -lR|grep "^-"| wc -l
# 查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R
ls -l|grep "^d"| wc -l
# 查询当前路径下的指定前缀名的目录下的所有文件数量
# 例如:统计所有以“20161124”开头的目录下的全部文件数量
ls -lR 20161124*/|grep "^-"| wc -l
# grep指令可以过滤想要的信息,比如查看一个文件下python相关的文件
ls -l /usr/bin | grep python
统计完数量应该也想查看一下目录的占用空间以及每个子目录的大小:
du -sh # 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -sh * # 查看当前目录下各个文件及子目录占用空间大小
df -h # 查看磁盘占用空间
Linux下文件的一些文件颜色的含义:
绿 色---->代表可执行文件
红 色---->代表压缩文件
灰 色---->代表其它的一些文件
深蓝色---->代表目录
浅蓝色----->代表链接文件
cd命令
命令格式:cd 路径
意义:cd是change directory 的缩写;cd命令后面跟一个路径,用于切换当前用户所在的路径,其中路径可以是绝对路径也可以是相对路径。
示例:
cd /system/bin # 表示切换到/system/bin路径下。
cd logs # 表示切换到当前文件夹logs路径下。
cd / # 表示切换到根目录。
cd ../ # 表示切换到上一层路径。
cd ../.. # 返回上两级目录
cd # 表示切换到主目录或 cd ~
cd - # 返回上次所在的目录
此外可以用 pwd
命令查看当前路径。
如果需要经常查看/media/hrain/固态2
里的内容,一种优雅的方式是输入:
export CDPATH=/media/hrain/固态2
这样,系统在当前路径下找不到目录时会到/media/hrain/固态2
路径下寻找。
mkdir命令
命令格式: mkdir 文件夹
意义:mkdir是make directory 的缩写。用于创建文件夹。创建文件夹前需保证当前用户对当前路径有修改的权限。
示例:
mkdir /data/path # 在/data路径下创建path文件夹。
mkdir Projects/HRain Test/BFish # 同时创建两个
mkdir -p a/b/c # 参数 -p用于创建多级文件夹
# 这句命令表示在当前路径下创建文件夹a, 而a文件夹包含子文件夹b,b文件夹下又包含子文件夹c。
cp命令
命令格式: cp 文件 目标文件
或者cp -r 文件夹 目标文件夹
意义:cp是 copy 的缩写。用于复制文件或文件夹。
示例:
cp /data/logs /data/local/tmp/logs # 复制/data路径下的logs到/data/local/tmp路径下。
cp -r directory1 directory2 # directory1有子文件夹时递归复制
cp 1.sh /sdcard/ # 复制当前路径下的1.sh到/sdcard下。
mv命令
命令格式: mv 文件/文件夹 目标文件夹
意义:mv是 move 的缩写。用于移动文件或文件夹。
示例:
mv ~/sdxx HRain/ # 移动主目录下的sdxx到当前文件夹下的路径HRain下。
mv file1 file2 file3 -t ~/Projects/HRain/ # 将多个文件移动到主目录/Projects/HRain下
mv *.py directory # 将所有 .py 文件移动到目录
find命令
命令格式: find 目录 -name 目标文件/文件夹
意义:搜索文件或文件夹。
示例:
find / -name file1 #从 '/' 开始进入根文件系统搜索文件和目录
find /home/user1 -name \*.bin # 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
find /usr/bin -type f -atime +100 # 搜索在过去100天内未被使用过的执行文件
此外,搜索文件还有locate
、whereis
、which
命令:
locate \*.ps # 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
whereis halt # 显示一个二进制文件、源码或man的位置
which halt # 显示一个二进制文件或可执行文件的完整路径
rm命令
命令格式: rm 文件
或 rm -r 文件夹
意义:rm是 remove 的缩写。用于删除文件或文件夹,常用参数-r -f
,-r
表示删除目录,也可以用于删除文件,-f
表示强制删除,不需要确认。同样的,删除文件前需保证当前用户对当前路径有修改的权限。
示例:
rm -r path # 删除path。
rm test.txt # 删除test.txt。
一种千万不可敲的命令(会删掉整个系统):rm -rf /*
cat命令
命令格式: cat 文件
意义:cat是concatenate 的缩写。表示读取文件内容及拼接文件。
示例:
cat /sys/devices/system/cpu/online # 读取 /sys/devices/system/cpu/路径下online文件内容。
cat test.txt # 读取当前路径下test.txt文件内容。
3 解包/打包/解压/压缩
ZIP
Zip可能是目前使用得最多的文档压缩格式。它最大的优点就是可以在不同的操作系统平台,比如Linux, Windows以及MacOS上使用。缺点是压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。
压缩一个目录:zip -r archive_name.zip directory_to_compress
解压一个zip文档:unzip archive_name.zip
TAR
Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,但仅仅只是一个打包工具,并不负责压缩。
打包一个目录:tar -cvf archive_name.tar directory_to_compress
解包一个文档:tar -xvf archive_name.tar.gz
上面这个解包命令将会将文档解开在当前目录下面。当然,也可以设置解包的路径:
tar -xvf archive_name.tar -C /tmp/extract_here/
此外,tar.gz 格式在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率;tar.bz2 格式是我们提到的所有方式中压缩率最好的。当然,这也就意味着,它比前面的方式要占用更多的CPU与时间。
下面是常见压缩包格式的解包与打包:
格式 | 解压/解包 | 压缩/打包 |
---|---|---|
.tar | tar xvf FileName.tar |
tar cvf FileName.tar DirName |
.gz | gunzip FileName.gz |
gzip FileName |
.tar.gz | tar zxvf FileName.tar.gz |
tar zcvf FileName.tar.gz DirName |
.bz | bzip2 -d FileName.bz |
null |
.tar.bz | tar jxvf FileName.tar.bz |
null |
.bz2 | bzip2 -d FileName.bz2 |
bzip2 -z FileName |
.tar.bz2 | tar jxvf FileName.tar.bz2 |
tar jcvf FileName.tar.bz2 DirName |
.Z | uncompress FileName.Z |
compress FileName |
.tar.Z | tar Zxvf FileName.tar.Z |
tar Zcvf FileName.tar.Z DirName |
.tgz | tar zxvf FileName.tgz |
null |
.tar.tgz | tar zxvf FileName.tar.tgz |
tar zcvf FileName.tar.tgz FileName |
.zip | unzip FileName.zip |
zip FileName.zip DirName |
.rar | rar a FileName.rar |
rar e FileName.rar |
.lha | lha -e FileName.lha |
lha -a FileName.lha FileName |
有时候单个压缩文件过大无法上传服务器,需要分卷压缩:tar cvzpf - dir | split -d -b 2000m
上面的命令是将 dir
这个文件夹分卷压缩,每卷不超过 2000M,注意 dir
前面有空格。压缩完之后,会被命名为 x00, x01, x02 ...... x00的图标可能比较特别,这是正常现象。
然后解压的时候需要先合并:cat x*>eclipse.tar.gz
最后解压:tar xzvf eclipse.tar.gz
4 线程进程命令
kill命令
命令格式:kill PID码
意义:结束当前进程
示例:
先通过输入命令 ps au
查看进程,找到需要终止进程的PID再通过 kill PID
即可,如我这里想要终止的进程是 vim test.py
,查到的PID是3163,我们可以输入 kill 3163
结束这个程序,如果结束不了,可以通过 kill -9 PID
码强制结束,即 kill -9 3163
。
强制关闭所有python进程
ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15
ps aux : 查看所有进程
grep python : 过滤所有含有关键字“python”的进程
grep -v grep : 在列出的进程中去除含有关键字“grep”的进程
cut -c 9-15 : 截取输入行的第9个字符到第15个字符,而这正好是进程号PID
xargs kill -15 : xargs命令是用来把前面输出的PID作为“kill -15”命令的参数
kill -15 : 正常退出指定进程,-9强行关闭
也可以查看设备进程信息:top
或 htop
过滤进程:ps -ef|grep train
找到所有 train 进程。
4 网络命令
wdgt命令
命令格式:wdgt url
意义:从链接下载数据。
示例:
wget -O wordpress.zip http://www.centos.bz/download.php?id=1080 # 下载成指定名字
常用命令一:shell
待补充
常用命令二:git
安装与配置
# 安装
sudo apt install git
git --version # 查看版本
# 配置用户名和邮箱
git config --global user.name "填写自己的用户名"
git config --global user.email "填写自己的邮箱"
git config --list # 查看是否正确配置
然后需要创建一个 ssh key,这个实际上就是一个将你的电脑和 github 账号联系在一起的密钥,这样以后就可以十分方便的通过 git 上传你的代码。获取密钥的方法如下:
cd ~/.ssh # 第一次配置会显示没有那个文件或目录,这是正常现象
ssh-keygen -t rsa -C "你的邮箱地址" # 然后连续按三下回车
cd ~/.ssh
gedit id_rsa.pub # 打开创建的秘钥文件
复制id_rsa.pub
里面的内容,然后登录你的github来添加这个密钥。登录github后找到SSH and GPG keys这个选项(在Settings里面),然后点击网页右上角的New SSH key进行添加。具体细节如下图:
点击New SSH keys后界面如下图所示,这里的Title是让你给你的密钥起一个名字,随便起一个就行,然后把你刚刚复制的密钥填写在下边的大框里,点击 Add SSH keys 即可。
下载仓库
当我们想要从github上面拉取代码时,就需要使用clone操作,现在我们看看怎么进行clone,其实很简单,只需要输入 git clone 地址
,示例如下(建议新开一个终端):
git clone git@github.com:HRain1016/Faster-RCNN-tf.git
会下载到终端中当前文件夹下。
此外,建议使用仓库的 SSH 地址,不然上传的时候每次都需要 github 用户名与账号。
上传本地仓库
- 首先在 github 新建一个仓库,例如 test 。注意最好不要创建README。
- 在本地创建同名文件夹 test 。
mkdir test
cd test
然后在 test 文件夹添加一个 hello.txt 。
- 上传到远程仓库。
git init # 初始化仓库
git add . # 将test文件夹下所有文件添加到暂存区,git add hello.txt 只添加hello.txt
git commit -m "first commit" # 提交到仓库,后面是提交说明
# 将本地仓库链接到远程仓库,一个本地项目可以同时拥有好几个远程仓库,主要的称为 origin,注意使用 SSH 地址
git remote add origin git@github.com:HRain1016/test.git
git push -u origin master # 推送到仓库,origin表示远程仓库,master表示本地仓库。
如果git远程地址配错了,再次配置提示以下错误:
fatal: 远程 origin 已经存在
此时只需要将远程配置删除,重新添加网址并推送即可。
git remote rm origin
如果出现:
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 ‘git pull …’)。
提示:详见 ‘git push –help’ 中的 ‘Note about fast-forwards’ 小节。
可以强行更新:
git push -u origin +master -f # 慎用,强行将本地分支覆盖远程分支
更新本地仓库
一般使用 pull 指令:
git pull origin master # 从远程服务器获取更新,与本地合并
也可以使用 fetch:
git fetch origin master # 从远程的 origin 仓库的 master 分支下载代码到本地
git log -p master.. origin/master # 比较本地仓库和远程仓库的区别
git merge origin/master # 把远程下载下来的代码合并到本地仓库
以上 fetch 的三行代码,等同于 pull 的一行代码。
常用git命令
git init:初始化git仓库
git init # 初始化为git仓库,创建.git 目录
git init dir # 新建dir并初始化仓库
git config:配置git仓库
git config --global color.ui true # 以高亮或彩色方式显示改动状态
git config --global user.name "填写自己的用户名"
git config --global user.email "填写自己的邮箱"
git config --list # 查看是否正确配置
git status:查看本地仓库的状态
git status # 查看工作区、暂存区的状态
git status -s # 以简短模式查看本地仓库的状态
# 会显示两列,第一列是文件的状态,第二列是对应的文件
# 文件状态:A 新增,M 修改,D 删除,?? 未添加到Git中
git clone:下载远程仓库到本地
git clone <远程仓库的网址> # 默认在当前目录下创建和下载
git clone <远程仓库的网址> <本地目录> # 指定本地仓库的目录
git clone <远程仓库的网址> -b <分支名称> <本地目录> # -b 指定要克隆的分支,默认是master分支
git add:把要提交的文件的信息添加到暂存区中
git add [file1] [file2] ... # 添加指定文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add . # 添加当前目录的所有文件到暂存区
git add -p # 对于同一个文件的多处变化,可以实现分次提交
git rm:删除文件或者文件夹。
git rm <文件路径> # 移除跟踪指定的文件,并从本地仓库的文件夹中删除
git rm -r <文件夹路径> # 移除跟踪指定的文件夹,并从本地仓库的文件夹中删除
git rm --cached # 移除跟踪指定的文件,在本地仓库的文件夹中保留该文件
git commit:将暂存区中的文件提交到本地仓库中
git commit # 调用文本编辑器输入该次提交的描述信息
git commit -m "提交的描述信息" # 把暂存区中的文件提交到本地仓库中并添加描述信息
git commit --amend -m "提交的描述信息" # 修改上次提交的描述信息
git branch/git checkout:分支相关
git branch # 列出本地的所有分支,当前所在分支以 "*" 标出
git branch -r # 列出所有远程分支,-a列出所有分支
git branch -m [<原分支名称>] <新的分支名称> # 修改分支名称,如果不指定原分支名称则为当前所在分支,-M强制改名
git branch -d <分支名称> # 删除指定的本地分支,-D强制删除
git checkout <分支名称> # 切换到已存在的指定分支
git checkout -b <分支名称> # 创建并切换到指定的分支,保留所有的提交记录
git push:把本地仓库的提交推送到远程仓库
git push -u <远程仓库的别名,例如origin> <远程分支名,比如master> # 推送
git push <远程仓库的别名> <本地分支名>:<远程分支名> # 把本地仓库的分支推送到远程仓库的指定分支
git push <远程仓库的别名> --delete <远程分支名> # 删除指定的远程仓库的分支
常用命令三:vim
通常用命令行打开文本文件,比如用命令:gedit、more、cat、vim、vi、less
;
打开其他格式文件时,比如pdf、jpg、mp3格式文件,可以使用 xdg-open
。
vim/vi有三种模式:
-
命令行模式
任何模式按一下Esc
键,即可进入命令模式,进入编辑器时,也是处于该模式。在该模式下,用户可以输入各种合法的Vi
命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做命令来解释,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi
的合法命令,Vi
会响铃报警。 -
文本编辑模式
在命令模式下输入插入命令i
、附加命令a
、打开命令o
、修改命令c
、取代命令r
或替换命令s
都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi
当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按Esc
即可。 -
末行模式
在命令模式下,用户按:
键即可进入末行模式下,此时Vi
会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:
作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的,比如保存修改。末行命令执行完后,Vi
自动回到命令模式。
三种模式常用的命令
vi filename
: 打开文件,若文件不存在则新建文件并打开
编辑命令
i 插入到光标前一个字符
I 插入行首
a 插入到光标后一个字符
A 插入行未
o 向下新开一行,插入行首
O 向上新开一行,插入行首
存盘退出
:w[回车] 保存不退出
ZZ 保存同时退出vi
:wq[回车]保存同时退出vi
:q[回车] 退出vi
:q![回车]不保存强行退出vi
光标移动
h(←)j(↓)k(↑)l(→)左下上右
$ 光标移动到本行行尾
0 光标移动到本行行首
G 光标移动到文件末行
gg 光标移动到文件首行
nG 光标移动到指定的n行
M 光标移动到屏幕中间行
L 光标移动到屏幕最后一行行首
ctrl+f 向前翻一屏
ctrl+b 向后翻一屏
ctrl+d 向下翻半屏
ctrl+u 向上翻半屏
删除命令
x 删除光标后一个字符,相当于 Del
X 删除光标前一个字符,相当于 Backspace
dd 删除光标所在行,n dd 删除指定的行数
D 删除光标后本行所有内容,包含光标所在字符
d0 删除光标前本行所有内容,不包含光标所在字符
dw 删除光标开始位置的字,包含光标所在字符
撤销命令
u 一步一步撤销
ctrl+r 反撤销
复制粘贴
yy 复制当前行, n yy 复制 n 行
p 在光标所在位置向下新开辟一行,粘贴
查找命令
/ str查找
n 下一个
N 上一个