一、Linux 命令行初体验
在当今数字化时代,Linux 操作系统以其开源、稳定、安全和高度可定制等特性,在服务器、超级计算机、嵌入式设备以及个人桌面等众多领域占据着重要地位 。与我们日常熟悉的 Windows 系统不同,Linux 系统的一大特色便是其强大的命令行操作。对于许多初学者来说,图形化界面(GUI)可能更加直观、易于上手,比如 Windows 系统中,我们可以通过鼠标点击图标、菜单来完成各种操作,像是打开文件、运行程序、设置系统参数等。然而,在 Linux 世界里,命令行(CLI)才是真正的 “王牌”。
想象一下,当你面对一台服务器,它可能并没有配备图形化界面,或者即使有,在某些复杂的系统管理场景下,图形化操作显得繁琐且效率低下。此时,命令行就如同一位高效的 “幕后英雄” 登场。通过简单的键盘输入,你就能快速、精准地对系统进行各种配置和管理。比如,在处理大量文件的批量操作时,命令行可以通过编写脚本,轻松实现自动化处理,而这在图形化界面下可能需要花费大量的时间和精力去逐个点击操作。而且,命令行操作对于系统资源的占用极少,这对于那些对性能要求极高的服务器环境来说,无疑是一个巨大的优势。
二、文件与目录管理
在 Linux 系统中,文件和目录管理是日常操作的核心部分,就像我们整理房间一样,需要对各种文件和文件夹进行有序的安排和操作。通过一系列强大的命令,我们可以轻松地查看、创建、修改、复制、移动和删除文件与目录,实现高效的文件管理。
(一)文件查看与操作
- ls 命令:ls 命令是 Linux 中用于展示文件和目录列表的基础命令,就像是打开一个文件夹,查看里面都有什么东西。它的常用参数赋予了它强大的功能。
- -l 参数:以长格式显示文件和目录的详细信息,包括文件类型、权限、硬链接数、所有者、所属组、文件大小、修改时间和文件名等。例如,执行ls -l命令,会看到类似这样的输出:
-rw-r--r-- 1 user user 1024 2024-01-01 10:00 file.txt
drwxr-xr-x 2 user user 4096 2024-01-01 10:05 directory/
第一列的-表示这是一个普通文件,d则表示是目录;第二列的数字表示硬链接数;第三列和第四列分别是所有者和所属组;第五列是文件大小;第六列是修改时间;最后是文件名。
- -a 参数:显示所有文件和目录,包括以.开头的隐藏文件。在 Linux 系统中,许多系统配置文件和用户个人配置文件都是隐藏文件,使用ls -a才能看到它们。比如,在用户主目录下执行ls -a,会看到.bashrc、.ssh等隐藏文件和目录,这些文件对于系统和用户环境的配置起着关键作用。
- -R 参数:递归显示指定目录及其子目录下的所有文件和目录。当我们需要查看一个包含多层子目录的目录结构时,ls -R就非常有用。例如,执行ls -R /etc,会递归列出/etc目录下的所有文件和子目录,以及子目录下的文件和子目录,让我们对整个目录树有清晰的了解。
- cat 命令:cat 命令用于查看文件内容,它可以将文件的内容一次性输出到终端。当我们需要快速查看一个文本文件的内容时,cat 命令是一个不错的选择。
- -n 参数:由 1 开始对所有输出的行数编号。比如,执行cat -n file.txt,会在文件内容前加上行号输出,方便我们定位和引用特定的行。
- -b 参数:和-n相似,只不过对于空白行不编号。如果文件中有较多的空白行,使用-b参数可以使输出结果更加简洁,突出有内容的行。
- -s 参数:当遇到有连续两行以上的空白行,就代换为一行的空白行。这在处理一些格式不太规范的文本文件时非常实用,可以使文件内容的显示更加紧凑。
- more 与 less 命令:当文件内容较多,一屏无法显示完时,more 和 less 命令就派上用场了,它们用于分页查看文件。
- more 命令:字面意思就是 “显示更多”,它会分屏显示文件内容,按空格键前进到下一页,按b键往回一页显示。more 命令启动时会加载整个文件,从前往后读取内容。例如,执行more large_file.txt,就可以分页查看large_file.txt的内容。在查看过程中,如果想退出,按q键即可。
- less 命令:表示 “less is more” 的含义,是对 more 命令的增强。less 不仅可以使用空格键向下显示文件,还支持使用上下方向键卷动文件,查看当前屏的上下内容。而且 less 查看时不会加载整个文件,对于大文件的加载速度更快。less 还支持搜索功能,按/键后输入要搜索的字符串,再按回车键即可向下搜索,按?键后输入字符串可向上搜索,按n键重复前一个搜索,按N键反向重复前一个搜索。例如,在查看日志文件时,我们可以使用less命令快速定位到关键信息。
(二)文件创建与修改
- touch 命令:touch 命令主要用于创建新文件或更新文件时间戳。如果文件不存在,touch 命令会创建一个新的空文件;如果文件已存在,touch 命令会将文件的时间戳更新为当前时间。例如,执行touch new_file.txt,会在当前目录下创建一个名为new_file.txt的空文件。如果我们想创建多个文件,可以一次列出多个文件名,如touch file1.txt file2.txt file3.txt。此外,touch 命令还有一些选项,如-a选项仅更新文件的访问时间,-m选项仅更新文件的修改时间,-d选项可以使用指定的日期和时间来更新文件时间戳 。
- echo 命令:echo 命令用于在终端输出文本,同时也可以向文件中写入内容。使用echo命令向文件中写入内容时,需要结合重定向符号>或>>。>符号会覆盖文件原有内容,而>>符号会在文件末尾追加内容。例如,执行echo "Hello, Linux!" > test.txt,会在当前目录下创建一个名为test.txt的文件,并将 “Hello, Linux!” 写入其中。如果test.txt文件已存在,原有内容会被覆盖。如果想在文件末尾追加内容,可以执行echo "This is a new line." >> test.txt。
(三)文件复制、移动与删除
- cp 命令:cp 命令用于复制文件和目录。在复制文件时,我们可以使用不同的参数来满足各种需求。
- -a 参数:相当于-d、-p、-r选项的集合,用于保留源文件的所有属性,包括所有者、所属组、权限、时间和软链接等,复制软链接文件时,目标文件也为软链接。比如,在备份重要文件时,使用cp -a可以确保备份文件与源文件在各个方面都一致。
- -p 参数:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)。例如,执行cp -p source_file.txt target_file.txt,target_file.txt的属性将与source_file.txt相同。
- -r 参数:递归复制,用于复制目录及其子目录和文件。当我们需要复制一个包含多个子目录和文件的目录时,cp -r就非常有用。例如,执行cp -r source_directory/ target_directory/,会将source_directory及其下的所有内容复制到target_directory中。
- mv 命令:mv 命令可以用于移动文件或重命名文件。当目标路径与源路径不同时,mv 命令实现文件的移动;当目标路径与源路径相同但文件名不同时,mv 命令实现文件的重命名。
- -f 参数:强行移动文件或目录,不论目标文件或目录是否已存在,不会提示用户确认,直接覆盖目标文件。在某些自动化脚本中,当我们确定目标文件可以被覆盖时,可以使用-f参数来避免提示。
- -i 参数:在覆盖既有文件之前先询问用户,防止误操作。例如,执行mv -i source_file.txt target_directory/,如果target_directory中已存在同名文件,系统会提示是否覆盖。
- -u 参数:若目标文件比源文件旧(根据文件修改时间判断),或者目标文件不存在,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。比如,在同步文件时,使用mv -u可以确保只更新有变化的文件。
- rm 命令:rm 命令用于删除文件和目录,需要谨慎使用,因为删除操作一旦执行,文件可能无法恢复。
- -r 参数:递归删除目录及其子目录和文件。例如,执行rm -r directory/,会将directory及其下的所有内容删除。在使用rm -r时,一定要确认是否真的要删除该目录及其所有内容,避免误删重要数据。
- -f 参数:强行删除文件或目录,不提示用户确认,直接删除。-f参数非常危险,使用时要格外小心,确保不会误删重要文件。一般建议在使用rm -f之前,先进行文件备份或仔细确认要删除的文件。
(四)目录操作
- cd 命令:cd 命令用于切换目录,是在 Linux 文件系统中导航的重要工具。在使用 cd 命令时,我们可以使用绝对路径或相对路径。绝对路径是从根目录/开始的完整路径,例如cd /home/user/Documents,会直接切换到/home/user/Documents目录。相对路径是相对于当前目录的路径,例如当前目录是/home/user,执行cd Documents,会切换到/home/user/Documents目录;执行cd..,会切换到当前目录的上级目录,即/home。
- mkdir 命令:mkdir 命令用于创建目录。我们可以使用-p参数来创建多级目录。例如,执行mkdir -p parent_directory/child_directory/grandchild_directory,会一次性创建parent_directory、child_directory和grandchild_directory三级目录。如果不使用-p参数,当parent_directory或child_directory不存在时,创建grandchild_directory会失败。
- rmdir 命令:rmdir 命令用于删除空目录,即目录中没有任何文件和子目录。例如,执行rmdir empty_directory,会删除empty_directory目录。如果目录不为空,rmdir 命令会提示错误,需要先删除目录中的内容,才能删除该目录。
三、进程管理
在 Linux 系统中,进程管理是至关重要的一环,它直接关系到系统的性能、稳定性和资源利用效率。进程就像是系统中的一个个 “小助手”,它们各自执行着不同的任务,如运行应用程序、处理系统服务等。而我们通过各种进程管理命令,可以对这些 “小助手” 进行查看、控制和优先级调整,确保系统的高效运行。
(一)进程查看
- ps 命令:ps 命令是查看当前进程状态的常用工具,它就像一个 “进程侦探”,能够快速获取进程的各种信息。通过不同的参数组合,ps 命令可以展示出丰富多样的进程信息。
- -a 参数:显示现行终端机下的所有进程,包括其他用户的进程。这就好比打开了一个房间,让我们看到里面所有正在进行的活动,无论这些活动是由谁发起的。例如,执行ps -a命令,会列出当前终端下所有用户的进程,包括系统进程和用户自定义进程。
- -u 参数:以用户为主的格式来显示程序状况,会显示出进程的所有者、CPU 使用率、内存使用率、进程启动时间等详细信息。通过ps -u,我们可以清楚地了解每个用户的进程对系统资源的占用情况,就像查看每个员工的工作效率和资源消耗一样。例如,执行ps -u username,会显示用户username的所有进程及其详细信息。
- -x 参数:显示没有控制终端的进程,同时显示各个命令的具体路径。在一些后台服务或守护进程中,它们可能没有与终端直接关联,使用ps -x可以让我们发现这些隐藏在幕后的进程。比如,一些系统服务进程在后台默默运行,通过ps -x就能找到它们的踪迹 。
- top 命令:top 命令是动态实时监控进程的利器,它就像一个实时的 “进程仪表盘”,让我们随时了解系统中进程的动态变化。在 top 命令的界面中,我们可以看到系统的各种实时信息,如系统时间、运行时间、登录用户数、系统负载、CPU 使用率、内存使用率以及各个进程的详细信息,包括 PID、用户、优先级、虚拟内存使用量、物理内存使用量、共享内存大小、状态、CPU 使用率、总运行时间等。在 top 命令的交互操作中,有一些常用的快捷键可以帮助我们更好地监控进程。
- P 键:按照 CPU 使用率进行排序,让 CPU 占用率高的进程排在前面,方便我们快速找到那些 “吃 CPU 大户”,就像在一群学生中找出成绩排名靠前的学生一样。
- M 键:按照内存使用量进行排序,显示出内存占用最多的进程,帮助我们了解哪些进程在 “疯狂” 占用内存资源。
- T 键:按照进程启动时间进行排序,让我们可以按照进程的运行时长来查看它们。
- R 键:重新排序当前列表,当我们对进程进行了一些操作后,可以使用 R 键来更新排序。
- k 键:终止一个进程。输入进程 PID 后,按回车即可终止该进程,这是在 top 界面中直接对进程进行控制的便捷方式 。
- pstree 命令:pstree 命令以树状图展示进程关系,就像绘制了一幅家族树,清晰地呈现出各个进程之间的父子关系和派生关系。在 Linux 系统中,进程之间存在着层级关系,通过 pstree 命令,我们可以一目了然地看到这种关系。例如,执行pstree命令,会以树状图的形式展示所有进程,从根进程init(PID 为 1)开始,逐级展开各个子进程,让我们对系统的进程结构有一个直观的认识。如果加上-p参数,还会显示每个进程的 PID,方便我们更准确地定位和操作进程。
(二)进程控制
- kill 命令:kill 命令用于终止进程,它是进程管理中的 “终止符”。在使用 kill 命令时,我们可以向进程发送不同的信号,以实现不同的终止方式。
- SIGTERM(15)信号:这是 kill 命令默认发送的信号,它是一种 “温柔” 的终止方式,就像礼貌地请进程自行结束。进程收到 SIGTERM 信号后,应该正常退出,它可以捕获并处理该信号,执行一些清理操作,如关闭文件、释放资源等,然后再优雅地退出。例如,执行kill -15 pid(或kill -SIGTERM pid),就会向进程 ID 为pid的进程发送 SIGTERM 信号。
- SIGKILL(9)信号:这是一种 “强硬” 的终止方式,一旦发送,系统会立即杀死进程,就像强制关闭一个正在运行的程序。SIGKILL 信号无法被捕获或忽略,它会直接终止进程的运行。当进程出现异常或无法响应 SIGTERM 信号时,我们可以使用 SIGKILL 信号来强制终止它。例如,执行kill -9 pid(或kill -SIGKILL pid),会立即终止进程 ID 为pid的进程。需要注意的是,使用 SIGKILL 信号时要格外谨慎,因为它可能会导致数据丢失或系统不稳定。
- killall 命令:killall 命令根据进程名终止进程,它就像一个 “进程猎手”,可以批量终止具有相同名称的进程。当我们需要终止某个服务的所有进程时,killall 命令就非常方便。例如,执行killall httpd,会终止所有名为httpd的进程,这在停止 Web 服务器等服务时经常用到。使用 killall 命令时,要确保进程名的准确性,以免误杀其他进程。
- pkill 命令:pkill 命令通过模式匹配终止进程,它比 killall 命令更加灵活。我们可以使用通配符等模式匹配方式来指定要终止的进程。例如,执行pkill -f python,会终止所有包含python字样的进程,无论是python脚本进程还是python解释器进程。这在需要根据进程的部分特征来终止进程时非常有用,比如我们想终止所有正在运行的 Python 脚本,就可以使用pkill -f python命令 。
(三)进程优先级调整
- nice 命令:nice 命令用于设置新进程的优先级,它就像给新 “小助手” 分配工作优先级。在 Linux 系统中,进程的优先级由一个整数值表示,范围从 - 20 到 + 19,其中 - 20 表示最高优先级,+19 表示最低优先级。默认情况下,进程的优先级为 0。当我们使用 nice 命令启动一个新进程时,可以指定其优先级。例如,执行nice -n 10 command,会以优先级 10 启动command命令,这个新进程在竞争系统资源时,会按照优先级 10 来获取资源。需要注意的是,普通用户只能降低进程的优先级,而不能提高进程的优先级,只有 root 用户可以设置任意优先级 。
- renice 命令:renice 命令用于调整正在运行进程的优先级,它就像给正在工作的 “小助手” 重新分配优先级。当我们发现某个正在运行的进程占用资源过多,影响了其他进程的运行时,可以使用 renice 命令来调整它的优先级。例如,执行renice -n 5 -p 1234,会将进程 ID 为 1234 的进程的优先级设置为 5。同样,只有 root 用户或进程的所有者才能提高进程的优先级,普通用户只能在一定范围内降低进程的优先级。在调整进程优先级时,要根据系统的实际需求和负载情况进行合理的调整,避免对系统性能造成不良影响。
四、网络管理
在 Linux 系统中,网络管理是一项至关重要的任务,它涉及到网络配置查看、网络连通性测试以及网络服务管理等多个方面。通过熟练掌握这些网络管理命令,我们能够确保网络的稳定运行,高效地解决网络相关的问题,为系统的正常使用提供有力保障。
(一)网络配置查看
- ifconfig 命令:ifconfig 命令是 Linux 中用于查看和配置网络接口的经典工具。它就像是网络接口的 “管家”,可以让我们清晰地了解网络接口的各种状态和参数。使用 ifconfig 命令时,如果不带任何参数,它会显示当前系统中所有活动网络接口的信息,包括接口名称、IP 地址、子网掩码、广播地址、MAC 地址以及接收和发送的数据包统计信息等。例如,执行ifconfig命令,可能会得到如下输出:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe00:1 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:00:00:01 txqueuelen 1000 (Ethernet)
RX packets 123456 bytes 123456789 (117.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 123456 bytes 123456789 (117.7 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
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 123456 bytes 123456789 (117.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 123456 bytes 123456789 (117.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
在这个输出中,eth0是以太网接口,inet表示 IPv4 地址,netmask是子网掩码,broadcast是广播地址,ether是 MAC 地址,RX和TX分别表示接收和发送的数据包及字节数等信息。lo是回环接口,主要用于本地网络通信,其 IP 地址通常是
127.0.0.1。
除了查看网络接口信息,ifconfig 命令还可以用于配置网络接口。例如,要启用一个网络接口,可以使用ifconfig interface_name up命令,如ifconfig eth0 up,这就像是给网络接口 “通电”,让它开始工作。要禁用一个网络接口,则使用ifconfig interface_name down命令,如ifconfig eth0 down,相当于给网络接口 “断电”。此外,我们还可以使用 ifconfig 命令为网络接口设置 IP 地址,命令格式为ifconfig interface_name ip_address netmask subnet_mask,例如ifconfig eth0
192.168.1.200 netmask
255.255.255.0,这就为eth0接口设置了新的 IP 地址和子网掩码。不过需要注意的是,通过 ifconfig 命令设置的网络参数通常是临时的,系统重启后会恢复原来的设置。如果需要永久生效,需要修改网络配置文件 。
2. ip 命令:随着 Linux 系统的发展,ip 命令作为新一代的网络配置工具逐渐崭露头角,它是一个功能更为强大和全面的网络管理工具,就像是网络管理的 “超级工具箱”,整合了多个网络管理功能,逐渐成为了 ifconfig 命令的有力替代品。ip 命令的语法结构为ip [OPTIONS] OBJECT {COMMAND | help},其中OPTIONS是一些选项参数,OBJECT表示操作的对象,如link(网络设备)、addr(网络设备和协议地址)、route(路由表条目)等,COMMAND是具体的操作命令,如show(显示信息)、add(添加)、del(删除)等。例如,使用ip a(ip addr的简写)命令可以查看所有网卡的 IP 地址信息,这与ifconfig命令查看网络接口信息的功能类似,但ip a命令的输出更加简洁明了。执行ip a命令,输出可能如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:00:00:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 86372sec preferred_lft 86372sec
inet6 fe80::a00:27ff:fe00:1/64 scope link
valid_lft forever preferred_lft forever
从输出中可以看到每个网络接口的详细信息,包括接口索引、状态、MAC 地址、IP 地址及有效期等。使用ip link set interface_name up命令可以启用网络接口,如ip link set eth0 up,与ifconfig eth0 up功能相同;使用ip link set interface_name down命令可以禁用网络接口。若要为网络接口添加 IP 地址,使用ip addr add ip_address/prefix_length dev interface_name命令,例如ip addr add
192.168.1.200/24 dev eth0,这就为eth0接口添加了一个新的 IP 地址。相比 ifconfig 命令,ip 命令的优势在于它支持更多的网络功能和更灵活的配置方式,并且在处理复杂网络场景时表现更为出色 。
(二)网络连通性测试
- ping 命令:ping 命令是我们日常网络测试中最常用的工具之一,它就像是网络的 “听诊器”,通过向目标主机发送 ICMP(Internet Control Message Protocol)回显请求报文,并等待目标主机的回显应答,来判断网络连接是否正常。在使用 ping 命令时,我们可以通过添加不同的参数来实现更丰富的功能。例如,-c参数用于指定 ping 命令发送数据包的次数。通常情况下,如果不指定-c参数,ping 命令会一直发送数据包,直到我们手动停止。而使用ping -c 5 www.baidu.com命令,就会让 ping 命令向百度服务器发送 5 个数据包,然后显示结果,这对于我们快速了解网络的即时连通性非常有帮助。-w参数用于指定 ping 命令等待响应的超时时间。当网络出现异常时,可能会出现数据包长时间无法响应的情况,这时-w参数就可以设置一个等待的时间限制。例如,ping -w 10 www.baidu.com命令会让 ping 命令在等待 10 秒后,如果还没有收到响应,就显示超时信息,帮助我们及时判断网络是否存在问题。通过 ping 命令的返回结果,我们可以查看网络的延迟情况、丢包率等信息。如果返回的time值较小,说明网络延迟较低,连接比较顺畅;如果出现丢包(显示Request timeout等信息),则可能表示网络存在故障或不稳定因素,需要进一步排查 。
- traceroute 命令:traceroute 命令是网络诊断中的 “路径探测器”,它的主要作用是追踪数据包从源主机到目标主机之间所经过的路由路径。在复杂的网络环境中,数据包从我们的计算机发送到目标服务器,可能会经过多个路由器和网络节点,traceroute 命令能够清晰地展示出这些路径。traceroute 命令的工作原理是通过发送一系列带有递增 TTL(Time To Live,生存时间)值的 IP 数据包,并记录每个跃点(路由器)返回的信息。TTL 值就像是数据包的 “生命倒计时”,每经过一个路由器,TTL 值就会减 1,当 TTL 值为 0 时,路由器会返回一个 ICMP 超时消息,traceroute 命令根据这些返回的消息来确定数据包经过的路径。例如,执行traceroute www.baidu.com命令,会得到类似如下的输出:
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
1 192.168.1.1 (192.168.1.1) 2.606 ms 2.771 ms 2.950 ms
2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms
3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms
4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms
5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms
6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms
7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms
8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms
9 * * *
30 * * *
输出结果中,每一行表示一个跃点,包含了跃点的序号、IP 地址、主机名(如果能够解析)以及每个数据包的往返时间(单位为毫秒)。通过这些信息,我们可以了解到数据包在传输过程中经过的各个路由器,以及在每个路由器上的延迟情况。如果在某个跃点出现延迟过高或丢包的情况,就可以初步判断网络问题可能出现在这个节点附近,为进一步排查网络故障提供了重要线索 。
(三)网络服务管理
- netstat 命令:netstat 命令是网络服务管理中的 “多面手”,它可以显示网络连接、路由表和网络接口统计信息等,帮助我们全面了解网络的运行状态。使用netstat -an命令可以查看所有 TCP 和 UDP 连接的状态,包括本地地址、本地端口、远程地址、远程端口以及连接状态等信息。例如,执行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 192.168.1.100:42071 42.156.166.25:80 ESTABLISHED
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 127.0.0.1:323 0.0.0.0:*
在这个输出中,Proto表示协议类型,Recv-Q和Send-Q分别表示接收队列和发送队列中的数据量,Local Address是本地地址和端口,Foreign Address是远程地址和端口,State表示连接状态,如LISTEN表示监听状态,等待客户端连接;ESTABLISHED表示已建立连接 。netstat -r命令用于显示系统的路由表,路由表就像是网络的 “交通地图”,它记录了数据包在网络中传输的路径信息。通过查看路由表,我们可以了解到网络的拓扑结构和数据转发规则。例如,执行netstat -r命令,会显示出目的网络、网关、子网掩码、标志位、引用计数、使用情况、接口等信息,帮助我们分析网络数据包的流向 。
2. ss 命令:ss 命令作为 netstat 命令的新一代替代品,具有诸多优势,堪称网络服务管理的 “新利器”。它在处理大量网络连接时,比 netstat 命令更加快速和高效,这是因为 ss 命令利用了 TCP 协议栈中的 tcp_diag 模块,能够直接从 Linux 内核中获取第一手信息,大大减少了数据获取的开销。而且,ss 命令能显示更多更详细的 TCP 和连接状态的信息,为我们深入分析网络问题提供了更丰富的数据支持。使用ss -t -a命令可以显示所有 TCP 套接字的信息,包括连接状态、本地地址和端口、远程地址和端口等,与netstat -an命令的功能类似,但输出信息更加详细。例如,执行ss -t -a命令,输出可能如下:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:22 *:*
LISTEN 0 0 *:80 *:*
ESTAB 0 0 192.168.1.100:42071 42.156.166.25:80
ss -l命令用于显示处于监听状态的套接字,这对于我们检查系统中正在监听的服务非常有用,能够快速发现哪些端口正在等待客户端的连接请求 。如果我们想要查看某个特定进程使用的套接字,可以使用ss -pl | grep process_name命令,如ss -pl | grep sshd,这将显示与sshd进程相关的套接字信息,包括进程 ID 和进程名称,方便我们了解特定服务的网络连接情况 。在实际的网络管理中,当服务器的 socket 连接数量非常大时,使用 ss 命令能够显著提高我们获取网络信息的效率,快速定位网络问题,保障网络的稳定运行 。
五、用户与权限管理
在 Linux 系统中,用户与权限管理是保障系统安全和稳定运行的重要环节。通过合理的用户管理和精细的权限设置,我们可以确保不同用户只能访问和操作他们被授权的资源,防止非法访问和数据泄露。
(一)用户管理
- useradd 命令:useradd 命令用于创建新用户,它就像是在系统中为新成员分配一个专属的 “工作空间”。在创建用户时,我们可以使用一些常用参数来满足不同的需求。
- -g 参数:指定用户的初始用户组,这个用户组必须已经存在。例如,执行useradd -g users newuser,会创建一个名为newuser的新用户,并将其初始用户组设置为users。这就好比给新员工分配到一个特定的部门,方便对用户进行分组管理。
- -d 参数:指定用户的主目录,即用户登录后默认进入的目录。例如,useradd -d /home/newuser_dir newuser,会创建newuser用户,并将其主目录设置为/home/newuser_dir。如果该目录不存在,通常可以结合-m参数一起使用,-m参数会自动创建主目录。
- -s 参数:指定用户的登录 Shell,即用户登录后使用的命令解释器。常见的 Shell 有/bin/bash、/bin/sh等。例如,useradd -s /bin/bash newuser,会为newuser用户设置/bin/bash作为其登录 Shell。不同的 Shell 可能具有不同的功能和特性,根据用户的需求选择合适的 Shell。
- userdel 命令:userdel 命令用于删除用户,当某个用户不再需要使用系统时,我们可以使用这个命令将其从系统中移除。在使用 userdel 命令时,-r参数非常重要。例如,执行userdel -r olduser,不仅会删除olduser用户的账号信息,还会删除其主目录以及邮件池(如果存在)。这就像是清理一个离职员工的所有工作相关资料,确保系统中不再残留该用户的任何数据。需要注意的是,使用-r参数时要谨慎操作,避免误删重要数据。
- usermod 命令:usermod 命令用于修改用户属性,它就像是一个 “用户属性编辑器”,可以对已存在用户的各种属性进行调整。
- 修改用户名:使用-l参数,例如usermod -l new_username old_username,会将用户old_username的用户名修改为new_username。这在用户需要更改登录名时非常有用。
- 修改用户组:使用-g参数可以修改用户的初始用户组,例如usermod -g new_group user,会将用户user的初始用户组改为new_group;使用-G参数可以修改用户的附加用户组,例如usermod -G group1,group2 user,会将用户user添加到group1和group2这两个附加用户组中 。通过修改用户组,我们可以灵活地调整用户对不同资源的访问权限。
(二)权限管理
- chmod 命令:chmod 命令用于修改文件和目录的权限,它就像是给文件和目录设置了一把 “权限锁”,决定了不同用户对它们的访问级别。在 Linux 系统中,权限分为读(r)、写(w)、执行(x)三种,分别对应数字 4、2、1。通过组合这些数字,我们可以得到不同的权限设置。例如,权限755表示所有者具有读、写、执行权限(4 + 2 + 1 = 7),所属组和其他用户具有读和执行权限(4 + 1 = 5)。这就好比文件所有者拥有文件的完全控制权,而所属组和其他用户只能查看和执行文件,不能修改文件内容。chmod 命令还支持符号表示法,使用字符 u(所有者)、g(所属组)、o(其他用户)、a(所有用户)来指定权限作用的对象,使用字符 +(增加权限)、-(减少权限)、=(设置权限)来指定操作,使用字符 r(读)、w(写)、x(执行)来指定权限。例如,chmod u+x file.txt表示给文件file.txt的所有者增加执行权限;chmod go-w file.txt表示去除文件file.txt所属组和其他用户的写权限。
- chown 命令:chown 命令用于更改文件和目录的所有者和所属组,它就像是重新分配文件和目录的 “归属权”。命令格式为chown [owner][:[group]] file...,其中owner是新的所有者用户名,group是新的所属组名。例如,chown new_user file.txt会将文件file.txt的所有者更改为new_user,所属组不变;chown new_user:new_group file.txt会将文件file.txt的所有者更改为new_user,所属组更改为new_group。在多人协作的系统中,当文件的所有权需要转移时,chown 命令就非常有用。
- chgrp 命令:chgrp 命令用于仅更改文件和目录的所属组,它是专门针对所属组进行调整的工具。例如,执行chgrp new_group file.txt,会将文件file.txt的所属组更改为new_group。当一个项目组发生人员变动,需要调整文件的所属组以确保新成员能够正确访问文件时,chgrp 命令就能派上用场 。
六、总结与展望
Linux 常用命令是我们探索 Linux 系统强大功能的钥匙,它们贯穿于文件管理、进程管理、网络管理以及用户与权限管理等各个关键领域。在文件与目录管理中,通过ls、cd、mkdir、rm等命令,我们能够高效地组织和操作文件系统,就像一位经验丰富的图书管理员整理书架上的书籍一样,有条不紊地管理着系统中的各种文件和目录。进程管理命令如ps、top、kill等,让我们对系统中运行的进程了如指掌,能够灵活地控制进程的运行状态,确保系统资源的合理分配,如同交通警察指挥交通一样,保障系统的高效运行。网络管理命令ifconfig、ip、ping、traceroute等,帮助我们搭建和维护稳定的网络连接,快速诊断和解决网络问题,如同网络工程师守护网络的畅通无阻。用户与权限管理命令useradd、userdel、chmod、chown等,则为系统的安全保驾护航,确保不同用户只能在授权范围内访问和操作资源,就像保安守护着系统的安全大门。
这些常用命令在服务器管理、软件开发、系统维护等众多实际应用场景中发挥着不可或缺的作用。在服务器管理方面,系统管理员可以通过命令行快速配置服务器环境、部署应用程序、监控服务器性能等,大大提高管理效率;在软件开发过程中,开发者利用命令行进行代码编译、调试、版本控制等操作,能够更加灵活地掌控开发流程;在系统维护中,技术人员借助命令行工具进行故障排查、系统修复等工作,能够迅速解决问题,保障系统的稳定运行。
对于读者来说,Linux 命令的学习是一个不断积累和实践的过程。建议大家在学习过程中,多动手实践,通过实际操作加深对命令的理解和记忆。可以尝试在虚拟机中搭建 Linux 环境,进行各种命令的练习和实验,模拟实际的应用场景,不断探索和发现命令的更多用法和技巧。同时,要善于查阅官方文档和相关资料,当遇到问题时,及时从文档中寻找解决方案,不断拓宽自己的知识面和技能水平。随着对 Linux 命令的深入掌握,你将能够更加高效地使用 Linux 系统,在服务器管理、软件开发等领域展现出更强的能力,开启 Linux 世界的无限可能 。