其他指令

程序在后台运行

经常会用到程序要运行在后台,ssh断掉的时候,程序不会挂掉。可以使用nohup指令。

1
nohup python train.py &

这样程序的输出内容会写入nohup.out文件中。

终端打开文件管理器

1
sudo nautilus

输出文件夹所有文件名到txt

1
ls > filenames.txt

Ping指令

Ping用到的是ICMP协议。不是端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] 
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name

Options:
-t Ping the specified host until stopped.
To see statistics and continue - type Control-Break;
To stop - type Control-C.
-a Resolve addresses to hostnames.
-n count Number of echo requests to send.
-l size Send buffer size.
-f Set Don't Fragment flag in packet (IPv4-only).
-i TTL Time To Live.
-v TOS Type Of Service (IPv4-only).
-r count Record route for count hops (IPv4-only).
-s count Timestamp for count hops (IPv4-only).
-j host-list Loose source route along host-list (IPv4-only).
-k host-list Strict source route along host-list (IPv4-only).
-w timeout Timeout in milliseconds to wait for each reply.
-R Trace round-trip path (IPv6-only).
-S srcaddr Source address to use (IPv6-only).
-4 Force using IPv4.
-6 Force using IPv6.

在Linux下输入下面两句

1
2
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT

就可以打开所有网卡的Ping功能了

使用Ping检查连通性有六个步骤:

  1. 使用 ifconfig观察本地网络设置是否正确;
  2. Ping 127.0.0.1,127.0.0.1回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好;
  3. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;
  4. Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)
  5. Ping本地DNS地址,这样做是为了检查DNS是否能够将IP正确解析。
  6. Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。

检查端口占用

1
netstat –apn | grep 8080

tree

此时如果想打印某个目录下的所有文件,可以使用tree命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
[liudiwei@master _code]$ tree
.
`-- preprocessing
|-- compareTwoFile.py
|-- download.py
|-- extractChainFromSeq.py
|-- extractSeqByChain.py
|-- formatChain.py
|-- generateSeqFromDSSP.py
|-- getProteinFromChain.py
|-- getProteinNameFromDir.py
|-- pdbToDSSP.py
`-- _README.txt

