OpenWrt学习(二)

news2024/12/26 12:37:13

OpenWrt是基于Linux系统进行开发需要学习Linux系统基本知识。下面介绍一下OpenWrt系统下常用的指令。

时间命令

查看当前时间

date

查看当前日历

cal

关机和重启

立即安全关闭系统 

shutdown -h now

嵌入式设备不会关机,只会停止运行系统。

重新启动系统

reboot

强制将缓存写入存储器

sync

这个指令是用来保证在重启之后不会因缓存没有保存到磁盘上而导致文件损坏。这个指令没有任何返回信息。

权限机制

执行ls -l指令可以获取当前文件夹中的一般文件

文件权限

比如

第一个字符表示是否是文件夹,如果显示为d表示目录,显示-表示非目录

接下来3个字符为一组,第一组表示文件所有者对该文件的权限,第二组表示相同用户组对该文件的权限,第三组表示其他人对文件的权限。-表示不存在权限,权限r(可读)、w(可写)、x(可执行)。

所有者

文件权限之后,li表示这个文件的所有者用户

第二个li表示这个文件所有者的用户分组

文件容量

数字82表示该文件的容量,单位是字节。如果要换算成KB,要用该数值除以1024,换算程MB,要用该数值初一1024两次。

文件日期

7月8 14.46为文件修改日期

可执行文件

Linux中看是否可执行看以下参数:

文件是否被给予了执行权限;是二进制可执行文件,还是脚本程序。 

隐含文件

可以使用ls-al查看隐含文件,这些文件都是数据文件,是为了让文件列表看起来更清爽。

修改所有人

只有root用户才能将文件所有人修改为其他人

chown li demo2.sh

修改目录和目录下所有文件

