命令行解释器
另请参阅: SSH 访问指南
命令行解释器是一个计算机程序,可读取用户输入的单行文本,然后把这行文本翻译成特定的操作系统或者某种编程/脚本语言的命令并执行。这样的交互操作方式也称为命令行界面。还有其他在技术上不是很准确的叫法,比如“控制台”,或者“外壳程序”。
OpenWrt标配的unix shell是Debian Linux发行版中Almquist shell的Busybox分支。如果您想深入了解,可访问https://www.in-ulm.de/~mascheck/various/ash/#busybox。
启动
At the end of the boot up process, the init daemon is started, this can be init or systemd or upstart, etc. OpenWrt currently uses procd
. Following the boot up scripts located in /etc/rd.d
, init
will then start all sorts of programs, amongst them the chosen shell. This listens to keyboard strokes and outputs a more or less colorful command-line interface to the connected display.
中文翻译:在设备启动流程的最后阶段,启动了初始化程序。一般而言,这个初始化程序可以是 init,或者是systemd, 或者是upstart,或其他别的什么程序;但OpenWrt目前使用的是 procd
程序。该阶段接下来执行的的启动脚本,就放在系统目录的“/etc/rd.d”目录下,“初始化”进程将执行所有该目录下的脚本,然后运行命令行控制台(shell)。之后就可以输入键盘字符,以及在显示终端里输出彩色的命令行文本信息了。
But most devices you run OpenWrt on, have neither a keyboard nor a display adapter. So we need to access it over the serial port (=local) or over the Ethernet port (= over the network).
中文翻译:但是大部分你用来运行OpenWrt的设备上,既没有集成键盘,也没有显卡。所以,我们需要通过串口 serial port(通过本机方式访问),或者通过以太网接口(通过网络方式访问)。
Network
网络访问
To gain access to a shell over the network, you obviously need some other programs to help you with that. And the whole data exchange (aka communication) has to involve some kind of network protocol.
中文翻译:为了能通过网络登录使用命令行控制台,你当然需要一些能够连接的程序了。而且这整个通信的过程,必须使用一些通信或网络协议来完成。
Network protocols of choice are telnet and SSH. Both follow the server ↔ client scheme. On the device running OpenWrt we deploy telnetd
for the telnet protocol and dropbear
for for the SSH protocol. Try PuTTY for the real look-and-feel, but you should definitely also checkout WinSCP! The latter won't work quite correctly, however Konqueror with fish://
does! See FISH (Files transferred over shell protocol).
中文翻译:网络协议可以选用telnet、SSH。这两种协议采用客户端到服务器的通信模式。在运行了OpenWrt的设备商,我们安装“telnetd”软件来提供telnet协议访问,安装“dropbear”软件来提供SSH协议的访问。然后用PuTTY 软件来连接,你八成也下载了WinSCP软件来访问文件,但WinSCP访问不是很正常,因此你最好用Konqueror软件,采用“ fish://”来访问文件。详情请参见 FISH (Files transferred over shell protocol)。
(OpenWrt does also include a SSH-client ssh
and a telnet-client telnet
, in case you want to login from it to somewhere else.)
中文翻译:(OpenWrt也包含了SSH-client和telnet-client这样的客户端,如果你想在OpenWrt系统里访问别的地方,你就可以直接用ssh或者telnet命令。)
![]() | Note: Before walkthrough_login only telnetd will run, and after only dropbear . |
中文翻译:注意: 在你要登录访问时,系统里dropbear软件运行成功的条件是,telnetd先要运行成功。 |
In case of a successful login dropbear
will (generate a LOG and) spawn an instance of the specified shell (more shells can be installed simultaneously) with the users ID.
中文翻译:一旦用dropbear登录成功,以这个用户的ID生成的登录实例,就会通过指定的命令控制台程序产生出来(你可以同时安装好几种不同的命令行控制台软件)。
- 中文翻译: 新手SSH手册
Configuration
系统配置
In OpenWrt this is done in the file: /etc/profile
by setting environment variables and aliases. It comes (of course) pre-configured and will work out-of-the-box, but you can alter and augment it's configuration:
中文翻译:OpenWrt系统通过修改文件/etc/profile
来完成环境变量的设置。
- you can configure the command prompt via the variable
PS1
. see → https://controlc.de/2010/03/12/bash-shell-einrichten/ and many many many other pages in the web on help with that - you change the content of existent variables and can define new ones
- etc.
中文翻译:
- 你可以通过你可以通过修改PS1这个变量来,改变命令行控制台窗口的提示符。详见→ https://controlc.de/2010/03/12/bash-shell-einrichten/ ,还有很多很多很多其他的网页说明如何修改
- 你可以修改的现有环境变量,也可以定义新的变量
- 如此等等
Copy & Paste
复制粘贴
When in PuTTY, you can mark text content with the mouse and, without pressing any key (like [Ctrl]+[c]), it is being automatically stored. You can then insert it the usual way (with [Ctrl]+[v]) in an other windows, e.g. an open firefox. The other way around, you copy text the usual way [Ctrl]+[c]) and then paste it in PuTTY by pressing the [right mouse button]!
中文翻译:当你使用PuTTY这个软件的时候,你可以用鼠标来标记显示的文字,然后它们就被自动复制了,甚至不用按Ctrl+C这样的按键。你还可以使用类似于Ctrl+v按键组合来在另外的窗口粘贴这些内容,比如在浏览器里粘贴。其他的方法,如在别的窗口里按Ctrl+c复制,在PuTTY软件里面用鼠标右键来粘贴。
Numpad in PuTTY while using Vi
使用Vi文本编辑器时,将PuTTY软件里数字键盘关闭
In PuTTY goto “Terminal” ⇒ “Features” and check “Disable application keypad mode”.
中文翻译:在PuTTY软件里,找到“Terminal” ⇒ “Features” ,然后选中 “Disable application keypad mode”进行关闭.
Issue commands
重要的命令
* For some orientation with the file system and the whole directories, check flash.layout.
At login you will be in your $HOME directory, which is /root
for user root and would be /home/user1
for user1, etc. Commands:
中文翻译:当以某个用户身份登录系统时,默认进入你的$HOME目录,比如root用户进入“/root”目录,user1就进入“/home/user1”目录。其他命令如下:
命令 | 助记信息 | 功能描述 | |
---|---|---|---|
pwd | print working directory | 显示你当前处于的目录位置 | |
cd | change directory | 切换所在的目录位置: cd .. , cd / , cd /etc/init.d , cd /tmp | |
ls | list | 显示当前目录下的所有文件和目录, ls -l /etc | |
cat | concatenate | 讲一个文件的内容显示出来: cat /etc/config/network , cat /tmp/dhcp.leases | |
cp | copy | 复制文件: cp network network.bak | |
mv | move | 移动文件的位置(先复制然后删除原来的老文件), mv /tmp/opkg-lists/snapshots /mnt/sda1/opkg/packages | |
df | disk free | 显示当前可用的磁盘空间. 同样详见 flash.layout 理解/rom ,以及其他内容. 以及参照df 的帮助文件,查看具体选项. 使用df -h 获取帮助信息. | |
free | 查看内存的使用情况 | ||
uptime | 从启动到现在经历的时间长度 | ||
dmesg | 显示开机信息,或者控制系统内的环状缓冲区(ring buffer) | ||
logread | 显示从syslogd服务程序产生的信息 (使用 circular buffer) | ||
cat /proc/version | 显示当前系统版本 | ||
cat /proc/meminfo | 更详细的内存使用信息 | ||
cat /proc/cpuinfo | CPU信息 | ||
cat /proc/mtd | 存储设备(使用内存类似技术)的分局表 | ||
cat /proc/partitions | 系统分区表 | ||
cat /proc/net/nf_conntrack | 记录当前系统里存在的网络连接的表 | ||
cat /proc/cmdline | |||
cat /proc/modules | 显示当前系统已经加载的模块 |
There is a ton of commands with a ton of options.
On a full blown Linux distribution you would issue a man command
to learn about the command and its options. However OpenWrt is minimalistic and thus does not contain this functionality. So either read the man-pages (manual pages) on another GNU/Linux machine or read them online: e.g. at https://man.cx/. Man pages are in the process of being translated.
中文翻译:系统有巨量的命令还有巨量的选项。在一个完整的Linux发行版本中,你可以使用“man 命令名称”命令来了解命令和它的选项。OpenWrt最小化配备地风格,以至于就没包含这个功能(译者注:指man帮助功能)。所以,你可以在另外一台包含了帮助文件的Linux机器上,或者在网页上去了解帮助内容:比如通过 https://man.cx/网站。帮助页面也正在被翻译之中。
Tip
In firefox, you can use keywords to simplify the usage. Create a new bookmark, use https://man.cx/?page=%s
as address and man
as keyword.
中文翻译:提示 在火狐浏览器中,你可以使用 keywords 来简化查找命令帮助流程。标记一个新的书签,使用 https://man.cx/?page=%s
作为网址,以及 man
作为关键字。
editing files
文本编辑
To edit a file you need an editor, to edit a text file, you would use a text editor.
中文翻译:要想编辑文件你得有个编辑器才行,编辑一个文本文件,你就得用文本编辑器。
The standard text editor included is vi
. Until you get used to it, vi is neither intuitive nor pretty.
vi
has two modes: command mode and insert mode.- to enter command mode press [Esc] (escape key)
- to enter insert mode press either [i] for insert or [a] for append
vi
starts out in command mode
中文翻译:标准的文本编辑器是vi
。除非你用的很熟了,否则你会发现vi这个软件不好学,也不那么完美。
- vi编辑器有两种模式:命令行模式 和 插入编辑模式
- 先按下ESC键进入到命令行模式
- 先按下键盘i键进入到插入编辑模式,或者按下a键进入到追加编辑模式
- vi启动时首先进入的是命令行模式
starting vi
启动vi编辑器
Start with vi
or vi /etc/config/network
or vi firewall.user
if you are already in the same directory.
中文翻译:使用vi命令启动编辑器。运行vi /etc/config/network
来编辑network文件; 或者 vi firewall.user
来新建或者打开firewall.user文件。
editing
编辑
In order to edit the file, you have to be in insert mode. Press [i] or [a].
中文翻译:要编辑一个文件,你就要进入插入编辑模式。按i或者a键进入该模式。
exiting vi
退出vi编辑器
In order to get out of vi, you have to be in command mode. Press [Esc] (the escape key). Then issue one of the following commands:
:w
to write the current file to disc, this will overwrite the old file:q
to quit without writing:wq!
to (forcefully) write to disk and then quit vi:%s/string1/string2/g
replace string1 with string2 in the whole file
中文翻译:为了退出vi编辑器,你必须切换到 命令行模式 才行。按下ESC键就可以进入命令行模式。然后敲下面的这些命令:
- 输入“:w” 用来把当前的文件写入存储器中,这会覆盖旧的文件内容。
- 输入“:q”用来不保存退出vi编辑器
- 输入“:wq!”用来强制写入存储器,然后退出vi
- 输入“:%s/string1/string2/g”用来将文件里的所有string1替换成string2
configuring vi
配置vi编辑器
Vi can be configured in command mode by setting certain variables:
:set ai
use auto indentation (sometimes annoying default):set noai
NO auto indentation
中文翻译:vi编辑器的参数可以在命令行模式下进行配置:
- 输入“:set ai”用来自动插入缩进(但有些时候自动功能很烦人)
- 输入“:set noai”用来关闭自动插入缩进
alternative text editors
其他替代的文本编辑器
If you do not like vi
, try joe
, mg
, nano
, mc --edit
, vim
, vim-full
, vim-help
, vim-runtime
, zile
and there may be other text editors available in the OpenWrt repos.
'Note:
'
* Many modern and free graphical text editors, from Visual Studio Code to Atom to Notepad++, (to say nothing of CudaText, TextMate, Komodo Edit, et al.) offer plugins in their official repositories that add the ability to edit files over SFTP, meaning if you're connected to your OpenWrt device from your desktop computer over SSH, those applications with their respective plugins would be able to edit any file on your OpenWrt device as well.
* You may need to restart the system to let vim be installed properly.
中文翻译:如果你不喜欢vi编辑器,你可以尝试joe、mg、nano、mc --edit、vim、vim-full、vim-help、vim-rumtime、zile,介绍如下:
此外,OpenWrt软件仓库中可能还提供其他文本编辑器。
'注:
'
* 众多现代免费图形化文本编辑器——从Visual Studio Code到Atom(文本编辑器),再到Notepad++(更不必说CudaText、TextMate、Komodo Edit等)——均在其官方插件库中提供可通过SFTP协议编辑文件的功能扩展。这意味着当用户通过SSH协议将桌面计算机连接至OpenWrt设备时,这些应用程序配合相应插件即可直接编辑设备上的任意文件。
* 你安装好vim之后得重启设备才能让它正常工作。
Scripting language
脚本语言
OpenWrt uses busybox's ash shell by default, which is in most parts POSIX conform. Visit shell script for general Information about shell scripts.
中文翻译:OpenWrt默认使用 busybox'sash命令行控制台软件,这个软件比较符合 POSIX 规则。访问shell script了解一般的控制台脚本的信息。
Executing shell scripts
执行命令行控制台脚本文件
Shell scripts can be executed with:
中文翻译:控制台脚本可以像下面这么执行:
sh /path/to/script.sh
After changing the executable bit its also possible to run it without the sh in front:
中文翻译:如果修改了文件属性里的执行位,也可以达到不加sh就能执行的目的:
- 为文件添加可直接执行的属性
chmod +x /path/to/script.sh
- 直接访问并执行文件
/path/to/script.sh
配置文件自定义
用户配置文件自定义示例。
# Configure profile mkdir -p /etc/profile.d cat << "EOF" > /etc/profile.d/custom.sh export EDITOR= nano export PAGER="less alias bridge=bridge -color=auto alias diff=diff -color=auto alias grep= grep -color=auto alias ip=ip -color=auto EOF . /etc/profile
File Managers
文件管理器
Use GUIs
Further Help
更多帮助信息
- http://linuxcommand.org/tlcl.php ---- William Shotts free PDF books starting from terminal basics
翻译信息
LongGenxing 20191101 第一次翻译 xiu 20201110 修正了两处错别字