此外,如果只想要显示目录的话,可以使用添加-d参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[liudiwei@master DNA_BP]$ tree -d
.
|-- _code
| `-- preprocessing
|-- _data
| `-- Exp_DBPI
| |-- DBPI_Datasets
| |-- dssp_testset
| | `-- format
| |-- dssp_trainset
| | `-- format
| |-- pdb_testset
| `-- pdb_trainset
|-- _feature
| `-- feature_extraction
`-- paper_Graham

14 directories

如果你不想看到全部的文件?可以加上“-P 通配符”的方法来只列出某种文件:

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
[liudiwei@master DNA_BP]$ tree -P "*.py"
.
|-- _code
| `-- preprocessing
| |-- compareTwoFile.py
| |-- download.py
| |-- extractChainFromSeq.py
| |-- extractSeqByChain.py
| |-- formatChain.py
| |-- generateSeqFromDSSP.py
| |-- getProteinFromChain.py
| |-- getProteinNameFromDir.py
| `-- pdbToDSSP.py
|-- _data
| `-- Exp_DBPI
| |-- DBPI_Datasets
| |-- dssp_testset
| | `-- format
| |-- dssp_trainset
| | `-- format
| |-- pdb_testset
| `-- pdb_trainset
|-- _feature
| `-- feature_extraction
`-- paper2015_Graham

软硬连接

硬链接

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

1
ln 源文件 目标文件

例如,建立一个硬连接/usr/local/bin/less指向/bin/less。当删除源文件/bin/less时,目标文件无影响。

1
ln /bin/less /usr/local/bin/less

软连接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

1
ln -s 源文件 目标文件

例如,建立一个软连接/usr/local/bin/less指向/bin/less。当删除源文件/bin/less时,目标文件有影响。

1
ln -s /bin/less /usr/local/bin/less

修改密码

1
2
3
4
# 超级权限登陆
sudo su

passwd + 用户名(非root)

watch

我们设置为每 10s 显示一次显存的情况

1
watch -n 10 nvidia-smi

find

非递归搜索包含指定字符串的文件

第一个例子让我们来搜索 /etc/ 目录下所有包含 stretch 字符串的文件,但不去搜索其中的子目录:

1
2
3
# grep -s stretch /etc/*
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"

grep 的 -s 选项会在发现不存在或者不能读取的文件时隐藏报错信息。结果显示除了文件名之外,还有包含请求字符串的行也被一起输出了。

递归地搜索包含指定字符串的文件

上面案例中忽略了所有的子目录。所谓递归搜索就是指同时搜索所有的子目录。

下面的命令会在 /etc/ 及其子目录中搜索包含 stretch 字符串的文件:

1
grep -R stretch /etc/*

搜索所有包含特定单词的文件

上面 grep 命令的案例中列出的是所有包含字符串 stretch 的文件。也就是说包含 stretches , stretched 等内容的行也会被显示。 使用 grep 的 -w 选项会只显示包含特定单词的行:

1
2
3
4
5
6
7
8
9
10
11
12
# grep -Rw stretch /etc/*
/etc/apt/sources.list:# deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:#deb cdrom:[Debian GNU/Linux testing _Stretch_ - Official Snapshot amd64 NETINST Binary-1 20170109-05:56]/ stretch main
/etc/apt/sources.list:deb http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb-src http://ftp.au.debian.org/debian/ stretch main
/etc/apt/sources.list:deb http://security.debian.org/debian-security stretch/updates main
/etc/apt/sources.list:deb-src http://security.debian.org/debian-security stretch/updates main
/etc/dictionaries-common/words:stretch
/etc/dictionaries-common/words:stretch's
/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
/etc/os-release:PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
/etc/os-release:VERSION="9 (stretch)"

显示包含特定文本的文件名

上面的命令都会产生多余的输出。下一个案例则会递归地搜索 etc 目录中包含 stretch的文件并只输出文件名:

1
2
3
4
5
# grep -Rl stretch /etc/*
/etc/apt/sources.list
/etc/dictionaries-common/words
/etc/grub.d/00_header
/etc/os-release

查看分区的剩余空间大小

1
2
3
# 大小以MB和GB为单位
df -hl
ls -lh

查看当前路径下,最大深度为1查看各个文件夹所占大小

1
2
3
4
5
6
7
8
du -h --max-depth=1 .
显示结果为:
6.1G ./anaconda36
46G ./Code
4.0K ./ft_local
6.0G ./anaconda3
1.1G ./usr
59G .

统计文件夹下的文件数目

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

查看局域网所有IP和用户名

首先,安装nmap,命令如下:

1
sudo apt install nmap

使用ifconfig命令得知当前电脑的IP地址为192.168.123.188,则使用如下命令得知与当前电脑所有同在一个局域网的IP地址和用户名:

1
sudo nmap -sL 192.168.123.*

返回的部分结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo nmap -sL 192.168.123.*

Starting Nmap 7.60 ( https://nmap.org ) at 2020-02-13 18:58 CST
Nmap scan report for 192.168.123.0
Nmap scan report for RT-AC54U.lan (192.168.123.1)
Nmap scan report for chuangmi-plug-m1_miio61456883.lan (192.168.123.2)
Nmap scan report for 192.168.123.3
Nmap scan report for 192.168.123.4
Nmap scan report for 192.168.123.5
Nmap scan report for 192.168.123.6
Nmap scan report for 192.168.123.7
Nmap scan report for mxq-station-ubuntu.lan (192.168.123.8)
Nmap scan report for 192.168.123.9
Nmap scan report for 192.168.123.10
....

可以看到,还上面还有一台电脑连接着,IP地址为192.168.123.8,用户为mxq-station-ubuntu

ldd 查看程序依赖库

作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。

示例:查看test程序运行所依赖的库:

1
2
3
4
5
6
/opt/app/todeav1/test$ldd test
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)
  • 第一列:程序需要依赖什么库
  • 第二列: 系统提供的与程序需要的库所对应的库
  • 第三列:库加载的开始地址

通过上面的信息,我们可以得到以下几个信息:

  1. 通过对比第一列和第二列,我们可以分析程序需要依赖的库和系统实际提供的,是否相匹配
  2. 通过观察第三列,我们可以知道在当前的库中的符号在对应的进程的地址空间中的开始位置

如果依赖的某个库找不到,通过这个命令可以迅速定位问题所在。

Argument list too long

当使用mv等指令时,若文件太多,就会提示Argument list too long,遇到这个问题,采用如下方式解决:

1
2
3
4
$ ulimit -s
8192

$ ulimit -s 65536

参考

【整理】ubuntu ln命令简单学习
如何在linux下查看目录的剩余空间大小
Linux统计文件夹下的文件数目)
How to send list of file in a folder to a txt file in Linux
Display list of computers on a LAN in Linux
ldd 查看程序依赖库
“Argument list too long”: How do I deal with it, without changing my command?
linux查看目录大小 linux统计目录大小并排序 查看目录下所有一级子目录文件夹大小 du -h —max-depth=1 |grep []

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道