chown -R li ./*

修改所有组

chgrp li demo2.sh

修改目录和目录下所有文件

chgrp -R li ./*

修改文件权限

关键字chmod 权限编号 文件(目录)

权限编号:r:4     w:2     x:1

权限编号一个3位,表示所有者,所有组,其他人权限。

比如权限编号760表示所有者拥有rwx权限,所有组拥有读写权限,其他人无权限。

修改目录和目录下所有文件(sh结尾的)

chmod -R 600 ./*.sh

文件与目录管理

路径概念

根目录:/表示根目录,所有的资源都是在根目录之上存在的。

相对路径:从根目录开始写的叫绝对路径

相对路径:从当前目录开始找的叫当前路径

特殊目录

一个是.和..这两个是特殊目录

.代表当前目录,..代表上一级目录。

变换目录

cd

查看当前所在目录是哪个

pwd

创建目录

mkdir

删除目录

rmdir

删除目录指令只能删除空的目录,如果目录下面还有其他文件和目录,就要使用rm命令了。

列表文件和目录

ls

显示文件详细信息 -l;显示包括隐含文件-al;显示其他路径下的文件详细信息。-l [路径]

复制文件或者目录

cp [参数] 原始位置 目标位置

[参数]:-a:保留原有权限

-af:保留原有权限,复制原始位置下的所有文件及目录

-avf: 保留原有权限,复制原始位置下的所有文件及目录,并且在屏幕显示过程

删除文件或整个目录

rm [参数] 路径或文件名

[参数]:-f:强制删除,不提示确认

-r:递归删除

移动或更名

mv [参数] 原始名字或路径 新名字或路径

[参数]:-f:强制完成

文件分析 

查看各种文件内容

cat [文件名]

仅限于查看文本文件

分行查看

cat [文件名] |more

按回车就会一行一行的弹出来,提前结束查看可以使用 Ctrl+C 

查看文件最后几行

tail [参数] 文件

[参数]:-n 行数,-n 50就是50行

查看启动信息

dmesg

可以搭配|more分行查看

其他指令

查看进程:ps

查看内存:free

查看内核版本:uname -r

查看工作时间:uptime

查看网络端口:netstat -lnp

查看磁盘使用情况:df

查看已经装载的分区:mount

查看系统可用磁盘和分区:fdisk -l

Vi编辑器

vi命令

Vi [文件名]

如果文件名存在则编辑该文件,如不存在则创建一个新文件。

出现”新文件“则表示这个文件不存在。

Vi的3个状态

命令行模式:打开文件的默认状态。命令行模式可以进入另外两种模式;在命令行模式可以删除某一行内容,将光标移动到该行上快速敲击d两次。

插入模式:可以修改内容。命令模式输入i进入插入模式;插入模式下,按ESC返回命令行模式

底行模式:实现文件保存和退出。命令行模式中输入”:W“ 保存文件;”:wq“ 保存并退出;”:q!“ 退出但是对修改不做保存。

如果在编辑过程中,掉电,断网,卡死非正常退出重新连接上去再编辑,Vi一般会进入冲突模式,一般被你所编辑的文件会产生一个临时文件,是.swp后缀的,可以删掉。

基础Shell编程

Shell的运行方式

Interactive交互式:根据屏幕反馈再考虑执行下一个命令时,每次交互只执行一条命令。

Batch批处理:使用者事先写好一个Shell程序,然后通过命令方式执行这个程序,这个程序中又包含很多其他功能在一起批量实现

第一行表示系统解析器的位置;第二行是echo语法,显示出相关字符

作为可执行文件,确保文件可执行

变量

定义变量

在 Shell 编程中,变量是用于存储数据值的名称。

定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

your_name="runoob"

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

  • 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。

  • 不能以数字开头: 变量名不能以数字开头,但可以包含数字。

  • 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。

  • 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。

  • 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。

  • 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

使用变量

使用一个定义过的变量,只要在变量名前面加$符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯。

已定义的变量,可以被重新定义,如:

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)

变量作用域

局部变量:只在当前脚本或当前命令行环境中有效的变量。

环境变量:所有程序和 软件被通过命令行启动时可以访问到的变量

Shell特殊变量:一组特殊变量,用来帮助解决编写脚本时输入/输出的问题。

 命令替换

需要将某些命令执行的结果存储到一个变量中,以便后面使用,这是就需要使用反引号``来实现(就是1前面那个键)

例如

运行就会得到:

运算符

算术运算符

+、-、*、/

取余:%、赋值:=;相等比较:==;不等比较:!=

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的结果时数字(如真假)关系运算符返回的值总是真或者假。

相等运算符:-eq

不等运算符:-ne

左边大于右边:-gt

左边小于右边:-it

左边是否大于等于右边:-ge

左边是否大于等于右边:-le

布尔运算符

非运算符:!

或运算符:-o

与运算符:-a

字符串运算符

字符串等于符:=

字符串不等符:!=

字符串长度为0:-z

字符串长度不为0:-n

字符串为空:str

if($a)
then
    echo "$a :string is not empty"
else
    echo"$a :string is empty"

文件测试运算符

Shell常用指令,常用来判断文件的各种情况

 检测文件是否为块设备:-b file

检测文件是否为字符设备:-c flie

检测文件是否为目录:-d flie

检测文件是否为普通文件:-f file

检测文件是否为管道文件:-p flie

检测文件是否可读:-r file

检测文件是否可写:-w file

检测文件是否可执行:-x file

检测文件是否为空:-s file

检测文件是否存在:-e file

file="/var/test.sh"
if[-r $file]
then
    echo "File has read access"

注释语法

注释内容不被执行,仅仅用来说明。Shell不支持多行注释,每次只能注释一行,以#开头的内容到换行位置表示注释。

字符串

单字符串
abc='only string'

单字符串不支持任何变量,所有信息都直接输出

转义字符串
dd='hello'
adc="${dd} world is \"Smart Router"\!"

转义字符串中可以直接显示变量,也支持转移符号。

字符串拼接
yourname="axwrt"
greeting=$yourname"is branch of openwrt !"

获取字符串长度
string="hello world!"
echo ${#string}
提取字符
string="hello world"
echo ${strin:1:4}

条件判断

单结果判断if 
if [表达式]
then 
    如果成立则执行
fi
双结果判断if else
if [表达式]
then 
    如果成立则执行
else
    如果不成立则执行
fi

多结果判断if elif else

 

if [表达式1]
then 
    如果表达式1成立则执行
elif [表达式2]
then
    如果表达式2成立则执行
else
    如果都不成立则执行
fi

 循环表达

循环for
for 变量 in 列表
do
    指令
done

 

循环while 
while 指令内容
do   
    在指令内容为真的情况下执行
done

中断全部循环 break/continue

两者用法完全相同,唯一区别是break退全部循环,而continue只退出一级

输入/输出重定向

我们在屏幕上能看到的信息虽然实在同一个地方显示的,其实来源是两个不同的途径,也叫做管道,分别是

STDOUT(标准输出),以字符1为代表,大部分的打印或显示函数以及语法都是通过这个管道输出的;

STDERR(标准错误输出),以字符2为代表,大部分错误只要程序写的规范,错误信息就是通过这个管道输出的。

例如使用>将STDOUT改变到display文件中。

如果使用>>就是追加STDOUT信息,而不是覆盖掉已有的。

使用黑洞,一劳永逸

我们写程序时,负责启动一个服务,但是服务经常乱显示,也不适合将显示的信息放在一个文件中,显示的东西实在没有任何用处,就需要Linux的设备文件(黑洞)。它永远是空的,凡是扔进去的都一去不复返。就是 /dev/null

例如,没有扔STDERR的时候,错误信息都显示在屏幕上。

将STDERR扔在黑洞。

将STDOUT和STDERR全部扔到黑洞中。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内核是如何发送数据包

1、网络发包总览 网络发包总流程图如下: 从上图中可以看到用户数据被拷贝到内核态,然后经过协议栈处理后进入RingBuffer。随后网卡驱动真正的将数据发送了出去。当发送完成的时候,是通过硬中断来通知CPU,然后清理RingBuffer。 …

2024.9.25 作业和思维导图

栈 #include <iostream> #include <stdexcept> using namespace std;class My_stack { private:int * data; //栈空间int capacity;int top; //栈顶元素的下标 protected:public:/******************成员函数*************///构造函数My_stack(int c 10):capac…

