文件、进程、网络相关Linux 常用命令

文件

文件可以理解为数据,在 Linux 环境下有一个很基本的涉及原则,即 Everything is file,所有的内容都是以文件的形式来进行抽象的,比如:进程、网络、硬件等,都可以抽象成文件,可以对其进行打开、读取、写入等操作。文件可以分为这样几类常见的命令:

磁盘与目录

== df 或者 df -h ==命令,打印设备上挂载了多少个磁盘设备及可用空间,如下设备中总容量是 40G,已用 4.5G,使用率是 12%。
在这里插入图片描述
ls 命令,打印当前目录下的所有文件和目录。
ls 有一个常用的参数 -l,可以打印出每个文件的基本信息,比如下图中文件权限 drwxr-xr-x,文件归属 root、文件大小、以及合适被创建等信息。

另外可以使用 cd opt,进入opt目录下,再通过 ls 查看目录下所有文件。因此可以使用 ls、cd命令在不同目录下切换,并且可以通过 pwd 命令获取当前目录所在路径。
在这里插入图片描述

文件编辑

通过 ls -l 获取文件列表后,在文件列表中,有些文件权限以 d 开头的表示该文件是一个目录,没有 d 则表示是一个文件,可以看到 README.md,是一个文件。
在这里插入图片描述
可以通过三种方法来阅读当前的 README.md文件:
cat:可以阅读文件并查找文件的内容,但缺点是一页的内容非常长;
more:可以实现翻页阅读,缺点是不够灵活
less:既可以实现上下花东方,还可以实现左右移动,采用交互式阅读,功能最强大。
在这里插入图片描述
除了文件阅读,常常我们还需编辑文件,可以通过进入 vi 或者 vim 编辑器实现。

文件权限

以 README.md 文件为例,它的权限是什么呢?可以看到文件权限中有三组内容,第一组内容(rw)表示该文件在当前用户下的权限,第二组内容(r)表示在同组下的权限,第三组内容(r)表示不在同组下其他地方的权限。而 r 表示可读,w表示可写,x 表示文件可执行。
在这里插入图片描述
可以哦通过 chmod 命令修改一个文件的权限,也可以通过 chown 修改一个文件所归属的用户或组。需要注意,ls -l 可以查看文件权限,以 README.md 为例,这个文件是当前用户可读可写,但其他用户能读不能写的。
在这里插入图片描述
如果不想让任何用户看到当前文件就可以通过 chmod o-r readme.md 命令进行权限的修改。重新进入该文件的权限后可以发现第三组权限没有状态了,即用户不能看到该文件了。

chmod 命令还有很多用法,可以通过 Linux 下的 man 查看更多命令的 属性、参数以及具体描述。同时,关于文件,还可以通过 find 命令搜索当前的目录并列出所有文件,可以通过 find +name 的方式查找具体文件。

进程

进程是一个文件的运行形态。如果一个文件时可执行文件,比如 setup.go,系统就可以通过 CPU 去调度它,可以通过解析器完成相应的操作。那如何知道有多少文件时可以被调度的?

通过 ls -l 查看所有文件权限,通过权限位 x ,可以看到哪些文件时可以执行的或该文件下有哪些文件是可执行的,所以权限位 x 并不完全准确。即时没有权限位 x,也可以通过解析器来运行。

通常使用 top 或 ps 命令查看当前进程。

PS

使用 ps 列举当前用户下的所执行的命令

可以输入 sleep 命令控制进程窗口,比如 sleep3,可以让当前进程窗口休眠 3 秒
在这里插入图片描述
其实这里的 sleep 也是一个文件,可以通过 which 命令查看他所在的目录,当需要调度时可以通过路径或名字直接调度。
在这里插入图片描述
输入 sleep 300 命令后,打开一个新的窗口,并登录服务器,然后使用 ps 查看当前的进程。如果想要找到当前执行的 sleep 300 这个命令,可以通过 ps -ef 列举出所有的进程,可以看到刚刚所写的sleep 300 命令,系统对它进行了调度,并最终形成了一个进程。
在这里插入图片描述
可以通过 ps -ef | less 命令查看一个进程的状态, | 符号是一个管道也可以就按到用户的 UID,进程的 PID,父进程的 PPID,以及进程开始的时间,运行参数等信息。
在这里插入图片描述

扫描二维码关注公众号,回复: 11383774 查看本文章
top

当执行 top 可以看到动态的交互页面上显示了整个机器的状态,包括了负载情况,,当前用户,启动时间,相关的任务数,以及内存、进程的一些数据,同样也包含 PID、USER、内存、共享内存,CPU 占比等全部信息。还可以对进程进行排序和查询,所以top 是一个非常实用的查看进程的命令,如果某台机器出现问题时,第一个输入的命令通常就是 top,查看哪个进程内存、CPU 占比高来排查问题原因。

网络

当一个文件加载道 CPU 中被执行的过程共就编程了一个进程,有时候进程之间需要通信,这个时候就会开启一个 socket,socket 就是对外建立连接的一个窗口,然后借助 TCP 协议进行通信。但进行同行之前首先需要进程开启一个端口,如何查看本地开启的端口?这些端口又是哪些进程开启的?

netstat -tlnp

可以通过 netstat -tlnp 命令查看 TCP 协议进程端口,-t 指的是 TCP 协议,-l (listen)指哪几个进程开启了对外的链接,负责监听端口,-n 指不需要解析远程服务器的名字,以加快运行速度,-p 指打印进程,我们看下执行效果,可以看到当前机器的第一条端口信息开放了 22 端口,这时我就可以通过 ssh 登录这个服务器,如果系统没有开放任何端口,外部是无法进行任何操作的,也就是此时机器对外是完全封闭的。

第二条端口信息,开放了 25 端口并监听到了 127.0.0.1,监听到的这个端口外部是访问不了的,只用于本地进程间进行通信。

netstat -tnp

第一条信息,它首先访问了一个远程服务器的 80 端口,在看第二条信息,本地某个进程在访问外部服务,第三条信息是本地与远程的 3128 建立起一个链接。
在这里插入图片描述
通过 netstat -tnp 获取了本地机器上有多少个链接正在与外部进行通信,属于哪个进程也可以看到,比如这条是阿里云上的性能监控的一个服务,它链接了某个远程的 IP。

另外要注意,Mac 系统与 Linux系统并不完全一致,因为历史原因,它们两个的参数并不一致,比如 Mac 系统中,要实现与 netstat -tlnp 相同的效果需要使用不同的语法 netstat -p tcp -n -a,它也可以列举出当前开放的端口情况。

猜你喜欢

转载自blog.csdn.net/qq_40488936/article/details/106845292