学习中心/工程实践/Linux/Linux 1:终端里把命令接起来

· Linux · 1 · 终端

Linux 1:终端里把命令接起来

走动只是开头。管道、重定向、退出码、PATH。这块过关,终端是手。

正在加载录音…

你面对的是 shell,不是整台 Linux

Linux 是操作系统。你敲进去的是 shell,常见是 bash。这一块走完,终端就该是手,不是黑盒子:知道自己在哪,能把命令接起来,失败了知道为什么。

  1. 在哪pwd / ls / cd
  2. 接| && ||
  3. 重定向> 2>
  4. 看失败echo $?

1. 打开、在哪、走动

本机打开 Terminal。远程先看 SSH 那一篇。提示符末尾 $ 是普通用户,# 是 root。这篇用普通用户。

  • 看
    当前目录的完整路径pwd
  • 看
    含隐藏项。名字以 . 开头的是隐藏文件ls -la
  • 进
    走进去cd /tmp
  • 回
    回到上一次所在的目录cd -
  • 上
    上一级。~ 是家目录,迷路就 cd ~cd ..

/ 是整台机器的根。路径写绝对的(从 / 起)不容易迷路。Tab 补全路径,少打错字。pwd 和 ls 不删东西。

2. 历史、帮助、这条命令是谁

  • 看
    最近敲过的。上下箭头也能翻history | tail -n 20
  • 看
    是系统命令、函数,还是别名type ls
  • 看
    手册。空格翻页,q 退出。没有 man 就 ls --helpman ls

Ctrl+R 按关键字搜历史。不要把带密码的命令写进命令行,历史文件会留下。

3. 变量和 PATH

  • 看
    家目录。echo $USER 是当前用户echo $HOME
  • 看
    shell 按这个顺序找可执行文件echo $PATH
  • 看
    实际会跑哪一个。没有就 which: not foundwhich python3

命令找不到,多半是没装,或 PATH 里没有那个目录。临时加:export PATH="$HOME/bin:$PATH"。写进 ~/.bashrc 才长期有效。改完要 source ~/.bashrc,或新开一个终端。

4. 把命令接起来

  • 接
    左边的输出,变成右边的输入ls /var/log | grep syslog
  • 接
    左边成功才跑右边cd /tmp && ls
  • 接
    左边失败才跑右边cd /no/such || echo fail
  • 看
    上一条的退出码。0 成功,非 0 失败false; echo $?

管道是数据往下流。&& / || 是按成败决定下一步。脚本里看 $?,比「好像没报错」可靠。

5. 重定向

  • 写
    标准输出写进文件。原文件会被盖掉ls /tmp > /tmp/list.txt
  • 写
    追加,不盖掉date >> /tmp/list.txt
  • 写
    标准错误单独留下ls /no/such 2> /tmp/err.txt
  • 丢
    正常和错误都丢掉。排查时不要用ls /no/such >/dev/null 2>&1

1 是标准输出,2 是标准错误。程序「没出字」不等于成功,错误可能在 2 里。

6. 引号和通配

  • 看
    当前目录下名字以 .txt 结尾的。匹配不到会原样传给命令ls *.txt
  • 看
    双引号里变量会展开echo "home is $HOME"
  • 看
    单引号里原样留下echo 'home is $HOME'

路径有空格,必须加引号。rm *.log 之前先 ls *.log 看会命中谁。通配是 shell 做的,不是 rm 做的。

7. 中断、挂起、后台

  • 停
    跑起来后 Ctrl+C 中断。这是 SIGINTsleep 30
  • 看
    Ctrl+Z 会挂起当前前台任务。jobs 列出jobs
  • 回
    把挂起的任务拉回前台fg

关掉终端,前台和没交代的后台都会没。要长期跑,用 systemd(服务那一篇),不要靠 & 和 nohup 过日子。

这块过关:能走动,能把两条命令接成一条,失败先看 $? 和 2>。下一篇才碰复制和删除。

同模块

工程实践 →