JS中的事件和DOM操作

一、事件[重要] 1、 事件介绍 事件: 就是发生在浏览器(页面)上一件事,键盘事件,鼠标事件,表单事件,加载事件等等 2、 事件绑定方式 事件要想发生,就得将事件和标签先绑定(确定哪个标签发生什么事情,又有什么响应) 一个完整的事件有三部分 事件源(标签),哪里发出的事. 什么事(…

【DAY20240925】随机梯度下降:高效优化背后的原理与进阶策略

文章目录 前言随机梯度下降SGDMini-batch 随机梯度下降常见优化算法的改进版本 前言 梯度下降更新的通用形式&#xff1a; 论文中类似的表达形式&#xff0c;都表示根据 损失函数对这些参数的梯度 进行更新参数。梯度值较大时&#xff0c;说明当前控制参数对损失有较大的影响…

排序个人总结

插入排序 思路&#xff1b;定义 i 和 j&#xff0c;默认 i 前面的数都是有序的&#xff0c;j 定义为 i 的前一个数&#xff0c;把 i 的值给tmp&#xff0c;tmp与j对应的值进行比较&#xff0c;如果arr[j] > tmp,将arr[j] (大的数前移一位)&#xff0c;如下图 代码&#xf…

【亲子英语】英语故事有声绘本分享

文章目录 一、视觉与听觉的双重盛宴二、语言学习的最佳伙伴三、亲子共读的温馨时光四、适用人群广泛&#xff0c;随时随地学习五、获取方式 在这个快速发展的时代&#xff0c;英语学习已经不再局限于课本和课堂。特别是对于活泼好动的孩子们来说&#xff0c;一种既有趣又高效的…

open-resty 服务安装jwt插件

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/16 22:07 lua-resty-jwt 插件 如果想使用Lua识别用户令牌&#xff0c;我们需要引入lua-resty-jwt模块&#xff0c;是用于 ngx_lua 和 LuaJIT 的 Lua 实现库&#xff0c;在该模块能实现Jwt令牌生成、Jwt令牌校验。 下载…

9.25作业

手动实现队列 代码如下 MyQueue.h #ifndef MYQUEUE_H #define MYQUEUE_H #include <iostream> #include <cstring> using namespace std;class Queue{ private:char* data; //字符串数据int len; //当前数量int size; //最大容量int front; //头索引int …

uboot — uboot命令的使用

uboot的命令繁多&#xff0c;下文只对工作中常用到的命令进行记录&#xff0c;其余命令待用到时再查查资料也不迟 一、环境变量操作命令 1、printenv 打印环境变量 2、setenv 修改环境变量/新建环境变量 3、saveenv 保存环境变量/删除环境变量&#xff08;给环境变量赋空值…

巴特沃斯滤波器的MATLAB实现

一、引言 巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;&#xff0c;是滤波器的一种&#xff0c;其主要特点是通频带的频率响应曲线最平滑。这种滤波器最先由英国工程师斯蒂芬巴特沃斯(StephenButterworth)在1930年发表在英国《无线电工程》期刊的一篇论文中提出的…

基于vue框架的村务综合服务系统8p0l3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;居民,村委,支部,公告信息,通讯录,重点户 开题报告内容 基于Vue框架的村务综合服务系统开题报告 一、引言 随着信息化时代的深入发展&#xff0c;农村社会治理模式正经历着深刻的变革。传统村务管理方式往往存在信息不对称、效率低下、…

【SpringBoot整合Redis测试Redis集群案例】

1、第一步&#xff0c;创建springboot项目&#xff0c;并导入依赖 如图&#xff0c;创建项目遇到的第一个问题就是&#xff0c;当type选择maven&#xff0c;jdk选择1.8时&#xff0c;java部分没办法选择1.8的版本&#xff0c;这怎么办呢&#xff1f; 原因&#xff1a;搜了一下…

【C++ Primer Plus习题】17.7

问题: 解答: #include <iostream> #include <vector> #include <string> #include <fstream> #include <algorithm>using namespace std;const int LIMIT 50;void ShowStr(const string& str); void GetStrs(ifstream& fin, vector<…

【多线程】面试高频考点!JUC常见类的详细总结,建议收藏!

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 JUC是“Java Util Concurrency”的缩写&#xff0c;指的是Java并发工具包&#xff0c;它位于java.util.concurrent包及其子包中。JUC包提供了大量用于构建并发应用程序的工具和…

简历信息提取系统源码分享

简历信息提取检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

C++之stack 和 queue

目录 前言 1.stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack 的模拟 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用 2.3 queue的模拟 3.适配器 3.1 什么是适配器 3.2 STL标准库中stack和queue的底层结构 3.3 deque 的介绍&#xff08;了解&…

每日OJ题_牛客_ 腐烂的苹果_多源BFS_C++_Java

目录 牛客_腐烂的苹果&#xff08;多源 BFS&#xff09; 题目解析 C代码 Java代码 牛客_腐烂的苹果&#xff08;多源 BFS&#xff09; 腐烂的苹果_牛客题霸_牛客网 题目解析 多源 BFS 问题&#xff0c;固定套路&#xff0c;BFS学习 &#xff1a;Offer必备算法28_多源BFS_…

【C++算法】哈希表

哈希表介绍&#xff1a; 1.哈希表是什么&#xff1f; 存储数据的容器 2.哈希表有什么用&#xff1f; “快速”查找某个元素——O(N) 3.什么时候使用哈希表&#xff1f; 频繁的查找某一个数的时候&#xff0c;频繁也可以使用二分&#xff08;有序&#xff09; 4.怎么用哈希表&…

cadence多版本启动问题

一、问题描述 电脑上安装了 17.4 和16.6两个版本打开16.6时会弹出 **原因&#xff1a;**使用Allegro设计PCB时&#xff0c;当关闭软件后&#xff0c;再次打开Allegro软件&#xff0c;打开的文件为上一次操作过的.brd文件&#xff0c;这是Allegro软件安装的默认设置。 二、解…

单体项目中定时任务的实现-详细教程

单体项目中定时任务的实现 在企业开发中&#xff0c;遇到的项目无非就两种&#xff0c;单体项目和分布式项目 单体项目中实现定时任务有以下几种方式 1. 使用Timer实现定时任务&#xff08;不常用&#xff09; 1.1、JDK1.3推出的定时任务实现工具类java.util.Timer 1.2、API…