查看Linux服务器的主机名、端口和用户名,本质是执行几个基础命令:hostname用于主机名,ss或netstat用于端口,whoami用于当前用户,这些信息在远程连接、服务部署和故障排查中几乎每天都会用到。参考2
主机名查看方法
主机名是服务器在网络中的唯一标识,无论是登录提示符还是日志记录,都离不开它,查看主机名的方式不止一种,不同场景下选择最顺手的方法即可。
使用hostname命令
这是最直接的方法,在终端输入hostname,回车后立即显示当前主机名,如果只想看短名称(不带域名部分),加-s参数;想看完整FQDN(全限定域名),用-f。
hostname
hostname -s
hostname -f
对于大多数Linux运维人员来说,hostname命令是查看主机名时的首选,简单快速,无需额外权限。
使用hostnamectl命令
hostnamectl是systemd系列工具的一部分,在采用systemd的发行版(如RHEL 7+、CentOS 7+、Ubuntu 16.04+)中可用,除了显示主机名,还会列出操作系统版本、内核版本、架构等信息,输入hostnamectl,输出中Static hostname字段就是静态主机名,如果想只提取主机名,可以用hostnamectl status或hostnamectl --static。
查看配置文件直接读取
主机名存储在/etc/hostname文件中,直接cat /etc/hostname就能看到,如果系统启用了hosts文件中的静态映射,也可以查看/etc/hosts里关于本机IP对应的主机名,但注意,/etc/hostname保存的是永久主机名,而hostname命令临时修改后不会写进这个文件。
不同场景选择建议
- 快速查看:
hostname - 查看详细信息:
hostnamectl - 确认永久配置:
cat /etc/hostname - 脚本中获取:
hostname -s或cat /etc/hostname
端口信息查看
端口是服务器与外界通信的通道,查看端口占用情况是排查网络故障的必备技能,Linux下查看端口主要有三个工具:ss、netstat和lsof。
使用ss命令
ss是socket statistics的缩写,性能优于
netstat,是现代Linux发行版的首选,查看所有监听端口:
ss -tlnp
参数含义:-t显示TCP端口,-l显示监听状态,-n数字显示地址和端口,-p显示进程信息,同理,查看UDP端口用-u,如果想看所有连接(包括已经建立的),去掉-l即可。
ss命令输出简洁,速度很快,在大量连接场景下优势明显。参考1
使用netstat命令
netstat是传统工具,部分新系统可能需要手动安装net-tools包,常用组合:
netstat -tlnp
参数含义与ss类似,虽然netstat逐渐被ss取代,但很多老运维仍习惯用它,因为输出格式直观,行业共识认为,ss和netstat在功能上基本等价,但ss在性能上更胜一筹。
使用lsof命令
lsof(list open files)可以列出进程打开的文件,网络连接也是一种文件,查看指定端口占用:
lsof -i :22
查看所有网络监听:
lsof -i -P -n
-P禁止端口号转换为服务名,-n禁止IP地址转换为主机名,输出更干净。lsof的优势在于可以精确到进程PID和用户,但需要root权限才能看到所有进程信息。
三个命令对比
| 命令 | 特点 | 安装情况 | 适用场景 |
|---|---|---|---|
| ss | 速度最快,功能全面 | 默认内置 | 现代服务器,日常首选 |
| netstat | 输出直观,经典 | 需安装net-tools | 老系统或习惯使用 |
| lsof | 可查看进程打开的所有文件,精细化 | 默认内置 | 调试特定进程,端口冲突排查 |
查看端口时的常见权限问题
普通用户运行ss -tlnp可能看不到进程名(PID列显示为),需要加sudo获取完整信息。netstat和lsof同理,这是安全设计,避免普通用户窥探系统进程。
用户名与用户信息查看
Linux是多用户系统,知道当前操作的用户名、系统中存在哪些用户,对于权限管理和安全审计至关重要。
当前用户:whoami
whoami命令输出当前登录用户的用户名,如果登陆后没切换用户,就是最初登录的那个用户。id命令可以显示更详细的信息,包括UID、GID和所属组。
whoami
id
id -un效果等同于whoami,在脚本中,常用$USER环境变量获取当前用户名,但某些情况下环境变量可能被修改,用whoami更可靠。
所有用户:cat /etc/passwd
/etc/passwd文件存储了所有用户的基本信息,每行一个用户,包含用户名、密码占位符、UID、GID、备注、家目录、默认Shell,直接cat /etc/passwd会看到所有用户,包括系统用户,如果想只看可登录用户(Shell为/bin/bash或/bin/sh等),可以用grep过滤。
cat /etc/passwd | grep /bin/bash
当前登录用户:who和w
who命令列出当前登录到系统的用户,显示用户名、终端、登录时间、来源IP。w命令类似,但额外显示用户当前运行的命令和系统负载。
who
w
这两个命令在排查多用户登录场景时非常有用,比如发现异常登录IP。
用户名与端口、主机名的关联场景
在查看端口时,ss -tlnp输出中的进程名可能包含用户名信息(通过-u参数或lsof的-u选项)。lsof -i :80 -u www-data可以查看www-data用户是否有进程占用80端口。
实际场景:云服务器远程连接时如何获取这些信息
对于刚接触云服务器的用户,最常见的场景是通过SSH远程连接,然后需要确认主机名、端口和用户名,下面以简米云、酷番云等云服务器为例,给出具体操作流程。
场景:新购云服务器第一次登录
拿到云服务器的公网IP和初始密码(或密钥),使用SSH连接:
ssh root@<公网IP>
登录后立即查看主机名确认是否为自己设置的:
hostnamectl
如果主机名是默认的长串数字,可以用

hostnamectl set-hostname修改,查看当前端口是否开放了22(SSH默认端口):
ss -tlnp | grep 22
确认SSH服务正在监听,查看当前用户是否为root:
whoami
如果希望用普通用户登录,需要创建用户并赋予sudo权限,这一套流程下来,服务器的基本网络身份就确认了。
场景:排查端口冲突服务无法启动
当部署Web服务时,提示端口被占用,先用ss -tlnp | grep 80查看80端口被哪个进程占用,根据进程名确认是否属于已知服务,如果是不明进程,可以用lsof -i :80查看更详细的信息,包括用户名,端口被占用时,通常需要修改配置文件或停止占用进程。
场景:多用户服务器权限审计
公司服务器有多个开发人员共用,需要确认谁在何时登录,使用w或last命令查看登录记录。last -n 10显示最近10条登录记录,包括用户、IP、时间,如果发现未知IP,结合ss -tlnp查看当前连接,确认是否有异常端口。
Q&A
问题1:linux查看主机名端口用户名时权限不够怎么办?
运行ss或netstat查看端口时,如果PID或进程名显示为,说明权限不足,使用sudo命令提升权限,例如sudo ss -tlnp,查看/etc/shadow等敏感文件也需要root权限,普通用户可以使用hostname和whoami,这些命令不限制。
问题2:如何查看Linux服务器所有开放端口?
使用ss -tlnp查看所有TCP监听端口,ss -ulnp查看UDP监听端口,如果想查看所有正在建立的连接(包括ESTABLISHED),去掉-l参数,结合netstat -tulnp也能达到同样效果。lsof -i可以列出所有网络连接,但输出信息较多,建议用-P -n简化。
问题3:修改主机名后需要重启吗?
大多数情况下,hostnamectl set-hostname命令修改主机名后立即生效,不需要重启,但部分服务(如邮件服务)可能依赖旧主机名,建议重启这些服务或执行systemctl restart systemd-hostnamed。/etc/hostname文件同步更新,重启后仍然保持新主机名。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/530814.html

