linux常用命令
查看系统信息
查看版本当前操作系统内核信息
uname -a
Linux查看当前操作系统版本信息
cat /proc/version
查看cpu相关信息,包括型号、主频、内核信息等
cat /proc/cpuinfo
查询显卡信息
网上搜到的最常见的:
nvidia-smi
当显卡名称显示不全:
查看显卡全称:
nvidia-smi --query-gpu=gpu_name,gpu_bus_id,vbios_version --format=csv
结果:
远程登陆与文件传输
item2 远程登陆:
ssh -p 端口号 用户名@ip
例:
ssh -p 3004 root@192.163.0.1
回车后输入密码
也可以写个profile脚本配置登录信息
scp 远程文件传输
SCP命令获取远程服务器上的目录:
scp -P port -r user@ip:/home/xxx/ /home/xxx/
SCP命令获取远程服务器上的文件:
scp -P port user@ip:/home/xxx.xxx /home/xxx.xxx
SCP命令将本地目录上传到远程服务器:
scp -P port -r /home/xxx/ user@ip:/home/xxx/
SCP命令将本地文件上传到远程服务器:
scp -P port /home/xxx.xxx user@ip:/home/xxx.xxx
让程序断开ssh也可以继续运行 -- Screen
关闭终端后,程序会终止
screen
是linux
用来创建虚拟终端的工具,在这个虚拟终端中运行我们的程序,而不是在我们的ssh
运行程序。这样即使断开了ssh
,我们程序仍然可以在虚拟终端中运行。
- 创建新的虚拟终端
screen
- 创建带名称的虚拟终端
screen -S my_screen_name
- 离开虚拟终端(不关闭)
先
ctrl + a
再
d
- 查看所有正在运行的虚拟终端
screen -ls
- 进入某一个虚拟终端
screen -r id
- 退出虚拟终端(关闭):需要在虚拟终端里输入
exit
- 如果想杀死一个已经detached的screen会话,可以使用以下命令:
screen -X -S [session # you want to kill] quit
示例:
root@leco:~# screen -ls
There are screens on:
17708.pts-4.leco(06/15/2017 02:39:09 PM)(Attached)
14814.pts-2.leco(06/15/2017 02:22:52 PM)(Detached)
2 Sockets in /var/run/screen/S-root.
root@leco:~# screen -X -S 17708 quit
root@leco:~# screen -ls
There are screens on:
14814.pts-2.leco(06/15/2017 02:22:52 PM)(Detached)
1 Sockets in /var/run/screen/S-root.
查找与统计
find 命令配合-exec 命令
从一个含有很多文件的目录中拷贝指定文件去另一个目录,会报以下错误:
$ ls *_text.jpg
argument list too long: ls
$ cp *_text.jpg ~/Desktop/word
argument list too long: cp
这报的错误其实是提示你ls
或者cp
的文件过多,而不是命令的参数过长。解决方法如下,可以配合find && exec
完成。
$ find . -name "*_text.jpg" -exec cp {} ~/Desktop/word
/**
说明:
查找当前目录下文件名包含_text.jpg的所有文件,拷贝到~/Desktop/word目录中,其中{}是find命令查找出来的所有结果
*/
运行结果:
find: -exec: no terminating ";" or "+"
出现find: -exec: no terminating ";" or "+"
的问题,解决方法很简单,在命令尾部加一个 \;
。也就是将上述命令改为:
$ find . -name "*_text.jpg" -exec cp {} ~/Desktop/word \;
不仅如此,还可以取反转换成tif
格式:
$ find . -name "*_text.jpg" -exec convert -negate {} ~/Desktop/word/{}.tif \;
参考mac下find: -exec: no terminating ";" or "+"的解决方法
统计文件行数
awk '{print NR}' test1.txt | tail -n1
awk '{print NR}'
打印所有行号,tail -n1
则打印最后一行
等价于
awk 'END{print NR}' test1.txt
注意第二种写法的效率更高,因为第一种写法是先打印了每行的行号,而第二种写法不需要打印每行行号,因此速度更快
统计文件的列数
awk '{print NF}' test.csv | tail -n1
awk '{print NF}'
打印每一行以指定分割符分割后的列数,默认的分割符是空格或制表符(tab), 如果你的是其它符号的话,就使用-F参数指定,例如:
awk -F"," '{print NF}' Art_Art.csv | tail -n1
指定逗号(,)为列分割符
数目统计 wc
统计文件的行数
wc -l file
统计文件中单词数
wc -w file
统计文件中的字符数
wc -c file
统计流中的字符数
cat file | wc -c
统计文件夹
统计文件夹中的文件个数
ls -l | grep '^-' | wc -l
统计文件夹中子文件夹的个数
ls -l | grep '^d' | wc -l
统计文件夹中链接的个数
ls -l | grep '^l' | wc -l
观测与监控
观察 watch命令
watch
指令可以间歇性的执行程序,将输出结果以全屏的方式显示,默认是2s执行一次。watch
将一直运行,直到被中断。
选项 | 说明 |
---|---|
-d 或 --differences | 高亮显示差异部分 |
--cumulative | 高亮显示“sticky” |
-n | 指定执行命令的时间间隔,默认2s |
常见用处
观察GPU的使用情况
nvidia-smi
但这只能显示命令执行的瞬时GPU状况,可以配合watch
命令每0.1秒刷新执行上述命令,以得到GPU的动态变化:
watch -n 0.1 nvidia-smi
查看java进程的命令: jsp
jps
是jdk
提供的一个查看当前java
进程的小工具, 可以看做是Java Process Status
的缩写。
命令格式:jps [options ] [ hostid ]
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
例:
$ jps -l
10785 sun.tools.jps.Jps
3074 kafka.Kafka
5571 com.intellij.database.remote.RemoteJdbcServer
5555 com.intellij.database.remote.RemoteJdbcServer
2291
1540
504 org.apache.zookeeper.server.quorum.QuorumPeerMain
网络相关
域名查询工具
# 用来测试域名系统工作是否正常
dig + 域名
dig @114.114.114.114 www.baidu.com
lsof 神器 -- 查看打开的文件描述符
lsof
命令用于查看进程开打的文件,打开文件的进程,进程打开的端口(TCP
、UDP
)。找回/恢复删除的文件。由于类Unix
系统一切皆文件(包括网络连接、硬件、目录等),因此lsof
能查看很多系统中的有用信息。
在类
unix
环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP
) 和用户数据报协议 (UDP
) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
选项
选项 | 描述 |
---|---|
-a | 列出打开文件存在的进程; |
-c<进程名> | 列出指定进程所打开的文件; |
-g | 列出GID号进程详情; |
-d<文件号> | 列出占用该文件号的进程; |
+d<目录> | 列出目录下被打开的文件; |
+D<目录> | 递归列出目录下被打开的文件; |
-n<目录> | 列出使用NFS的文件; |
-i<条件> | 列出符合条件的进程。(4、6、协议、:端口、 @ip ) |
-p<进程号> | 列出指定进程号所打开的文件; |
-u | 列出UID号进程详情; |
-h | 显示帮助信息; |
-v | 显示版本信息。 |
显示说明
[root@localhost~]# lsof
command PID USER FD type DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root mem REG 8,2 1722304 7823915 /lib64/libc-2.5.so
migration 2 root cwd DIR 8,2 4096 2 /
migration 2 root txt unknown /proc/2/exe
ksoftirqd 3 root cwd DIR 8,2 4096 2 /
列信息
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
各列的可能的值的详细说明可以用man lsof
查看
常见用法
#列出所有打开的文件:
lsof
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
# 查看谁正在使用某个文件
lsof /filepath/file
#递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
# 比使用+D选项,遍历查看某个目录的所有文件信息 的方法
lsof | grep ‘/filepath/filepath2/’
# 列出某个用户打开的文件信息
lsof -u username
备注: -u 选项,u其实是user的缩写
# 列出某个程序所打开的文件信息
lsof -c mysql
备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了
# 列出多个程序多打开的文件信息
lsof -c mysql -c apache
# 列出某个用户以及某个程序所打开的文件信息
lsof -u test -c mysql
# 列出除了某个用户外的被打开的文件信息
lsof -u ^root
备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示
# 通过某个进程号显示该进行打开的文件
lsof -p 1
# 列出多个进程号对应的文件信息
lsof -p 123,456,789
# 列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1
# 列出所有的网络连接
lsof -i
# 列出所有tcp 网络连接信息
lsof -i tcp
# 列出所有udp网络连接信息
lsof -i udp
# 列出谁在使用某个端口
lsof -i :3306
# 列出谁在使用某个特定的udp端口
lsof -i udp:55
# 特定的tcp端口
lsof -i tcp:80
# 列出某个用户的所有活跃的网络端口
lsof -a -u test -i
# 列出所有网络文件系统
lsof -N
#域名socket文件
lsof -u
#某个用户组所打开的文件信息
lsof -g 5555
# 根据文件描述列出对应的文件信息
lsof -d description(like 2)
# 根据文件描述范围列出文件信息
lsof -d 2-3
终端通用命令
Ctrl + C
这些是为了在终端上中断命令或进程该按的键。它将立刻终止运行的程序。
如果你想要停止使用一个正在后台运行的程序,只需按下这对组合键。
Ctrl + Z
该快捷键将正在运行的程序送到后台。 通常,你可以在使用 & 选项运行程序前之完成该操作, 但是如果你忘记使用选项运行程序,就使用这对组合键。
Ctrl + D
这对键盘快捷键将使你退出当前终端。如果你使用 SSH 连接,它将会关闭。 如果你直接使用一个终端,该应用将会立刻关闭。
把它当成“退出”命令。
Ctrl + L
你怎么清空你的终端屏幕?我猜是用 clear 命令。
你可以使用 Ctrl+L 清空终端,代替输入 C-L-E-A-R。得心应手,不是吗?
Ctrl + A
该快捷键将移动光标到所在行首。
假设你在终端输入了一个很长的命令或路径,并且你想要回到它的开头, 使用方向键移动光标将花费大量时间。注意你无法使用鼠标移动光标到行首。
这是 Ctrl+A 节省时间的地方。
Ctrl + E
这对快捷键与 Ctrl+A 相反。 Ctrl+A 送光标到行首,反之 Ctrl+E 移动光标到行尾。
Ctrl + U
输入了错误的命令? 代替用退格键来丢弃当前命令,使用 Linux 终端中的 Ctrl+U 快捷键。 该快捷键会擦除从当前光标位置到行首的全部内容。
Ctrl + K
这对和 Ctrl+U 快捷键有点像。 唯一的不同在于不是行首,它擦除的是从当前光标位置到行尾的全部内容。
Ctrl + W
你刚才了解了擦除到行首和行尾的文本。 但如果你只需要删除一个单词呢?使用 Ctrl+W 快捷键。
使用 Ctrl+W 快捷键,你可以擦除光标位置前的单词。 如果光标在一个单词本身上,它将擦除从光标位置到词首的全部字母。
最好的方法是用它移动光标到要删除单词后的一个空格上, 然后使用 Ctrl+W 键盘快捷键。
Ctrl + Y
这将粘贴使用 Ctrl+W,Ctrl+U 和 Ctrl+K 快捷键擦除的文本。 如果你删除了错误的文本或需要在某处使用已擦除的文本,这将派上用场。
Ctrl + P
你可以使用该快捷键来查看上一个命令。 你可以反复按该键来返回到历史命令。 在很多终端里,使用 PgUp 键来实现相同的功能。
Ctrl + N
你可以结合 Ctrl+P 使用该快捷键。Ctrl+N 显示下一个命令。 如果使用 Ctrl+P 查看上一条命令,你可以使用 Ctrl+N 来回导航。 许多终端都把此快捷键映射到 PgDn 键。
Ctrl + R
你可以使用该快捷键来搜索历史命令。
其他
软链接与硬链接
软链接
ln -s 源文件 目标文件
软链接可以理解成快捷方式。它和windows下的快捷方式的作用是一样的。
硬链接:ln 源文件 目标文件
硬链接等于cp -p 加 同步更新。
MAC 系统相关
.DS_Store文件
.DS_Store
文件:DS_Store
是用来存储这个文件夹的显示属性的:比如文件图标的摆放位置。删除以后的副作用就是这些信息的失去。
尽管这些文件本来是为Finder
所使用,但它们被设想作为一种更通用的有关显示设置的元数据存储,诸如图标位置和视图设置。
禁止.DS_store生成
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
恢复.DS_store生成:
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
删除 所有目录的“.DS_store”文件
sudo find / -name ".DS_Store" -depth -exec rm {} \;
参考 dsstore是什么文件
» 这个标志怎么打出来: option + shift + k
深度学习相关
cuda & cuDNN
查看cuda版本
cuda
可以安装多个版本,但是会使用的时候会去固定的这个位置寻找:/usr/local/cuda
, 安装不同版本的cuda
本质上是把安装好的cuda
往这个地方链
cat /usr/local/cuda/version.txt
查看cuDNN
版本
cuDNN
是cuda
的一个库,专门为了加速深度学习计算用的。往cuda
里面安装cuDNN
非常简单,就是往cuda
文件夹里面拷贝几个文件, 一个cudnn.h
文件拷贝到cuda/include
下, 另外几个lib.so
文件拷贝到cuda/lib64
下。cuDNN
的版本信息包含在在cudnn.h
文件中。查看版本信息很简单:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
Pytorch
查看 pytorch版本
python -c 'import torch; print(torch.__version__)'
查看cuda是否可用
python -c 'import torch; print torch.cuda.is_available()'