Linux常用命令以及举例
文章目录1 帮助命令1.1 man帮助命令1.2 --help帮助命令1.3 info帮助命令2 查看命令2.1 ls命令2.1.1 ls -l 命令2.1.2 ls -a 命令2.2 cat/more/less 查看命令2.2.1 cat2.2.2 more2.2.3 less3 mkdir创建目录命令3.1 创建单个目录3.2 创建多层目录4 cd 切换目录4.1 改变活动目录4.2 绝对路径
文章目录
1 帮助命令和快捷键
1.1 快捷键
在开始学习 Linux
命令之前,有这么一些快捷方式,是必须要提前掌握的,它将贯穿整个 Linux
使用生涯
- 方向键
↑ ↓
:通过上下方向键↑ ↓
来调取过往执行过的Linux
命令; Tab
:命令或参数仅需输入前几位就可以用Tab
键补全;Ctrl + R
:用于查找使用过的命令(history
命令用于列出之前使用过的所有命令,然后输入!
命令加上编号(!2
)就可以直接执行该历史命令);Ctrl + L
:清除屏幕并将当前行移到页面顶部;Ctrl + C
:中止当前正在执行的命令;Ctrl + U
:从光标位置剪切到行首;Ctrl + K
:从光标位置剪切到行尾;Ctrl + W
:剪切光标左侧的一个单词;Ctrl + Y
:粘贴Ctrl + U | K | Y
剪切的命令;Ctrl + A
:光标跳到命令行的开头;Ctrl + E
:光标跳到命令行的结尾;Ctrl + D
:关闭Shell
会话
1.2 帮助命令
1.2.1 man帮助命令
安装更新
yum install -y man-pages --> 安装
mandb --> 更新
man
命令没有内部与外部命令的区分
man
查看关键词的man page(manual page)
(手册页)查看ls
的manpage(manual page)
可以输入:man ls
就可以查看ls的manpage
$ man ls
man
手册种类:
- 可执行程序或
Shell
命令; - 系统调用(
Linux
内核提供的函数); - 库调用(程序库中的函数);
- 文件(例如
/etc/passwd
); - 特殊文件(通常在
/dev
下); - 游戏;
- 杂项(
man(7) ,groff(7)
); - 系统管理命令(通常只能被
root
用户使用); - 内核子程序
man + 数字 + 命令
:
输入
man + 数字 + 命令/函数
,可以查到相关的命令和函数,若不加数字,man
默认从数字较小的手册中寻找相关命令和函数
man 3 rand --> 表示在手册的第三部分查找 rand 函数
man ls --> 查找 ls 用法手册
1.2.2 --help帮助命令
help
只能用于内部命令,不能用于外部命令
查看关键词的快捷帮助
而不是man page
(手册页),可以使用--help
查看ls
的快速帮助,输入ls --help
快速帮助信息就会打印到终端上
ls --help
1.2.3 info帮助命令
另外一个帮助命令,可以显示出更完整的最新的信息。 得到的信息比 man
还要多,info
来自自由软件基金会的 GNU
项目,是 GNU
的超文本帮助系统,能够更完整的显示出 GNU
信息。所以得到的信息当然更多
man
和 info
就像两个集合,它们有一个交集部分,但与 man
相比,info
工具可显示更完整的GNU
工具信息。若 man
页包含的某个工具的概要信息在info
中也有介绍,那么 man
页中会有请参考 info 页更详细内容
的字样。
查看ls
的info
信息,可以输入:info ls
,可以显示ls
的info
信息。
info ls
2 查看命令
2.1 ls命令
ls
查看指定目录下的内容
2.1.1 ls -l 命令
查看当前目录内容的详细信息
2.1.2 ls -a 命令
查看当前目录中的所有文件(包括隐藏文件)
具体的ll命令
可以查看此处ll查询结果的详细分析
2.2 cat/more/less 查看命令
2.2.1 cat
cat filename
cat
用来查看文本文件中的内容
$ls
main.c Makefile
$cat main.c
the content of main.c
若cat
后不加任何文件名,则cat
进程就会一直运行,不能自行退出,这时按下Ctrl + Z
即可结束该进程。
2.2.2 more
more filename
:more
与cat
的作用差不多,只是当文件内容多于一屏时,按下空格可以滚到下一屏继续阅读,但是不可以回退
$ more main.c
content of main.c
...
press space to continue
2.2.3 less
less filename
less
的功能比more
更强大,当文件内容多于一屏时,按j可以向下滚动,按k
可以向上滚动。
$ less main.c
content of main.c
...
press j to down
press k to up
【快捷操作】
空格键
:前进一页(一个屏幕);b 键
:后退一页;回车键
:前进一行;y 键
:后退一行;上下键
:回退或前进一行;d 键
:前进半页;u 键
:后退半页;q 键
:停止读取文件,中止 less 命令;= 键
:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;h 键
:显示帮助文档;/ 键
:进入搜索模式后,按 n 键跳到一个符合项目,按 N 键跳到上一个符合项目,同时也可以输入正则表达式匹配
2.3 查看Linux版本
cat /etc/redhat-release
3 mkdir创建目录命令
3.1 创建单个目录
在当前目录下创建一个名为akaedu
的目录
$ mkdir akaedu
3.2 创建多层目录
在当前目录下创建目录a
, 再在a
目录下创建b
$ mkdir -p a/b
4 cd 切换目录
4.1 改变活动目录
假设当前目录下有一个a
目录,要切换到a
目录下可以输入
$ ls
main.c Makefile akaedu a
$pwd
/home/ymqqqqdx/
$cd a
$pwd
/home/ymqqqqdx/a
4.2 绝对路径
假设要切换到用户主目录下的a
目录,可以使用绝对路径
$ pwd
/
$ cd /home/ymqqqqdx/a
$ pwd
/home/ymqqqqdx/a
4.3 主目录
每一个用户都有一个对应的主目录,其绝对路径为/home/usrname
要切换到主目录时,只需输入cd
,即可回到用户主目录。另外~
代表当前用户的主目录,~/a
即代表主目录下的a目录
$pwd
/home/ymqqqqdx/a/b/c/d
$cd
$pwd
/home/ymqqqqdx/
$cd ~/a
/home/ymqqqqdx/a
4.4 …(上层目录)和.(当前目录)
..
代表上层目录 .
代表当前目录,若要运行当前目录下的a.out
程序,即可输入./a.out
运行程序。
$pwd
/home/ymqqqqdx/a/b/c/d
$cd ..
$pwd
/home/ymqqqqdx/a/b/c
$./a.out
hello world!
5 删除命令
5.1 删除目录
5.1.1 rmdir用来删除空目录
$pwd
/home/ymqqqqdx/
$ls
a main.c Makefile
$rmdir a
$ls
main.c Makefile
5.1.2 删除目录
删除a
目录
rm -r a
,若目录非空,会提示是否删除,若不需要提示,输入rm -rf a
就可以直接删除a
目录不需要确认。
$ls
main.c Makefile a
$rm -rf a
$ls
main.c Makefile
5.2 删除文件
5.2.1 删除常规文件
删除1.c
文件,rm 1.c
$ls
main.c Makefile 1.c
$rm 1.c
$ls
main.c Makefile
5.2.2 删除非常规文件
此处非常规文件是指root
用户都删不了的文件,需要借助chattr
和lsattr
命令
lsattr
命令是显示chattr
命令设置的文件属性,当确定了属性后,用chattr
修改
lsattr /etc/resolv.conf
会显示如下属性
----i-------- /etc/resolv.conf
chattr
参数说明:
+
:在原有参数设定基础上,追加参数。-
:在原有参数设定基础上,移除参数。=
:更新为指定参数设定。A
:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。S
:硬盘I/O同步选项,功能类似sync。a
:即append
,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。c
:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。d
:即no dump
,设定文件不能成为dump
程序的备份目标。i
:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件系统的安全设置有很大帮助。j
:即journal
,设定此参数使得当通过mount
参数:data=ordered
或者data=writeback
挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem
被设定参数为data=journal
,则该参数自动失效。s
:保密性地删除文件或目录,即硬盘空间被全部收回。u
:与s
相反,当设定为u
时,数据内容其实还存在磁盘中,可以用于undeletion
各参数选项中常用到的是a和i
,所以补充关于权限:i和a
的说明:
i
:不可修改权限 例:chattr u+i filename
则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename
就可以了。查看文件是否设置了i
权限用lsattr filename
。a
:只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a
设置追加权限。
注意:chattr
不能直接使用,需要如下处理
cd /usr/bin
cp chattr chattr.new
chmod u+x chattr.new
chattr.new -i chattr
rm -rf chattr.new
chmod u+x chattr
6 touch命令
touch
命令:创建空文件
创建一个空文件,touch foo.c
,这样就在当前目录创建了foo.c
文件。
touch
的另外一个作用是更新当前文件
的修改时间
,若已经存在foo.c
文件,输入touch foo.c
后,用ls -l
可以看到文件修改时间已更新为当前时间
$ls
main.c Makefile
$touch foo.c
main.c Makefile foo.c
$ls –l
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 01:04 foo.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 00:31 main.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 00:31 Makefile
$touch main.c
$ls –l
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 01:04 foo.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 01:06 main.c
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 0 2011-08-27 00:31 Makefile
7 复制和链接
7.1 cp复制命令
7.1.1 复制单个文件
cp filename newfilename
,复制filename
为newfilename
$ls
main.c Makefile
$cp main.c new.c
$ls
main.c Makefile new.c
$cp main.c ~/new.c
$ls ~/
new.c ...
7.1.2 复制文件夹
cp -r a/ b/
,复制a
目录为b
目录。
$ls
main.c Makefile a
$cp -r a b
$ls
main.c Makefile a b
7.2 scp远程复制
scp
是 secure copy
的缩写, scp
是 linux
系统下基于 ssh
登陆进行安全的远程文件拷贝命令。
scp
是加密的,rcp
是不加密的,scp
是 rcp
的加强版。
scp [可选参数] file_source file_target
参数说明:
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项
7.2.1 本地复制远程
# 复制文件
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
# 复制文件夹
scp -r local_folder remote_username@remote_ip:remote_folder
应用实例:
#复制文件
scp /home/space/music/1.mp3 root@www.test.com:/home/root/test/music
#复制文件夹
scp -r /home/space/music/ www.test.com:/home/root/test/
7.2.2 远程复制本地
从远程
复制到本地
,只要将从本地复制到远程的命令的后2个参数调换顺序
即可,如下实例
应用实例:
#复制文件
scp root@www.test.com:/home/root/test/music /home/space/music/1.mp3
#复制文件夹
scp -r www.test.com:/home/root/test/ /home/space/music/
7.3 rsync
rsync
命令主要用于远程同步文件。它可以同步两个目录,不管它们是否处于同一台电脑。它应该是最常用于增量备份
的命令了。它就是智能版的 scp
命令。
软件安装:yum install rsync
基础用法
rsync -arv Images/ backups/ # 将Images 目录下的所有文件备份到 backups 目录下
rsync -arv Images/ root@192.x.x.x:backups/ # 同步到服务器的backups目录下
常用参数:
-a
:保留文件的所有信息,包括权限,修改日期等;-r
: 递归调用,表示子目录的所有文件也都包括;-v
: 冗余模式,输出详细操作信息。
默认地, rsync
在同步时并不会删除目标目录的文件,例如你在源目录中删除一个文件,但是用 rsync
同步时,它并不会删除同步目录中的相同文件。如果向删除也可以这么做: rsync -arv --delete Images/ backups/
7.4 链接
ln
英文 Link
的缩写,表示创建链接。
学习创建链接之前,首先要理解链接是什么,我们先来看看 Linux
的文件是如何存储的:
Linux
文件的存储方式分为3个部分,文件名
、文件内容
以及权限
,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过inode
标识绑定到文件内容。
Linux
下有两种链接类型:硬链接
和软链接
:
硬链接
不会创建inode
,它跟源文件是同一个文件,inode
也跟源文件是同一个,因此它是不能跨文件系统的;软链接
会新建一个新的文件和inode
,它类似于指针指向源文件,所以它是可以跨文件系统的
7.4.1 硬链接
使链接的两个文件共享同样文件内容,就是同样的 inode
,一旦文件1
和文件2
之间有了硬链接
,那么修改任何一个文件,修改的都是同一块内容,它的缺点是,只能创建指向文件的硬链接,不能创建指向目录的(其实也可以,但比较复杂)而软链接都可以,因此软链接使用更加广泛。
ln file1 file2 --> 创建 file2 为 file1 的硬链接
如果我们用 rm file1
来删除 file1
,对 file2
没有什么影响,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了 file1
与 file2
后,它们共同指向的文件内容才会消失。
7.4.2 软链接
软链接就类似 windows 下快捷方式。
ln -s file1 file2
执行 ls -l
命名查看当前目录下文件的具体信息
total 0
-rw-r--r-- 1 root root 0 Jan 14 06:29 file1
lrwxrwxrwx 1 root root 5 Jan 14 06:42 file2 -> file1 # 表示file2 指向 file1
其实 file2 只是 file1 的一个快捷方式,它指向的是 file1 ,所以显示的是 file1 的内容,但其实 file2 的 inode 与 file1 并不相同。如果我们删除了 file2 的话, file1 是不会受影响的,但如果删除 file1 的话, file2 就会变成死链接,因为指向的文件不见了
8 打包/解包
8.1 tar命令
常用参数:
-cvf
:表示 create(创建)+ verbose(细节)+ file(文件),创建归档文件并显示操作细节;-tf
:显示归档里的内容,并不解开归档;-rvf
:追加文件到归档, tar -rvf archive.tar file.txt ;-xvf
:解开归档, tar -xvf archive.tar 。
8.1.1 打包
将a目录用gzip
打包,tar zcvf a.tar.gz a
将a目录用bzip2
打包,tar jcvf a.tar.bz2 a
$ls
main.c Makefile
$tar -zcvf foo.tar.gz main.c
$ls
main.c Makefile foo.tar.gz
$tar -jcvf foo.tar.bz2 main.c
$ls
main.c Makefile foo.tar.gz foo.tar.bz2
8.1.2 解包
解压gzip
包,tar zxvf a.tar.gz
解压bzip2
包,tar jxvf a.tar.bz2
$ls
foo.tar.gz foo.tar.bz2
$tar -zxvf foo.tar.gz
$ls
main.c foo.tar.gz
$rm main.c
$tar -jxvf foo.tar.bz2
$ls
main.c foo.tar.gz foo.tar.bz2
8.2 gzip / gunzip
压缩/解压
归档,默认用 gzip
命令,压缩后的文件后缀名为 .tar.gz
gzip archive.tar # 压缩
gunzip archive.tar.gz # 解压
8.3 zcat、zless、zmore
使用 cat less more
可以查看文件内容,但是压缩文件的内容是不能使用这些命令进行查看的,而要使用 zcat、zless、zmore
进行查看。
zcat archive.tar.gz
9 文件的权限
在Linux
系统中使用的Ext
文件系统中,支持文件的权限,用ls -l
查看当前目录的文件权限。
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
由图中我们可以看出这两个文件的权限是不一样的:
最前边的一位,可以看出backup/
的前边有一个d
,这代表它是一个目录
,a.out
和chess.c
为一个-
,这说是它们是普通文件
后边有三位代表文件所有者的权限,分别为可读
,可写
,可执行
,这说明a.out
为一个可执行文件,chess.c
为一个不可执行文件。
随后的三位表示同组用户
所拥有的权限,最后的三位表示其它用户
所拥有的权限。
9.1 文字设定法
可以使用chmod who +|-|= 文件名
来改变权限。
who
可以是下述字母中的任一个或者它们的组合: u
表示文件或目录的所有者; g
表示同组用户;o
表示其它用户;
a
表示所有用户mode
的常用权限为以下几个:r
可读 , w
可写, x
可执行
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
$chmod -x a.out
$ls –l
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
9.2 数字设定法
在chmod
后边可以加上数字,000
即代表不可读
,不可写
,不可执行
011
则代表不可读,可写,可执行。用二进制进行转换011为3
,所以用chmod 333 a.out
就可以将a.out
的变为–rx-rx-rx
权限。
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
$chmod 333 a.out
$ls –l
--wx-wx-wx 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
9.3 chown更改某个文件或目录的所有者
更改某个文件或目录的所有者,这个命令是很常用的,例如root
用户把自己的一个文件拷贝给用户akaedu
,为了能让用户akaedu
存取这个文件,root
用户应该把这个文件的所有者设为akaedu
,否则,akaedu
无法存取这个文件。
例如把一个文件改为akaedu
用户所有
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 ymqqqqdx ymqqqqdx 3681 2011-09-02 17:49 chess.c
$chown akaedu chess.c
$ls –l
-rwxr-xr-x 1 ymqqqqdx ymqqqqdx 7438 2011-09-02 15:08 a.out
drwxr-xr-x 2 ymqqqqdx ymqqqqdx 4096 2011-09-03 09:33 backup/
-rw-r--r-- 1 akaedu ymqqqqdx 3681 2011-09-02 17:49 chess.c
9.4 chgrp,chown,chmod
chgrp
: 改变档案所属群组
chgrp [-R] dirname/filename ...
-R
:进行递归(recursive
)的持续变更,亦即连同次目录下的所有档案、目录都更新成为这个群组之意。常常用在变更某一目录内所有的档案之情况chown
: 改变档案拥有者
chown [-R] 账号名称:组名 档案或目录
-R
: 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都变更chmod
: 改变档案的权限, SUID, SGID, SBIT等等的特性
chmod [-R] xyz 档案或目录
选项与参数:
xyz
: 权限属性,为 rwx 属性数值的相加。
-R
: 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更
还有一个改变权限的方法,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦,那么我们就可以藉由u, g, o
来代表三种身份的权限,此外, a
则代表 all
亦即全部的身份,那么读写的权限就可以写成r, w, x
,也就是可以使用底下的方式来看
用字母来分配权限:
u
:user
的缩写,用户的意思,表示所有者。g
:group
的缩写,群组的意思,表示群组用户。o
:other
的缩写,其它的意思,表示其它用户。a
:all
的缩写,所有的意思,表示所有用户。+
:加号,表示添加权限。-
:减号,表示去除权限。=
:等于号,表示分配权
10 查找命令
10.1 find命令
用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。
find <何处> <何物> <做什么>
何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。
做什么:找到文件后,可以进行后续处理,如果不指定这个参数,find 命令只会显示找到的文件。
根据文件名查找
find -name "file.txt" --> 当前目录以及子目录下通过名称查找文件
find . -name "syslog" --> 当前目录以及子目录下通过名称查找文件
find / -name "syslog" --> 整个硬盘下查找syslog
find /var/log -name "syslog" --> 在指定的目录/var/log下查找syslog文件
find /var/log -name "syslog*" --> 查找syslog1、syslog2 ... 等文件,通配符表示所有
find /var/log -name "*syslog*" --> 查找包含syslog的文件
根据文件大小查找
find /var -size +10M --> /var 目录下查找文件大小超过 10M 的文件
find /var -size -50k --> /var 目录下查找文件大小小于 50k 的文件
find /var -size +1G --> /var 目录下查找文件大小查过 1G 的文件
find /var -size 1M --> /var 目录下查找文件大小等于 1M 的文件
根据文件最近访问时间查找
find -name "*.txt" -atime -7 --> 近 7天内访问过的.txt结尾的文件
仅查找目录或文件
find . -name "file" -type f --> 只查找当前目录下的file文件
find . -name "file" -type d --> 只查找当前目录下的file目录
操作查找结果
find -name "*.txt" -printf "%p - %u\n" --> 找出所有后缀为txt的文件,并按照 %p - %u\n 格式打印,其中%p=文件名,%u=文件所有者
find -name "*.jpg" -delete --> 删除当前目录以及子目录下所有.jpg为后缀的文件,不会有删除提示,因此要慎用
find -name "*.c" -exec chmod 600 {} \; --> 对每个.c结尾的文件,都进行 -exec 参数指定的操作,{} 会被查找到的文件替代,\; 是必须的结尾
find -name "*.c" -ok chmod 600 {} \; --> 和上面的功能一直,会多一个确认提示
10.2 grep
在指定文件中搜索特定内容,并将含有这些内容的行输出到标准输出。若不指定文件名
,则从标准输入
读取。
常用参数:
-i
: 忽略大小写,grep -i path /etc/profile
-n
: 显示行号,grep -n path /etc/profile
-v
: 只显示搜索文本不在的那些行,grep -v path /etc/profile
-r
: 递归查找,grep -r hello /etc
,Linux
中还有一个rgrep
命令,作用相当于grep -r
$grep 'printf' ./ -R
./chess.c:30: printf("\n ");
./chess.c:32: printf(" %d", i + 1);
./chess.c:33: printf("\n");
./chess.c:35: printf(" -");
./chess.c:36: printf("\n");
./chess.c:39: printf("%d ", i + 1);
./chess.c:42: printf(" %d", chessboard[i][j]);
./chess.c:44: printf("\n");
./chess.c:115: printf("current: p1: %d, p2: %d.\n", p1, p2);
./chess.c:126: printf("Welcome!\n");
./chess.c:127: printf("Input link this, 3 3\n");
./chess.c:131: printf("Player %d: ", who);
./chess.c:140: printf("Board full!\n");
./chess.c:143: printf("Current step: %d\n", step);
./chess.c:146: printf("out of range or place
occupied!\n"
进行范围时间段内日志查询
grep '11:07 18:29:20' catalina.out
grep '11:07 18:31:11' catalina.out
11 mount/umount 挂载U盘
新版本的Linux
发行版大多支持自动挂载U
盘分区,默认的挂载位置为/media/卷名
,但是如果发生问题不能自动挂载,所以要介绍U
盘的手动挂载。
$ls /dev/sd\*
/dev/sda /dev/sda2 /dev/sda5 /dev/sda7 /dev/sda9 /dev/sda1 /dev/sda3 /dev/sda6 /dev/sda8
插入U盘后
$ls /dev/sd\*
/dev/sda /dev/sda2 /dev/sda5 /dev/sda7 /dev/sda9 /dev/sda1 /dev/sda3 /dev/sda6 /dev/sda8 /dev/sdb /dev/sdb1
我们发现这里多了一个sdb
和一个sdb1
,这就是我们的U盘。
$mount /dev/sdb1 /mnt
$cd /mnt
$ls
file1 file2 .. .
这样就将U
盘挂载到了/mnt目录
下,对/mnt目录
的操作就可以读写U盘上的文件
12 df/du磁盘空间占用命令
12.1 df
df
用来检查文件系统的磁盘空间占用情况,可以利用该命令来获取硬盘被占用了多少空间,日前还剩下多少空间等信息。
$df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda8 15480816 3693868 11000568 26% /
none 1024060 332 1023728 1% /dev
none 1028300 1460 1026840 1% /dev/shm
none 1028300 104 1028196 1% /var/run
none 1028300 0 1028300 0% /var/lock
none 1028300 0 1028300 0% /lib/init/rw
/dev/sda9 15472768 11540932 3145860 79% /home
/dev/sda1 52428796 15280160 37148636 30%
/media/7CE619AAE6196624
/dev/sda2 62915580 2578292 60337288 5% /media/New Volume
/dev/sda5 101448700 55005980 46442720 55% /media/Entertainment
/dev/sda6 62918652 519376 62399276 1% /media/New Volume
12.2 du
du
用来统计目录或文件所占用磁盘空间的大小,du
意为disk usage
使用du -s
可显示当前目录所占用的空间总大小。
$du –s
1697668 .
13 监视后台进程的工作命令
13.1 w
w
:帮助我们快速了解系统中目前有哪些用户登录着,以及他们在干什么。
[root@lion ~]# w
06:31:53 up 25 days, 9:53, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 118.31.243.53 05:56 1.00s 0.02s 0.00s w
06:31:53:表示当前时间
up 25 days, 9:53:表示系统已经正常运行了“25天9小时53分钟”
1 user:表示一个用户
load average: 0.00, 0.01, 0.05:表示系统的负载,3个值分别表示“1分钟的平均负载”,“5分钟的平均负载”,“15分钟的平均负载”
参数说明:
USER
:表示登录的用于TTY
:登录的终端名称为pts/0FROM
:连接到服务器的ip地址LOGIN@
:登录时间IDLE
:用户有多久没有活跃了JCPU
:该终端所有相关的进程使用的 CPU 时间,每当进程结束就停止计时,开始新的进程则会重新计时PCPU
:表示CPU
执行当前程序所消耗的时间,当前进程就是在WHAT
列里显示的程序WHAT
:表示当下用户正运行的程序是什么,这里运行的是w
13.2 ps
用于显示当前系统中的进程, ps
命令显示的进程列表不会随时间而更新,是静态的,是运行 ps
命令那个时刻的状态或者说是一个进程快照。
[root@lion ~]# ps
PID TTY TIME CMD
1793 pts/0 00:00:00 bash
4756 pts/0 00:00:00 ps
PID:进程号,每个进程都有唯一的进程号
TTY:进程运行所在的终端
TIME:进程运行时间
CMD:产生这个进程的程序名,如果在进程列表中看到有好几行都是同样的程序名,那么就是同样的程序产生了不止一个进程
常用参数:
-ef
:列出所有进程;-efH
: 以乔木状列举出所有进程;-u
: 列出此用户运行的进程;-aux
: 通过 CPU 和内存使用来过滤进程ps -aux | less
;-aux --sort -pcpu
:按 CPU 使用降序排列,-aux --sort -pmem
表示按内存使用降序排列;-axjf
:以树形结构显示进程,ps -axjf
它和pstree
效果类似。-a
:显示终端上的所有进程,包括其他用户的进程-x
:显示没有控制终端的进程
13.3 top
top
获取进程的动态列表
top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07
Tasks: 67 total, 1 running, 66 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882072 total, 552148 free, 101048 used, 1228876 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1594080 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
956 root 10 -10 133964 15848 10240 S 0.7 0.8 263:13.01 AliYunDun
1 root 20 0 51644 3664 2400 S 0.0 0.2 3:23.63 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07
相当w
命令的第一行的信息。- 展示的这些进程是按照使用处理器
%CPU
的使用率来排序的。
14 ifconfig 查看或设置网络命令
14.1 查看网络设置
直接输入ifconfig
即可查看网络的IP
,网关和子网掩码
$ifconfig
eth0
Link encap:以太网
硬件地址 00:26:9e:27:21:1e
inet 地址:192.168.0.4
广播:192.168.0.255
掩码:255.255.255.0
inet6 地址: fe80::226:9eff:fe27:211e/64
Scope:Link UP BROADCAST RUNNING MULTICAST
MTU:1500 跃点数:1 接收数据包:5456 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:1380 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000
接收字节:1139542 (1.1 MB) 发送字节:244972 (244.9 KB)
中断:17
14.2 设置网卡参数
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
设置IP地址和子网掩码。
$ifconfig eth0 192.168.0.1 netmask 255.255.255.0
15 端口监控
15.1 netstat监控
netstat
是一个监控TCP/IP
网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息.Netstat
用于显示与IP、TCP、UDP和ICMP
协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
netstat -a
可以显示所有的socket
netstat -tunlp | grep “5789”
查看5789
端口的的连接。
$netstat -tunlp| grep "5789"
unix 3 [ ] 流 已连接 5789 /var/run/acpid.socket
15.2 lsof
lsof -i:端口号
用于查看某一端口的占用情况,比如查看8000
端口使用情况,lsof -i:8000
# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lwfs 22065 root 6u IPv4 4395053 0t0 TCP *:irdmi (LISTEN)
16 环境变量
16.1 查找环境变量
在我们的当前目录下有一个可执行文件,它的作用是打印出hello world!
,我们执行一下:
$ls
hello.c hello
$hello
hello: 找不到命令
$./hello
hello world!
想一下,为什么我们执行ls的时候就可以执行,而要执行hello
的时候就必须要加上./
呢?
我们先用which
命令看一下ls
这个文件在哪里存放:
$which ls
/bin/ls
在我们没有告诉系统完整路径时,系统会在一个名为PATH
的的环境变量所存的路径下去找这个文件,我们用env
打印当前的环境变量看一下:
$env
...
DESKTOPSESSION=gnome
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
QTIMMODULE=xim
PWD=/home/ymqqqqdx
XMODIFIERS=@im=ibus
...
我们找到PATH
项可以看到/bin
在这个环境变量中,所以我们输入ls
后,系统会到这个目录下去寻找。
16.2 更改环境变量
如果我们要把hello
所在的目录也添加到PATH
里面,是不是直接输入hello
就可以直接运行我们这个程序了呢?
下面我们来试一下:
pwd
/home/ymqqqqdx
export PATH=/home/ymqqqqdxhello
hello world!
ls
ls: 找不到命令
这是怎么了?怎么连ls都找不到了呢?
我们上面把PATH
设置为了/home/ymqqqqdx/
,而这个目录下没有ls
,所以系统就报错了。不要急,我们重新启动一下终端就好了。
正确的做法是这样的:
$export PATH=$PATH:/home/ymqqqqdxhello
hello world!
ls
hello.c hello
16.3 修改终端启动脚本
由上面的例子我们可以看出,我们做的修改在关闭终端后没有保存,怎么才能将我们做的修改保存起来呢?
修改~/.bashrc
:
$gedit ~/.bashrc
此时我们用gedit
打开了这个文件,到这个文件的最下方,添加我们上面输入的export PATH=$PATH:/home/ymqqqqdx
,然后保存退出。
这时我们重启一下终端,终端就会按着这个脚本顺序执行,把我们的路径添加到了环境变量之中。
17 软件安装与卸载和自启动
17.1 yum命令
yum install softwarename 安装
yum repolist 列出设定yum源的信息
yum remove softwarename 只删除软件包而保留配置文件和数据文件
yum erase softwarename 要删除软件和它所有的文件
yum list softwarename 查看软件源中是否有此软件
yum list all 列出所有软件名称
yum list installed 列出已经安装的软件名称
yum list available 列出可以用yum安装的软件名称
yum clean all 清空yum缓存
yum search softwarename 根据软件信息搜索软件名字
yum whatprovides filename 在yum源中查找包含filename文件的软件包
yum update 更新软件
yum history 查看系统软件改变历史
yum reinstall softwarename 重新安装
yum info softwarename 查看软件信息
yum groups list 查看软件组信息
yum groups info softwaregroup 查看软件组内包含的软件
yum groups install softwaregroup 安装组件
yum makecache 生成缓存
17.2 rpm命令
17.2.1 rpm安装
rpm -ivh # 安装一个包
rpm -Uvh #升级一个包
rpm -e #移走一个包
##安装参数
–force #即使覆盖属于其它包的文件也强迫安装
–nodeps #如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
rpm -q < rpm package name> #查询一个包是否被安装
rpm -qi < rpm package name> #得到被安装的包的信息
rpm -ql < rpm package name> 列出该包中有哪些文件
rpm -qf #列出服务器上的一个文件属于哪一个RPM包
rpm -qil < rpm package name> #可综合好几个参数一起用
rpm -qa #列出所有被安装的rpm package
rpm -qilp < rpm package name> #列出一个未被安装进系统的RPM包文件中包含有哪些文件
17.2.3 rpm卸载
rpm -qa | grep 包名
这个命令是为了把包名相关的包都列出来
rpm -e 文件名
这个命令就是你想卸载的软件,后面是包名称,最后的版本号是不用打的
例如:
# rpm -qa | grep mysql
mod_auth_mysql-2.6.1-2.2
php-mysql-5.3.9-3.15
mysql-devel-5.1.77-1.CenOS 5.2
mysql-5.0.77-1.CenOS 5.2
mysqlclient10-5.0.77-1.CentOS 5.2
libdbi-dbd-mysql-0.6.5-10.CentOS 5.2
# rpm -e mysqlclient
17.3 软件自动启动
察看mysql是否在自动启动列表中
chkconfig -list
把MySQL添加到你系统的启动服务组里面去
chkconfig -add mysql
把MySQL从启动服务组里面删除。
chkconfig -del mysql
18 用户相关命令
18.1 用户
18.1.1 基本命令
用户是能够获取系统资源的权限的集合
linux用户组的分类:
管理员root
: 具有使用系统所有权限的用户,其UID 为0
普通用户
: 即一般用户
,其使用系统的权限受限,其UID
为500-60000
之间系统用户
: 保障系统运行的用户,一般不提供密码登录系统,其UID
为1-499
之间
与用户有关的文件/etc/passwd
,/etc/shadow
/etc/passwd文件:
其格式:account:password:UID:GID:GECOS:diretory:shell
account
: 用户名或帐号password
:用户密码占位符UID
:用户的ID号GID
:用户所在组的ID号GECOS
: 用户的详细信息(如姓名,年龄,电话等)diretory
:用户所的家目录shell
:用户所在的编程环境
/etc/shadow
其格式:account:password:最近更改密码的日期:密码不可更该的天数:密码需要重新更改的天数:密码更改前的警告期限:密码过期的宽限时间:帐号失效日期:保留
18.1.2 限制root用户登录
- 创建新用户test,执行命令:
useradd test
- 设置test密码,执行命令:
passwd test
- 禁用
root
用户直接通过ssh
登录,执行命令:vi /etc/ssh/sshd_config
查找#PermitRootLogin yes
,将#
去掉,末尾Yes
改为No
并wq保存 - 重启
sshd
服务,执行命令:systemctl restart sshd
- 配置只允许
test
切换到root
,其他用户不允许。- 创建新用户,执行命令:
useradd new_test
- 设置new_test密码,执行命令:
passwd new_test
- 把test添加到wheel组,执行命令:
usermod -G wheel test
- 设置只允许wheel组的人可以
su到root
,修改文件:vi /etc/pam.d/su
将#auth required pam_wheel.so use_uid
的注释#
号去掉,保存。
修改文件:vi /etc/login.defs
,在末尾添加:SU_WHEEL_ONLY yes
- 创建新用户,执行命令:
18.1.3 切换用户命令
su,su -,su -l和sudo
都是在Linux系统中用于管理用户权限的命令,但它们之间存在一些区别:
su
:这个命令用于切换到其他用户,例如root
用户。当使用su
命令时,使用root用户密码,会切换到目标用户,并继承该用户的工作环境
。su -
或su -l
:与su
类似,这个命令也是用于切换到其他用户。但与su
不同的是,su -
会切换到目标用户的家目录
,即改变到目标用户的环境。使用su -
命令时,需要输入目标用户的密码才能完成身份切换
su -l
命令与su -
是等效的。在某些系统中,可以使用 su -l 来实现相同的效果sudo
:sudo
是一种权限管理机制,依赖于/etc/sudoers
文件,该文件定义了授权给哪个用户可以以管理员的身份执行哪些管理命令。与su
不同,sudo
不会切换用户身份,而是让用户以其他用户(通常是root用户)的权限执行命令。这意味着,使用sudo
命令的用户不需要知道root
密码就可以执行需要root
权限的命令。当使用该命令需要输入当前用户密码
18.2 用户组
用户组分类;
普通用户组
: 可以加入多个用户系统组
: 一般加入一些系统用户私有组(也称基本组)
: 当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,起名称与用户名同名.
注
:私有组可以变成普通用户组,当把其他用户加入到该组中,则其就变成了普通组
组是权限的容器
如普通用户 a,b,c 所属组grp,则它们会继承组grp的权限
18.2.1 用户组文件
与组有关的文件:/etc/group
,/etc/gshadow
/etc/group文件: 其格式:group_name:passwoerd:GID:user_list
group_name
: 组名passwoerd
: 组密码GID
: 组的ID号user_list
: 以group_name为附加组的用户列表
18.2.2 用户组命令
修改用户及用户组的命令:useradd,usermod, groupdd,userdel
18.2.2.1 增加用户
useradd [options] username
options:
-d :指定用户家目录,默认是/home/username
-s :指定用户所在的shell环境
-G:指定用户的附加组
-c<备注>:修改用户帐号的备注文字
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称,使用格式:usermod -l new_name old_name;
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-U:解除密码锁定。
例如增加一用户wendy UID为1888 家目录/home/oracle,shell为/bin/sh
useradd –u 1888 –d /home/oracle –s /bin/sh wendy
18.2.2.2 修改用户
usermod [options] username
options:
-u :UID
-g :GID
-d :指定用户家目录,默认是/home/username
-m 与-b 一起用表示把用户家目录的内容也移走
-s :指定用户所在的shell环境
-G:指定用户的附加组
例如修改用户wendy UID为1000 家目录/oracle,shell为/bin/bash
usermod –u 1000 –d /oracle –s /bin/bash -m wendy
18.2.2.3 增加用户组
groupadd [options] groupname
options
-g :GID
例如增加用户组grp UID为1001
groupadd –g 1001 grp
18.2.2.4 删除用户
userdel [options]username
options
-r :连同家目录一起删除
例如删除用户wendy及家目录
userdel -r wendy
18.3 新增用户组和用户操作
添加用户组:test,用户:test,设置密码
添加用户组
groupadd test
添加用户
useradd test -g test -p password # -g 指定组 -p 密码
添加目录拥有权限
chown test:test -R test/ # -R 处理指定目录以及其子目录下的所有文件
19 Linux命令行生成随机密码的十种方法
- 使用SHA算法来加密日期,并输出结果的前32个字符:
date +%s | sha256sum | base64 | head -c 32 ; echo
- 使用内嵌的
/dev/urandom
,并过滤掉那些日常不怎么使用的字符。这里也只输出结果的前32个字符:
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
- 使用
openssl
的随机函数。如果你的系统也许没有安装openssl
,你可以尝试其它九种方法或自己安装openssl。
openssl rand -base64 32
- 这种方法类似于之前的
urandom
,但它是反向工作的。Bash的功能是非常强大的
tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
- 这种方法使用
string
命令,它从一个文件中输出可打印的字符串:
strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo
- 这是使用
urandom
的一个更简单的版本:
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6
- 这种方法使用非常有用的dd命令:
dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
- 你甚至可以生成一个只用左手便可以输入的密码:
</dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8; echo ""
- 如果每次都使用上述某种方法,那更好的办法是将它保存为函数。如果这样做了,那么在首次运行命令之后,你便可以在任何时间只使用randpw就可以生成随机密码。或许你可以把它保存到你的~/.bashrc文件里面。
randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}
- 最后这种生成随机密码的方法是最简单的。它同样也可以在安装了Cygwin的Windows下面运行。在Mac OS X下或许也可以运行。实际上如果你使用它生成的全部字符串作为密码,那这个密码就足够随机 了。
date | md5sum
20 Linux命令行管理网络
20.1 curl & wget
使用curl
或wget
命令,不用离开终端就可以下载文件。如你用curl
,键入curl -O
后面跟一个文件路径。wget
则不需要任何选项。下载的文件在当前目录。
curl -O website.com/file
wget website.com/file
20.1.1 wget
wget
可以使我们直接从终端控制台下载文件,只需要给出文件的HTTP或FTP地址。
wget [参数][URL地址]
wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip
wget
非常稳定,如果是由于网络原因下载失败, wget
会不断尝试,直到整个文件下载完毕。
常用参数
-c
继续中断的下载。
20.2 ping
ping
发送ECHO_REQUEST
包到你指定的地址。这样你可以很方便确认你的电脑和Internet或是一个指定的IP地址是不是通的。使用 -c
开关,可以指定发送ECHO_REQUEST
包的个数。
ping -c 4 google.com
20.3 tracepath & traceroute
tracepath
命令和traceroute
命令功能类似,但不需要 root
权限。并且Ubuntu
预装了这个命令,traceroute
命令没有预装的。tracepath
追踪出到指定的目的地址的网络路径,并给出在路 径上的每一跳(hop)。如果你的网络有问题或是慢了,tracepath
可以查出网络在哪里断了或是慢了。
tracepath example.com
20.4 mtr
mtr
命令把ping
命令和tracepath
命令合成了一个。mtr
会持续发包,并显示每一跳ping
所用的时间。也会显示过程中的任何问题,在下面的示例中,可以看到在第6跳丢了超过20%的包。
mtr howtogeek.com
键入q或是CTRL + C来退出命令。
20.5 host
host
命令用来做DNS
查询。如果命令参数是域名,命令会输出关联的IP
;如果命令参数是IP
,命令则输出关联的域名。
host howtogeek.com
host 208.43.115.82
20.6 whois
whois
命令输出指定站点的whois记录,可以查看到更多如谁注册和持有这个站点这样的信息
whois example.com
20.7 ifplugstatus
ifplugstatus
命令可以告诉你是否有网线插到在网络接口上。这个命令Ubuntu没有预装,通过下面的命令来安装:
sudo apt-get install ifplugd
这个命令可以查看所有网络接口的状态,或是指定网络接口的状态:
ifplugstatus
ifplugstatus eth0
命令输出Link beat detected
(检测到连接心跳)表示有网线插着,如没有则会输出unplugged
(未插入)。
20.8 ifconfig
查看 ip 网络相关信息,如果命令不存在的话, 执行命令 yum install net-tools
安装
ifconfig
用于输出网络接口配置、调优和debug的各种选项。可以快捷地查看IP地址和其它网络接口的信息。键入ifconfig查看所有启用的网络接口的状态,包括它们的名字。可以指定网络接口的名字来只显示这一个接口的信息。
[root@lion ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.24.78 netmask 255.255.240.0 broadcast 172.31.31.255
ether 00:16:3e:04:9c:cd txqueuelen 1000 (Ethernet)
RX packets 1592318 bytes 183722250 (175.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1539361 bytes 154044090 (146.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
参数解析:
eth0
:对应有线连接(对应你的有线网卡),就是用网线来连接的上网。eth
是Ethernet
的缩写,表示“以太网”。有些电脑可能同时有好几条网线连着,例如服务器,那么除了 eht0 ,你还会看到 eth1 、 eth2 等。lo
:表示本地回环(Local Loopback
的缩写,对应一个虚拟网卡)可以看到它的 ip 地址是127.0.0.1
。每台电脑都应该有这个接口,因为它对应着“连向自己的链接”。这也是被称之为本地回环
的原因。所有经由这个接口发送的东西都会回到你自己的电脑。看起来好像并没有什么用,但有时为了某些缘故,我们需要连接自己。例如用来测试一个网络程序,但又不想让局域网或外网的用户查看,只能在此台主机上运行和查看所有的网络接口。例如在我们启动一个前端工程时,在浏览器输入 127.0.0.1:3000 启动项目就能查看到自己的 web 网站,并且它只有你能看到。wlan0
:表示无线局域网(上面案例并未展示)
20.9 ifdown & ifup
ifdown
和ifup
命令和运行ifconfig up
,ifconfig down
的功能一样。给定网络接口的名字可以只禁用或启用这一个接口。需要root权限
,所以在Ubuntu上需要使用sudo来运行。
sudo ifdown eth0
sudo ifup eth0
在Linux桌面系统上运行这2个命令,很可能会输出出错信息。Linux桌面通过使用网络管理器(NetworkManager
)来管理你的网络接口。不过在没有安装网络管理器的服务器版上,这2个命令仍然可用。
如果确实要在命令行上配置网络管理器,用nmcli命令。
20.10 dhclient
dhclient
命令可以释放你的电脑的IP地址并从DHCP
服务器上获得一个新的。需要root权限,所以在Ubuntu上需要sudo。无选项运行命令获取新IP,或指定 -r
开关来释放当前的IP地址。
sudo dhclient -r
sudo dhclient
20.11 netstat
netstat
命令可以显示网络接口的很多统计信息,包括打开的socket
和路由表。无选项运行命令显示打开的socket。
这条命令还有很多功能。比如,netstat -p命令
可以显示打开的socket对应的程序。
netstat -s
则显示所有端口的详细统计信息。
20.12 tcpdump
tcpdump
是一个常用的网络抓包工具,用于捕获和分析网络数据包。它可以运行在大多数类 Unix
操作系统上,如 Linux、macOS、FreeBSD 等。tcpdump
命令提供了丰富的功能,可以捕获网络通信中的数据包,并以可读的方式显示这些数据包的内容。以下是 tcpdump 命令的基本用法和一些常用选项:
tcpdump [options] [expression]
其中:
options
:用于指定 tcpdump
的一些选项,例如捕获的网络接口、抓包数量限制、过滤条件等。
expression
:用于指定要过滤捕获的数据包的条件,例如来源或目的IP地址、端口号、协议类型等。
以下是一些常用的 tcpdump
选项:
-i <interface>
:指定要监听的网络接口,如 eth0、wlan0 等。-c <count>
:指定抓包的数量限制,达到指定数量后 tcpdump 将自动退出。-n
:禁用域名解析,以 IP 地址的形式显示主机名。-s <size>
:指定抓取数据包时的最大长度。-A
:以 ASCII 码形式显示数据包内容。-X
:以十六进制和 ASCII 混合形式显示数据包内容。-vvv
:增加详细的输出信息。
以下是一些常用的 tcpdump
表达式示例:
host <ip>
:捕获指定主机的数据包。port <port>
:捕获指定端口的数据包。tcp
:仅捕获TCP
协议的数据包。udp
:仅捕获UDP
协议的数据包。icmp
:仅捕获ICMP
协议的数据包。src <ip>
:捕获指定源 IP 地址的数据包。dst <ip>
:捕获指定目标 IP 地址的数据包。
使用 tcpdump
可以帮助网络管理员和开发人员分析网络流量,排查网络问题,以及进行安全审计等工作。但请注意,tcpdump
需要以 root
权限运行,否则可能无法访问网络接口。因此,必要时可能需要使用 sudo 命令来执行 tcpdump
更多推荐
所有评论(0)