OpenWrt常用命令大全

作为软路由系统的折腾党就要会使用 OpenWrt 的命令,比如有些小白经常把 mips、aarch64、X86 的插件胡乱瞎装,不会区分架构,这时就要用到查看 CPU 架构的命令了,下面就是 OpenWrt 查询维护命令,主要是硬件、系统、磁盘、安装等相关常用命令。

硬件相关

1
2
3
4
5
6
7
8
9
10
11
cat /proc/cpuinfo
# 查看CPU信息

uname -m
# 查看CPU架构

cat /proc/meminfo
# 查看内存使用情况

df -h
# 查看磁盘的使用率

系统相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
uname -a
# 查看内核信息

opkg print-architecture
# 可接受的架构

dmesg
# 读取内核的日志

logread
# 读取系统日志

ps -w
# 列出进程

uptime
# 显示运行时间、CPU负载

vi etc/config/network
# 修改后台地址或绑定网口

/etc/init.d/uhttpd restart
# Luci 重启命令

/etc/init.d/uhttpd enable
# 开机自启动

/etc/init.d/uhttpd start
# 启动uhttpd

/etc/init.d/firewall restart
# 重启防火墙

/etc/init.d/network restart
# 重启网络服务

reboot
# 重启设备

安装管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
opkg update
# 更新软件包列表

opkg install ***
# 安装软件包

opkg remove ***
# 卸载软件包

opkg install *.ipk
# 批量安装软件包

opkg [install/remove] [包名] --force-depends
# 强制安装和卸载

opkg list |grep ***
# 查找软件包

opkg list-installed
# 列出所有安装的包

opkg info ***
# 查看包的信息

opkg files ***
# 查看包的文件

rm -f /var/lock/opkg.lock
# 清理opkg update缓存文件

磁盘管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
fsisk -l 
# 列出素所有分区表“-u”与“ -l”搭配使用,显示分割数

fsisk -m
# 显示菜单和帮助信息

fsisk -a
# 活动分区标记/引导分区

fsisk -d
# 删除分区

fsisk -l
# 显示分区类型

fsisk -n
# 新建分区

fsisk -p
# 显示分区信息

fsisk -q
# 退出不保存

fsisk -t
# 设置分区号

fsisk -v
# 进行分区检查

fsisk -w
# 保存修改

fsisk -x
# 扩展应用,高级功能

fsisk -s
# 指定分区

fsisk -v
# 版本信息

mount –t ntfs-3g /dev/sdb1 /mnt/usb
# 挂载ntfs硬盘

sleep 30 && mount -t ntfs-3g /dev/sdb1 /mnt/sdb1
# 挂载磁盘到文件夹

无线相关

1
2
3
4
5
6
7
8
9
10
11
12
13
iwinfo wlan0 info 
# 查看无线网卡的信息

wifi down
wifi up
# 重启无线服务

iw dev wlan0 scan
# 扫描热点

iwinfo wlan0 assoclist
iw dev wlan0 station dump
# 查看设备连接的客户端

其他命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
passwd
# 修改登录密码

firstboot
# 重置命令

chmod +x ***
# 脚本赋权

nslookup www.baidu.com 202.96.69.38
# DNS查询测试

