【Linux】常用命令(三)

【Linux】常用命令(三)

  • [1. export](#1. export)
    • [1.1 原理](#1.1 原理)
    • [1.2 常用语法](#1.2 常用语法)
    • [1.3 示例](#1.3 示例)
    • [1.4 书中对命令的解释](#1.4 书中对命令的解释)
    • [1.5 生效范围](#1.5 生效范围)
  • [2. 测试服务地址与其端口能否访问](#2. 测试服务地址与其端口能否访问)
    • [2.1 nc(Netcat)命令](#2.1 nc(Netcat)命令)
    • [2.2 telnet](#2.2 telnet)
    • [2.3 nmap](#2.3 nmap)
    • [2.4 curl命令 (适用于HTTP/HTTPS 服务)](#2.4 curl命令 (适用于HTTP/HTTPS 服务))

1. export

export 是 Linux Shell(特别是 Bash) 中的一个内建命令,用来设置环境变量并将其导出到子进程中使用。

1.1 原理

在 Linux 中,变量有两类作用范围:

  1. Shell 变量 (本地变量)
    • 只在当前 Shell 会话中有效
    • 不会自动传递给子进程
  2. 环境变量
    • 会被当前 Shell 和所有子进程继承
    • 典型例子:PATHHOMELANG

export 的作用就是:

1.把一个 Shell 变量升级为环境变量

2.或者直接创建一个新的环境变量

1.2 常用语法

bash 复制代码
export 变量名=值               # 创建变量并导出
export 变量名                  # 把已有的变量导出为环境变量
export -p                     # 显示当前所有已导出的环境变量

1.3 示例

普通变量不会传递给子进程

bash 复制代码
$ VAR1=hello
$ bash -c 'echo $VAR1'

# 输出为空,因为 VAR1 只是当前 Shell 的本地变量
bash 复制代码
使用 export 让变量对子进程可见

$ export VAR1=hello
$ bash -c 'echo $VAR1'
hello
bash 复制代码
先定义再导出

$ VAR2=world
$ export VAR2
$ bash -c 'echo $VAR2'
world

查看当前所有环境变量

bash 复制代码
[root@iv-ye20h65dz45i3z346rvs ~]# export -p
# maven
export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH

# jdk
export JAVA_HOME=/opt/jdk/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH

# 使用jdk8
usejdk8() {
  export JAVA_HOME=/opt/jdk/jdk1.8.0_161
  export PATH=$JAVA_HOME/bin:$(echo $PATH | sed -E 's|/usr/lib/jvm/[^/]+/bin:||g')
  java -version
}

# 使用jdk21
usejdk21() {
  export JAVA_HOME=/opt/jdk/jdk-21.0.7
  export PATH=$JAVA_HOME/bin:$(echo $PATH | sed -E 's|/usr/lib/jvm/[^/]+/bin:||g')
  java -version
}

1.4 书中对命令的解释

1.5 生效范围

  • 临时生效:只在当前 Shell 会话有效,退出就消失
  • 永久生效:写到配置文件里,例如:
bash 复制代码
针对单个用户:~/.bashrc 或 ~/.bash_profile
全局生效:/etc/profile 或 /etc/bash.bashrc

写法举例:

bash 复制代码
# maven
export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH

# jdk
export JAVA_HOME=/opt/jdk/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bashrc  # 立即生效

2. 测试服务地址与其端口能否访问

往常我们都用ping命令,但是ping命令本身只能测试主机 的连通性(即是否能达到目标服务器),但不能检测指定端口 是否能访问。如果测试某个端口的可达性,可以使用nctelnetnmaep

2.1 nc(Netcat)命令

nc是一个非常强大的网络工具,通常用于测试端口是否开放。

bash 复制代码
[root@iv-ye20h65dz45i3z346rvs ~]# yum install -y nmap-ncat
Loaded plugins: fastestmirror, versionlock
Loading mirror speeds from cached hostfile
base                                                                                                                                                | 3.6 kB  00:00:00     
docker-ce-stable                                                                                                                                    | 3.5 kB  00:00:00     
epel                                                                                                                                                | 4.3 kB  00:00:00     
extras                                                                                                                                              | 2.9 kB  00:00:00     
updates                                                                                                                                             | 2.9 kB  00:00:00     
Excluding 2 updates due to versionlock (use "yum versionlock status" to show them)
Resolving Dependencies
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-19.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================================================================================================== Package                                   Arch                                   Version                                       Repository                            Size
===========================================================================================================================================================================Installing:
 nmap-ncat                                 x86_64                                 2:6.40-19.el7                                 base                                 206 k

Transaction Summary
===========================================================================================================================================================================Install  1 Package

Total download size: 206 k
Installed size: 423 k
Downloading packages:
nmap-ncat-6.40-19.el7.x86_64.rpm                                                                                                                    | 206 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:nmap-ncat-6.40-19.el7.x86_64                                                                                                                          1/1 
  Verifying  : 2:nmap-ncat-6.40-19.el7.x86_64                                                                                                                          1/1 

Installed:
  nmap-ncat.x86_64 2:6.40-19.el7                                                                                                                                           

Complete!
bash 复制代码
nc -zv <IP地址或域名> <端口号>
  • -z:只扫描端口,不发送数据
  • -v 显示详情信息
bash 复制代码
# 端口开放的结果
base) ➜  ~ nc -zv 115.190.126.xxx 8080
Connection to 115.190.126.xxx port 8080 [tcp/http-alt] succeeded!

(base) ➜  ~ nc -zv 115.190.126.xxx 3306
Connection to 115.190.126.xxx port 3306 [tcp/mysql] succeeded!

# 端口关闭
(base) ➜  ~ nc -zv 115.190.126.xxx 443
nc: connectx to 115.190.126.xxx port 443 (tcp) failed: Connection refused
bash 复制代码
# 检测多个端口
nc -zv 192.168.0.1 80 443 8080

2.2 telnet

telnet可以连接到指定的端口,适合用来测试某个端口是否能打开。

bash 复制代码
telnet <IP地址或域名> <端口号>

如果端口可用,可以看到如下结果

bash 复制代码
(base) ➜  ~ telnet 115.190.126.xxx 3306
Trying 115.190.126.xxx...
Connected to 115.190.126.xxx.
Escape character is '^]'.

如果端口不可用,可以看到下面类似结果

bash 复制代码
(base) ➜  ~ telnet 115.190.126.xxx 3307
Trying 115.190.126.xxx...
telnet: connect to address 115.190.126.xxx: Operation timed out
telnet: Unable to connect to remote host

2.3 nmap

nmap是一个强大的网络扫描工具,常用于扫描主机和端口。

bash 复制代码
nmap -p <端口号> <IP地址或域名>
bash 复制代码
(base) ➜  ~ nmap -p 8080 115.190.126.xxx
Starting Nmap 7.97 ( https://nmap.org ) at 2025-08-13 23:01 +0800
Nmap scan report for 115.190.126.xxx
Host is up (0.014s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds

2.4 curl命令 (适用于HTTP/HTTPS 服务)

bash 复制代码
curl I http://<IP地址或域名>:<端口号>
bash 复制代码
(base) ➜  ~ curl -I http://115.190.126.xxx:3306
curl: (1) Received HTTP/0.9 when not allowed
(base) ➜  ~ curl -I http://115.190.126.xxx:8080
HTTP/1.1 200
WWW-Authenticate: Basic realm="rocketmq"
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Last-Modified: Tue, 22 Apr 2025 05:43:20 GMT
Accept-Ranges: bytes
Content-Type: text/html;charset=utf-8
Content-Language: en-US
Content-Length: 7022
Date: Wed, 13 Aug 2025 14:53:39 GMT
相关推荐
华纳云IDC服务商1 小时前
通过限制网络访问来降低服务器被攻击风险的方法
运维·服务器·网络
霸气十足+拼命+追梦少年1 小时前
vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法
服务器·ide·vscode
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [arm][lib]
linux·运维·arm开发·笔记·学习
ayaya_mana4 小时前
Notepad--:国产跨平台文本编辑器,Notepad++ 的理想替代方案
linux·windows·macos·编辑器·notepad·notepad--
IT成长日记4 小时前
【自动化运维神器Ansible】playbook命令行变量定义全流程解析
运维·自动化·ansible·变量·命令行·playbook
野犬寒鸦5 小时前
Java Stream API 中常用方法复习及项目实战示例
java·服务器·开发语言·数据库
岩屿5 小时前
.NET 应用程序 Linux下守护进程脚本编写
linux·运维·服务器·c#·.net
im_AMBER5 小时前
杂记 01
linux·运维·服务器
KFCgrandpahhh5 小时前
从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
linux·c语言·学习