命令行界面?
是的,它是在黑色屏幕上的白色(或者绿色)的显示区域,
最好的工作流程是取决于个人的。有些人倾向于图形界面,
术语
刚刚接触Unix或者Linux的人在面对诸如终端,
从用户的角度来看,它们之间似乎是没有太大区别的,但事实上,
在过去的时候,这三者是独立的硬件。
终端就像大型主机的界面。它一般具有计算、
shell就是一个可以读取用户输入,
shell解释执行命令行中输入的命令,
大多数现代的Linux发行版,如同Mac OSX一样,使用一个shell,BASH(译注:默认的,
让我们说说 BASH
BASH 代表 Bourne Again Shell。它被作为 Bourne Shell 的新版本于1989年发布,之后成为了 Unix 系统的默认 shell。它由斯蒂芬·伯恩(Stephen Bourne)编写,用以取代 Thompson Shell。老版的 Bourne Shell 至今仍工作在一些 Unix 系统中。通常你可以用 /bin/sh 找到它。总之,尽管 Bourne Shell 在新的 Linux 发行版中 已经为 BASH 取代,/bin/sh 和 /bin/bash 都能被 BASH 运行。
BASH的提示符
你永远都会碰到BASH的提示符。
csaba@csaba-pc ~/Personal/Programming/NetTuts$
我的BASH提示符就像上面那个样子。 第一个词csaba是我的用户名,后接@和我的主机名称,
当然,这仅仅是一个简单的例子。你可以放更多的东西进提示符中。
PS1,PS2,PS3和PS4是BASH的特殊变量,
csaba@csaba-pc ~/Personal/Programming/NetTuts $ echo $PS1 \[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]
输入命令echo $PS1,然后你就看见了我的PS1变量。在BASH中,
输出代表着一种格式。\[\033[01;32m\]表示绿色,
以“\”开头的特殊字符具有特别的意义。反之“\”
- \a- ASCII响铃字符(07)
- \d– 以“Weekday Month Date”格式显示日期
- \D{format}–
format被传递给strftime(3) 并把相应的结果插入到提示字符串中; 如果format为空则代表本地时间. 必须有在括号 - \e– ASCII转义字符(033)
- \h– 到第一个 `.’前代表主机名称
- \H– 主机名称
- \j– 当前被Shell管理工作数
- \l– Shell终端设置名称的基本名
- \n– 新行
- \r– 回车
- \s– Shell的名称
- \T– 12小时制当前时间,格式为 HH:MM:SS
- \t– 24小时制当前时间,格式为 HH:MM:SS
- \@– 12小时制当前时间,格式为am/pm
- \A– 24小时制当前时间,格式为 HH:MM
- \u– 当前用户的名称
- \v– BASH版本
- \V– BASH发行备注,版本号+补丁
- \w– 当前工作目录,其中$HOME被缩写成”~”(
使用PROMPT_DIRTRIM的值) - \W– 当前工作目录的basename,$HOME被缩写成”~”
- \!– 命令的使用次数
- \#– 命令号
- \$– 命令提示符,如果UID是0则显示为#,否则为$
- \nnn– 8进制数据nnn代表的字符
- \\– 反斜杠
- \[- 开始一个非打印字符序列,
这个序列可以嵌入一个终端控制序列到提示中 - \]– 非打印字符序列结束
操作目录和文件
在命令行环境中,每个人都要做的一件事就是操作文件系统,创建,
csaba@csaba-pc ~ $ mkdir ~/tmp/NetTuts csaba@csaba-pc ~ $ cd ~/tmp/NetTuts/ csaba@csaba-pc ~/tmp/NetTuts $ mkdir ./AnotherDir csaba@csaba-pc ~/tmp/NetTuts $ mkdir ./SecondDir csaba@csaba-pc ~/tmp/NetTuts $ touch ./SecondDir/aFile csaba@csaba-pc ~/tmp/NetTuts $ touch ./SecondDir/AnotherFile csaba@csaba-pc ~/tmp/NetTuts $ cd ./SecondDir/ csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ pushd ~/tmp/NetTuts ~/tmp/NetTuts ~/tmp/NetTuts/SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ popd ~/tmp/NetTuts/SecondDir csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile csaba@csaba-pc ~/tmp/NetTuts/SecondDir $
逐句解释:
- 在/home/csaba/
tmp下创建一个名为NetTuts的目录 - 将刚刚创建的目录切换为当前目录
- 在当前目录下创建一个名为“AnotherDir”的目录
- 在当前目录下创建一个名为“SecondDir”的目录
- 使用touch命令在“SecondDir”
目录下创建两个空文件 - 切换当前目录到SecondDir.
- 使用pushd命令切换目录到~/tmp/
NetTuts来把当前目录存储到堆栈之中 - 列出目录~/tmp/NetTuts下的所有文件
- 使用popd命令来返回前一个目录,
这样会从堆栈中获取并且移除最顶层的目录 - 再一次列出内容会看到我们上几步所创建的两个文件
当然,对于命令行你们可以有个万能文件管理器,
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ mcedit ./aFile
输入/输出
每个命令必须和命令行环境交互。命令需要输入和提供输出。
标准输入是命令读取信息的来源。键盘是默认标准输入,
标准输出是命令的输出会被发送到的地方。默认是当前控制台,
标准错误是命令输出错误的地方。默认当前控制台,常被称为”
到目前为止,我们可以定义简单的状态,
在Unix(或类unix系统)中, 所有的东西都会被抽象成文件,你的键盘是文件,你的鼠标是文件,
你的屏幕是文件,程序是文件, 文本是文件,等等
文件描述符是一个整形数字用于操作系统引用打开的文件, 所有的unix系统至少包含三个文件描述符.
- 描述符 no. 0 – 标准输入
- 描述符 no. 1 – 标准输出
- 描述符 no. 2 – 标准错误输出
重定向
Unix系统有一个非常强大的特性:因为所有资源都是文件,
$ someCommand <
但当要你的命令从一个文件中读取内容你要怎么做呢?
$ someCommand < /your/file.txt
如果你要你的命令执行结果输出到一个文件,你可以使用>操作符。
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile csaba@csaba-pc ~/tmp/NetTuts/SecondDir $
你可以把使用如下命令将结果发送到一个文件:
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al > ./ThirdFile
ThirdFile的内容如下:
total 12 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 12 Feb 19 21:19 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile -rw-r--r-- 1 csaba csaba 0 Feb 24 00:06 ThirdFile
比方说,我们要导航到上级目录,列出它所有的文件,
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ cd .. csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al >> ./SecondDir/ThirdFile
于是我们的文件内容就是这样了:
total 12 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 12 Feb 19 21:19 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile -rw-r--r-- 1 csaba csaba 0 Feb 24 00:06 ThirdFile total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir
输入/输出重定向
我们可以综合我们的知识,以不同的方向重定向标准错误(
csaba@csaba-pc ~/tmp/NetTuts $ ls -al > ./SecondDir/ThirdFile csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1> ./SecondDir/ThirdFile
在第二个命令中,在重定向之前我们指定标准输出的来源。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1 > ./SecondDir/ThirdFile csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1 1> ./SecondDir/ThirdFile
当然,这些结果会出错:”ls:不能访问1:
csaba@csaba-pc ~/tmp/NetTuts $ ls -al inexistenFilder > ./SecondDir/ThirdFile ls: cannot access inexistenFilder: No such file or directory csaba@csaba-pc ~/tmp/NetTuts $ ls -al inexistenFilder 2> ./SecondDir/ThirdFile
如你所见,
一个实际的I/0重导例子
当你需要在命令行寻找一些文件时,你基本上只有两个选择。
我们来用这个命令演示一个实时搜索,它比本地命令搜索的更精确,
csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./SecondDir/ total 16 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 12 Feb 19 21:19 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile -rw-r--r-- 1 csaba csaba 61 Feb 24 00:23 ThirdFile csaba@csaba-pc ~/tmp/NetTuts $ find . -name ThirdFile ./SecondDir/ThirdFile
我打印这两个ls命令是为了让你很方便的看明白目录结构,
小贴士:参考当前目录……参考上目录
find命令的第二个参数是-name,紧接着是文件的名字。
csaba@csaba-pc ~/tmp/NetTuts $ find . -name ?File ./SecondDir/aFile csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile
?代表一个单个字母,而*指的是任意的字母数量。
接下来,我们将创建一个目录同时使它被我们的用户所不能读。
csaba@csaba-pc ~/tmp/NetTuts $ mkdir ThirdDir csaba@csaba-pc ~/tmp/NetTuts $ chmod 000 ThirdDir csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile find: `./ThirdDir': Permission denied
在这个例子中,
csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File 2> /dev/null ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile
我们重定向标准错误输出到/dev/null里面。
csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File 2> /dev/null 1>./SecondDir/ThirdFile csaba@csaba-pc ~/tmp/NetTuts $
正如你看见的,这个命令在屏幕上面什么也没有输出,
find . -name *File 1>./SecondDir/ThirdFile 2>&1
重定向被解释执行是从右到左的。首先开始执行的是 2>&1,
再来谈一下用户权限
本文中所谈及的所有权限问题都仅限于 *nix 操作系统。我对最新的 Windows 版本并不熟悉,但微软在其文件系统中使用了一种不同的权限概念。
用户和组
同一台电脑中可以又数个不同的用户。事实上,
你可以在 /etc/passwd 文件中找到现有用户的列表。
组的列表存放在 /etc/group 文件中。一个组拥有一个名字和一个 ID (GID),并拥有另个或数个用户。
拥有者
文件有其拥有者,默认情况,创建那个文件的用户就是它的拥有者。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir d--------- 2 csaba csaba 4096 Feb 24 00:44 ThirdDir<span></span>
在ls -al命令中,每一个文件的拥有者会像“用户 组”(在这个例子中是“csaba csaba”)输出。
csaba@csaba-pc ~/tmp/NetTuts $ chown csaba:users ./AnotherDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir d--------- 2 csaba csaba 4096 Feb 24 00:44 ThirdDir
chown命令用途是改变拥有者(CHange OWNer)。它有一个简单的用法:chown 用户:组 文件路径。一个用户只能将“组”这个位置改成一个他所在的组。
这里有三种关于文件的权限:
- r – 读取
- w – 写入
- x – 执行
请注意: 如果一个文件夹内的文件可以被列出,
看看前面的例子,每一个文件系统的对象的权限在输出的开头(
这三种权限被包含于三个组, 即每个组都有这三种权限:
- 用户 – 对拥有者的权限
- 组 – 对这个文件所在组的成员的权限
- 其他人 – 对其他想要读取这个文件或文件夹的用户的权限
这个叫做ThirdDir的文件夹没有任何标志位,
chown: changing ownership of ‘./AnotherDir/’: Operation not permitted csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./ThirdDir/* ls: cannot access ./ThirdDir/*: Permission denied
但是拥有者拥有改变它的权限的权力:
csaba@csaba-pc ~/tmp/NetTuts $ chmod +rwx ./ThirdDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./ThirdDir total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:44 . drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 .. csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:44 ThirdDir
chmod命令可以更改一个文件系统对象的权限,,它的用法是:
请注意: 用这个方式添加的读写和可执行权限,会作用于拥有者,
csaba@csaba-pc ~/tmp/NetTuts $ chmod +r-w ./ThirdDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir dr-xr-xr-x 2 csaba csaba 4096 Feb 24 00:44 ThirdDir
第二个例子中,我们选择性的加上读取的权限,去掉了写入的权限,
但是有时,你需要使用二进制的表示。
- rwx: 每一个bit都设置成1: 111. 十进制的7.
- rw-: 由110代表. 十进制 6.
- r-x: 由101代表. 十进制 5.
- r–: 100. 十进制 4.
- -wx: 011. 十进制 3.
- -w-: 010. 十进制 2.
- –x: 001. 十进制 1.
- —: 000. 十进制 0.
chmod命令可以接受一个由0-7数字组成的字符串。
csaba@csaba-pc ~/tmp/NetTuts $ chmod 765 ./ThirdDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir drwxrw-r-x 2 csaba csaba 4096 Feb 24 00:44 ThirdDir
这个命令设置了读取,写入,可执行给拥有者,读取,写入,
Cat,Sed,Pipe
下页是一些非常有用的命令。
Cat
这个命令使用你能读出文件的内容。
csaba@csaba-pc ~/tmp/NetTuts $ cat ./SecondDir/ThirdFile ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile find: `./ThirdDir': Permission denied
Grep
Grep查找一个模式并输出相匹配的行。
csaba@csaba-pc ~/tmp/NetTuts $ grep "AnotherFile" ./SecondDir/ThirdFile ./SecondDir/AnotherFile
加入–color选项,可以在结果行高亮匹配的内容。
Pipe 管道
管道使用 | 这个字符表示; 它接受一个命令的输出并将其传给|后的命令. 这听起来好像挺简单的.但确是复杂的, 那一个符号| 实现起来却用了几万行代码, 你可以这样用:
csaba@csaba-pc ~/tmp/NetTuts $ cat ./SecondDir/ThirdFile | grep "Another" ./SecondDir/AnotherFile
这实际上运行cat命令, 而不是输出结果发送到标准输出, 管道将标准输出作为标准输入传给grep命令.
The History of UNIX(unix的历史): 这是一个很有年代的视频,来自AT&T, 这是一个非常不错的视频.如果你只对PIPES感觉趣, 可以快进到4:56
Sed
sed 命令可以让你在输出中执行一些正则表达式操作。 sed可以用在标准输出或者管道命令中,
csaba@csaba-pc ~/tmp/NetTuts $ cat ./SecondDir/ThirdFile | grep "Another" | sed -e "s/AnotherFile/MyFile/" ./SecondDir/MyFile
这个例子添加了sed命令。有了sed的帮助,
sed命令有很多选项,使用-e 参数指定要执行的正则表达式。如果你对正则表达式不熟悉的话,
定义你自己的命令行
假设你需要经常执行下面的连接ssh的命令:
csaba@csaba-pc ~/tmp/NetTuts $ ssh my_username@complicated.server.address.com -p 8743
你可以通过创建一个自定义的命令saysshcon来缩短这个命
csaba@csaba-pc ~/tmp/NetTuts $ alias sshcon='ssh my_username@complicated.server.address.com -p 8743'
但是alias是临时的,当你退出登录之后就会失效。
.bashrc和.bash.profile文件
.bashrc文件一般位于你的用户目录。
csaba@csaba-pc ~/tmp/NetTuts $ mcedit ~/.bashrc
把你的代码加到文件末尾,按F2保存文件,
一些操作系统, 像Solaris, 可能没有~/.bashrc文件。遇到这种情况,你可以编辑~/
隐藏文件: 以一个点 (.) 开头的文件表明这个文件是隐藏文件。
些许网络命令
让我们来玩些许网络命令。
Ping
ping命令是一种用来检测一个服务器在线并可访问的一种简单方
csaba@csaba-pc ~/tmp/NetTuts $ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=44.0 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=47 time=65.6 ms ^C --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 44.081/54.871/65.661/10.790 ms csaba@csaba-pc ~/tmp/NetTuts $ ping inexistent.server ping: unknown host inexistent.server
它的语言简单:ping IP_address_or_name。如果服务器可访问,
Traceroute
traceroute命令可以得出从你电脑到目标设备的路由。
csaba@csaba-pc ~/tmp/NetTuts $ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 192.168.111.1 (192.168.111.1) 0.239 ms 0.322 ms 0.317 ms 2 * * * 3 95.77.39.65 (95.77.39.65) 45.754 ms 45.887 ms 46.024 ms 4 ro-cj01a-rd4-xe-1-2-1-v1643.upcnet.ro (84.116.216.1) 83.121 ms ro-cj01a-rd4-xe-1-2-0-v1642. upcnet.ro (84.116.225.253) 83.289 ms ro-cj01a-rd4-xe-1-3-0-v1713. upcnet.ro (84.116.217.26) 83.119 ms 5 84.116.217.93 (84.116.217.93) 83.153 ms 84.116.217.85 (84.116.217.85) 77.407 ms 77.350 ms 6 84-116-131-53.aorta.net (84.116.131.53) 77.327 ms 53.442 ms 53.357 ms 7 84.116.132.174 (84.116.132.174) 53.211 ms 48.923 ms 53.186 ms 8 72.14.219.9 (72.14.219.9) 85.040 ms 72.14.214.29 (72.14.214.29) 67.289 ms 72.216 ms 9 209.85.241.110 (209.85.241.110) 48.129 ms 47.389 ms 209.85.240.64 (209.85.240.64) 45.096 ms 10 72.14.239.62 (72.14.239.62) 47.254 ms 72.14.236.68 (72.14.236.68) 51.770 ms 72.14.239.62 (72.14.239.62) 43.242 ms 11 209.85.254.118 (209.85.254.118) 46.137 ms 209.85.254.116 (209.85.254.116) 52.165 ms 209.85.254.114 (209.85.254.114) 102.070 ms 12 * * * 13 google-public-dns-a.google.com (8.8.8.8) 47.471 ms 47.986 ms 43.645 ms
路由表
*nix和Windows系统都有路由命令。
csaba@csaba-pc ~/tmp/NetTuts $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.111.1 0.0.0.0 UG 0 0 0 eno1 loopback localhost 255.0.0.0 UG 0 0 0 lo 192.168.111.0 * 255.255.255.0 U 1 0 0 eno1
第一列是网络连接或通讯的目的地址。“default”
第二列是连接用以到达目的所使用的网关。
第三个有趣的是最后一列:”Iface“。
小贴士:如果你找不到route命令,可以试一下netstat -nr。它会产生相似的输出。
网络配置
如果你想要瞅一眼网络配置,只需在命令行中键入 ifconfig。
csaba@csaba-pc ~/tmp/NetTuts $ ifconfig eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.111.10 netmask 255.255.255.0 broadcast 192.168.111.255 inet6 fe80::4e72:b9ff:fef6:c9ff prefixlen 64 scopeid 0x20<link> ether 4c:72:b9:f6:c9:ff txqueuelen 1000 (Ethernet) RX packets 2935016 bytes 696255521 (664.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5586410 bytes 6331639146 (5.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 1 collisions 0 device interrupt 17 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 7396 bytes 599533 (585.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 7396 bytes 599533 (585.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
这里又很多信息。首先,我们拥有两部分,每个网络适配器一个。
在名字的同一行中,则是接口的当前状态。这里,接口状态为 UP、broadcast、running等。 第二行则是 IPv4 IP 地址、子网掩码和网关地址。第三行与第二行相似,但对象是 IPv6。第四行以 “ether” 开始,是网卡的 MAC 地址,后面的数行则显示的是数据传输的统计信息。
当前网络连接
另一个非常有用的命令是netstat。
csaba@csaba-pc ~/tmp/NetTuts $ netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:59017 0.0.0.0:* LISTEN tcp 0 40 192.168.111.10:59017 109.99.97.81:53681 ESTABLISHED tcp 0 0 192.168.111.10:51137 109.99.97.81:55175 TIME_WAIT tcp 0 0 192.168.111.10:34715 173.194.70.109:993 ESTABLISHED tcp 0 0 192.168.111.10:34722 173.194.70.109:993 ESTABLISHED tcp 0 1 192.168.111.10:42876 86.162.58.4:7055 LAST_ACK tcp6 0 0 :::111 :::* LISTEN tcp6 0 0 :::4434 :::* LISTEN tcp6 0 0 :::59017 :::* LISTEN
每一行表示一个处于特定状态的连接,在这个例子中,