du -s /root/* | sort -nr
# 查看文件目录大小

ifconfig eth0 down
ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX //更改的MAC地址
ifconfig eth0 up
# 更改MAC地址

opkg install vsftpd openssh-sftp-server
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start
# 安装 SFTP 文件传输

opkg软件包管理

opkg软件包管理「建议收藏」opkg工具(一个ipkg变种)是一个用来从本地软件仓库或互联网软件仓库上下载并安装OpenWrt软件包的轻量型软件包管理器。GNU/Linux用户可能会对apt-get,aptitude,pacman,yum等比较熟悉,也会看出其相似之处。它与NSLU2上同样用于嵌入式设备的Optware也有相似之处。OPKG没有仅仅将软件安装到一个单独的路径(如:/opt),而…

大家好,又见面了,我是你们的朋友全栈君。

opkg 工具 (一个 ipkg 变种) 是一个用来从本地软件仓库或互联网软件仓库上下载并安装 OpenWrt 软件包的轻量型软件包管理器。
GNU/Linux 用户可能会对 apt-get,aptitude,pacman,yum 等比较熟悉,也会看出其相似之处。它与 NSLU2 上同样用于嵌入式设备的 Optware 也有相似之处。OPKG 没有仅仅将软件安装到一个单独的路径(如:/opt),而是根文件系统上的一个完整的包管理器。它也包含了增加内核模块与驱动的可能性。OPKG 有时被称为 Entware ,但这主要是针对为嵌入式设备准备的 Entware 仓库。

调用

opkg必须有一个子命令参数:
usage: opkg [options…] sub-command [arguments…]

其中的子命令可以是以下:

软件包管理
sub-command description
update 更新可用软件包列表
upgrade 升级软件包 要升级一组软件包,运行 opkg upgrade 软件包名1 软件包名2 即可。 命令 opkg list-upgradable 可以获取一个可升级软件包的列表。
install <pkgs | FQDN> 安装一个或多个软件包 eg: opkg install hiawatha opkg install http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/hiawatha_7.7-2_ar71xx.ipk opkg install /tmp/hiawatha_7.7-2_ar71xx.ipk
configure 配置一个或者多个未安装的包
remove <pkgs | globp> 移除一个或多个软件包
flag 标记一个或多个软件包 每次调用仅允许一个标记。 可用标记有: hold • noprune • user • ok • installed • unpacked
信息命令
sub-command description
list [pkg | globp] 列出可用软件包 Package name – Version – Description
list-installed 列出已安装软件包
list-upgradable 列出可升级的已安装软件包
list-changed-conffiles 列出用户修改过的配置文件
files 列出属于软件包 的文件 仅适用于已安装的软件包
search <file | globp> 列出包含
info [pkg | globp] 显示软件包 的所有信息
status [pkg | globp] 显示软件包 的状态
download 下载软件包 到当前目录

配置

调整仓库

opkg唯一的配置文件是 /etc/opkg.conf ,它看起来是这样:

1
2
3
4
5
src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
本地仓库

可以配置opkg 从本地获取软件包:

1
src/gz local file:///path/to/packagesDirectory

Barrier_breaker 使用多个仓库,每个参考需要个唯一的标识符。逻辑上使用仓库原始的名称。如:

1
2
3
4
5
6
...
src/gz base file:///path/to/packages/directory/packages/base
src/gz luci file:///path/to/packages/directory/packages/luci
src/gz packages file:///path/to/packages/directory/packages/packages
src/gz oldpackages file:///path/to/packages/directory/packages/oldpackages
... etc ...
挂载点

opkg 有个不为那些 apt 系工具使用者熟悉的有用特性,它可以为任一软件包指定安装目的位置。
默认的 opkg.conf 包含三个目的位置:

1
2
3
dest root /
dest ram /tmp
dest mnt /mnt

目的位置行的格式很简单,关键字 dest 跟着目的位置名称(可以随便起),然后就是文件系统位置。任一如上配置好的目的位置都可以在 opkg 命令行中使用,如:

1
opkg install somepackage -d destination_name

dest 参数必须为 /etc/opkg.conf 中定义的目的位置名。如:-d ram 会将软件包安装到 /tmp/ 下。

基础:学会用ssh登录路由器用linux命令查看。

ps 命令查看当前系统运行的进程信息
free 命令查看内存使用和swap挂载情况
ls 查看目录和文件
cd 进入退出目录
vi 查看编辑配置文件
安装命令:

opkg update

opkg install nano

uci set network.lan.ipaddr=[lan ip]

使用pppoe设置
Shell代码
uci set network.wan.proto=pppoe //设置wan口类型为pppoe
uci set network.wan.username=[上网帐户]
uci set network.wan.password=[上网密码] //这两行设置pppoe用户名和密码

如果要挂在上级路由下面,就需要进行下面的设置
Shell代码
uci set network.wan.proto=none //关掉wan
uci set network.lan.gateway=[上级路由ip] //网关指向上级路由
uci set network.lan.dns=[上级路由ip] //dns指向上级路由
uci set dhcp.lan.ignore=1 //关掉lan的dhcp

最后对无线网络进行配置
Shell代码
uci set wireless.@wifi-device[0].disabled=0 //打开无线
uci set wireless.@wifi-device[0].txpower=17 //设置功率为17dbm 太高会烧无线模块
uci set wireless.@wifi-device[0].channel=6 //设置无线信道为6
uci set wireless.@wifi-iface[0].mode=ap //设置无线模式为ap
uci set wireless.@wifi-iface[0].ssid=[自己设置SSID] //设置无线SSID
uci set wireless.@wifi-iface[0].network=lan //无线链接到lan上
uci set wireless.@wifi-iface[0].encryption=psk2 //设置加密为WPA2-PSK
uci set wireless.@wifi-iface[0].key=[密码] //设置无线密码

提交应用配置
Shell代码
uci commit //应用
/etc/init.d/network restart //重启网络服务

安装luci管理界面
Shell代码
opkg update // 更新软件列表
opkg list-installed // 查看已安装软件
opkg install luci // 安装LUCI
opkg install luci-i18n-chinese // 支持中文

luci-app-firewall - 0.10.0-1
luci-i18n-english - 0.10.0-1
luci-lib-core - 0.10.0-1
luci-lib-ipkg - 0.10.0-1
luci-lib-lmo - 0.10.0-1
luci-lib-nixio - 0.10.0-1
luci-lib-sys - 0.10.0-1
luci-lib-web - 0.10.0-1
luci-mod-admin-core - 0.10.0-1
luci-mod-admin-full - 0.10.0-1
luci-proto-core - 0.10.0-1
luci-proto-ppp - 0.10.0-1
luci-sgi-cgi - 0.10.0-1
luci-theme-base - 0.10.0-1
luci-theme-openwrt - 0.10.0-1

即可完成LUCI的安装。
输入以下命令开启支持web服务的uhttpd,并设置其为自启动:
Shell代码
/etc/init.d/uhttpd enable # 开机自启动
/etc/init.d/uhttpd start # 启动uhttpd

  • Wifidog
    你可以尝试执行以下命令安装Wifidog:
    opkg update # Optional
    opkg install wifidog

–sftp安装
opkg update
opkg install vsftpd openssh-sftp-server
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start

端口转发命令:
通过修改vi /etc/config/firewall 这个文件来实现开放自己需要的端口到外网。

config rule ‘httpdwan’
option src ‘wan’
option dest_port ‘8088’
option proto ‘tcp’
option target ‘ACCEPT’
option name ‘’’’httpd wan accept tcp port 8088’’’’

保存后,执行 /etc/init.d/firewall restart 重启防火墙。

openwrt 应用后台运行、开机自启动

后台运行

实际上要一个应用后台运行,在输入命令的时候加上 “&” 符号就可以了,向下面

1
helloworld &

开启自启动

开机自启动这好像还是挺多方法的,一个是在 /etc/init.d目录编写文件,一个是在网页上的开机运行脚本上加上上面后台运行的命令。

编写自启动脚本

在 openwrt 开发板命令行中输入

1
vi /etc/init.d/mystart

里面输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh /etc/rc.common
START=99
STOP=15

start(){
echo start helloword
helloword &
}

stop(){
echo stop helloword
}

restart(){
echo restart helloword
}

enable(){
echo enable helloword
}

disable(){
echo disable helloword
}

命令应该很好理解,前面 START 和 STOP 是启动和关闭的优先级。

下面是另一种自启动脚本的写法,应该是差不多,注释写的也挺清楚了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh /etc/rc.common

START=99 # 执行的顺序,按照字符串顺序排序并不是数字排序
STOP=15
SERVICE=helloword
PROG=/bin/helloword
USE_PROCD=1 # 使用procd启动

# start_service 函数必须要重新定义
start_service()
{
echo service helloword start
procd_open_instance # 创建一个实例, 在 procd 看来一个应用程序可以多个实例
# ubus call service list 可以查看实例
procd_set_param command $PROG # mycode执行的命令是"/app/mycode", 若后面有参数可以直接在后面加上
procd_set_param respawn # 定义respawn参数,告知procd当mycode程序退出后尝试进行重启
# procd_close_instance # 关闭实例
}

编写完文件后还应该记得改一下权限,让脚本能够执行

1
2
cd /etc
chmod -R 777 init.d/mystart #设置权限,否则无法激活开机启动,提示权限不足

使用的时候按下面输入命令就可以,和普通服务类似

1
2
/etc/init.d/mystart enable #激活开机启动
/etc/init.d/mystart start #运行start函数启动程序
在网页上配置自启动

由于这项目是上一家公司的时候开发的了,都快一年了,源码都在之前公司的笔记本电脑里面,自己电脑没源码,就简单讲讲。

先要打开 openwrt 的网页控制界面,里面找到自启动功能,在里面的文本行中加入下面命令

1
helloword &

实际上使用起来,好像在网页上配置的自启动还好一些,用配置文件写的但是还总出错,当时是对4G上网模块有影响,具体记不清了。当时分析出错的原因是,用配置文件写的命令在软件被停止后会尝试重新启动,当然如果你没遇到这些问题,两种方法都是可以的。

自启动进阶

网上的博客一般到这里就完了,可是我当时不想做差不多先生,我将自启动脚本写到我们的源码文件中去,在安装的时候就给自动弄好,简单省事,下面看看写法。

  • 先编写配置文件

这里再源码目录总编写我们的自启动脚本文件,以上一篇的 helloword 为例

1
2
mkdir ~/openwrt/package/hellworld/auto
cd ~/openwrt/package/hellworld/auto

这里新起了一个目录来存放我们的配置文件,内容和上面一样,不说了。

接下来的重点是编写外层的 Makefile 文件,在复制那一段将我们的配置文件复制到 /etc/init.d/ 目录中去

1
2
3
4
5
6
define Package/helloword /install
echo "Here is Package/install"
$(INSTALL_DIR) $(1)/bin $(1)/etc/init.d/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloword $(1)/bin/
$(INSTALL_BIN) ./auto/mystart $(1)/etc/init.d/
endef

注意这里的 $(INSTALL_BIN),复制的是二进制文件,权限问题我忘了,如果启动不了,也还是按上面的方法增加运行权限吧。