Linux 怎么运行程序?命令查找、执行权限与服务管理入门
Linux 服务器入门 · 第 13 篇 / 共 18 篇
文件已经放在目录里,直接输入名字却提示 command not found。先分清 Shell 在哪里找程序,再看它能否执行;“找不到”与“没有执行权限”不是同一件事。
本篇前半段只操作自己的文件。Nginx 服务部分需要专用 Ubuntu 练习服务器、sudo 权限和 systemd,不能直接套到没有 systemd 的容器环境。
程序名是怎么被找到的
command -v bash
printf '%s\n' "$PATH"command -v 显示 Shell 对命令的解析结果。PATH 是用冒号分隔的搜索目录列表,通常不包含当前目录。pwd 显示的位置与 PATH 中的查找位置是两个概念。
先创建本节的教学脚本;已有同名文件时会覆盖它:
mkdir -p ~/linux-practice/scripts
cd ~/linux-practice/scripts
cat > hello.sh <<'EOF'
#!/usr/bin/env bash
printf 'hello from my script\n'
EOF用解释器读取并运行:
bash hello.sh这里不要求脚本本身有执行位,但文件需要可读。若想直接运行当前目录的文件:
chmod u+x hello.sh
./hello.shu+x 给文件所有者增加执行权限;./ 明确指向当前目录。第一行 shebang 指定直接执行时使用的解释器。这里只修改自己的教学脚本,不使用对所有人开放权限的写法。
前台程序和服务的区别
普通前台程序运行时,终端可能一直没有新的提示符,这是程序还在工作。通常可用 Ctrl+C 发出中断,程序如何处理由它决定。
SSH 断开后,前台任务可能被终止。需要交互式长任务时可学习 tmux;需要长期运行的系统服务,则由 systemd 等服务管理器管理。二者用途不同,本节先认识服务。
在专用练习服务器检查 Nginx
安装前确认这是允许安装 Web 服务的练习机;安装包可能自动启动服务。不要在已有业务服务的主机上做停止练习。
sudo apt update
sudo apt install nginx curl
sudo nginx -t
systemctl status nginx --no-pagernginx -t 检查配置语法并尝试打开配置引用的文件,不表示端口一定可用。status 看服务状态,分页选项使输出留在终端。服务未运行时,status 的非零退出状态不等于命令写错。
配置检查通过、也确认可以启动时:
sudo systemctl start nginx
curl -I http://127.0.0.1/127.0.0.1 指当前执行命令的这台服务器,默认站点正常时应返回 HTTP 响应。HTTP 状态码取决于配置;看到响应不代表所有业务都健康。若失败,保留状态与报错,进入日志篇查证。
停止与开机启动不要混淆
sudo systemctl stop nginx 停止当前服务;sudo systemctl enable nginx 配置开机启动,后者本身通常不负责立即启动。这里不要求执行 enable,先理解作用。
结束练习可停止自己专用机器上的 Nginx;后面的日志篇需要时再启动。服务控制依据见 systemctl 手册,配置检查见 Nginx 命令参数说明。