lv3 嵌入式开发-3 linux shell命令(权限、输入输出)

1 Shell概述

随着各式Linux系统的图形化程度的不断提高,用户在桌面环境下,通过点击、拖拽等操作就可以完成大部分的工作。 然而,许多Ubuntu Linux功能使用shell命令来实现,要比使用图形界面交互,完成的更快、更直接。

英文单词shell可直译为“贝壳”。“贝壳”是动物作为外在保护的一种工具。 可以这样认为,Linux中的shell就是Linux内核的一个外层保护工具,并负责完成用户与内核之间的交互

Shell是一个命令行解释器,它为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用Shell来启动、挂起、停止、编程等操作。  

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。  Shell还是一个功能强大的编程语言、编写方面、调试方便、灵活性强。  

Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

补充:像C语言是需要编译器编译通过后才能执行,而Shell脚本可以一条条执行,直到报错。

1.1 Shell分类

1.2 查看当前系统的Shell

#查看当前系统有哪些shellcat /etc/shells #查看当前是什么shellecho $SHELL 

可以看到此ubuntu使用得是bash

#立即关机
linux@ubuntu:~$ sudo shutdown -h now
#立即重启
linux@ubuntu :~$ sudo shutdown -r now
linux@ubuntu :~$ sudo reboot now
#定时关机
linux@ubuntu:~$ sudo shutdown -h +45 “That is all, game over.”
#定时重启
linux@ubuntu:~$ sudo shutdow -r +60

2 权限相关命令

2.1 切换用户

用户,又称使用者,是指使用电脑或网络服务的人,通常拥有一个用户账号,并以用户名识别。用户有时也泛指没有充分技术经验的人。

Linux下分为:  超级用户(根目录、安装软件等)     普通用户

su 使用命令替换用户和组ID

命令参数:

-c  变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者 

-l   重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root,不加-l不会切换环境变量

--help 显示说明文件

--version 显示版本资讯

切换root用户

linux@linux:~$ su -l root
Password: 
su: Authentication failure

解决方法:可能没有创建root密码

2.2 设置用户密码

passwd  修改自己的密码

passwd  [username]  修改指定用户的密码 

linux@linux:~$ sudo passwd root
[sudo] password for linux: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

exit退出用户

linux@linux:~$ su -l root
Password: 
root@linux:~# exit
logout
linux@linux:~$ 

 环境变量 包括shell类型 也会跟着用户切换,

linux@linux:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
linux@linux:~$ su -l root
Password: 
root@linux:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@linux:~# su root
root@linux:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
root@linux:~# 

su什么都不加默认是root用户下

2.3 修改文件权限

查看文件权限ls -l

r代表读 w代表写 x代表可执行,一共有三组,最后一组没有可执行权限

第一组代表当前用户u

第二组代表同组(几个用户)

第三组代表其他用户

修改权限方法

字母法:chmod  (u g o a)   (+ – =)   (r w x)   (文件名)  

数字法:chmod + 数字组合 + 文件名

root@linux:~# touch file
root@linux:~# ls
file
root@linux:~# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep  2 02:14 file
root@linux:~# chmod u+x file
root@linux:~# ls -l
total 0
-rwxr--r-- 1 root root 0 Sep  2 02:14 file
root@linux:~# chmod a+x file
root@linux:~# ls -l
total 0
-rwxr-xr-x 1 root root 0 Sep  2 02:14 file
root@linux:~# chmod g=rw file
root@linux:~# ls -l
total 0
-rwxrw-r-x 1 root root 0 Sep  2 02:14 file
root@linux:~# 
root@linux:~# chmod 777 file
root@linux:~# ls -l
total 0
-rwxrwxrwx 1 root root 0 Sep  2 02:14 file

3 基本命令

3.1 常用

pwd    //查看当前路径
ls     //查看目录
cd     //进入文件夹
mkdir  //创建目录
rmdir  //删除空目录
cp     //复制拷贝
mv     //移到重命名
touch  //创建文件

3.2 man命令 

man帮助信息:

NAME:命令的名称

SYNOPSIS:命令的语法格式

DESCRIPTION:命令的一般描述以及用途

OPTIONS:描述命令所有的参数或选项

SEE ALSO:列出联机帮助页中与该命令直接相关或功能相近的其他命令

BUGS:解释命令或其输出中存在的任何已知的问题或缺陷

EXAMPLES:普通的用法示例

AUTHORS:联机帮助页以及命令的作者

man使用

1   Executable programs or shell commands        

2   System calls (functions provided by the kernel)        

3   Library calls (functions within program libraries)        

4   Special files (usually found in /dev)        

5   File formats and conventions, e.g. /etc/passwd        

6   Games        

7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)        

8   System administration commands (usually only for root)        

9   Kernel routines [Non standard]

示例:

man 3 printf

man ls

 

 3.3 date命令

查看文档

man date
date - print or set the system date and timedate +%T
date +%Y/%m/%d
date +%H:%M
date +"当前时间为:%Y/%m/%d %H:%M:%S"
date +"三个月之后:%Y/%m/%d %H:%M:%S" -d "+3 month"
date +"三天前:%Y/%m/%d  %H:%M:%S" -d "-3 day"
date -s "20300111 19:43:44"

3.4 clear命令

clear - clear the terminal screen
ctrl + l(字母L的小写)

3.5 df命令

df - report file system disk space usage常用参数:-a :列出所有文件系统-k :列出磁盘的分配情况(KB)-h :同-k, 但大小以G、M,K单位显示-l :仅列出本地文件系统

3.6 du命令

du - estimate file space usage常用参数:-a :仅列出空闲的文件数 -h :列出磁盘的使用情况(KB) -s :列出总的空闲空间(KB)

4 输入输出相关操作

4.1 输出命令

echo - display a line of textEcho the STRING(s) to standard output.-n     do not output the trailing newline  不带换行符-e     enable interpretation of backslash escapes 使能转译-E     disable interpretation of backslash escapes (default) 不使能转译

示例

linux@linux:~$ echo "hello world"  
hello world                              
linux@linux:~$ echo -n "hello world"
hello worldlinux@linux:~$ echo "hello world\n"
hello world\n
linux@linux:~$ echo -e "hello world\n"
hello worldlinux@linux:~$ echo -E "hello world\n"
hello world\n
linux@linux:~$ a=5
linux@linux:~$ echo $a
5
linux@linux:~$ echo "$a"
5
linux@linux:~$ echo '$a'           //单引号原样输出
$a
linux@linux:~$ 

4.2 输入输出重定向

什么是重定向?

输入/输出重定向是改变shell命令或程序默认的标准输入/输出目标,重新定向到新的目标。

默认的输入输出位置是哪里?

linux中默认的标准输入定义为键盘,标准输出定义为终端窗口。

标准输入:(stdin,文件描述符为0):默认从键盘输入

标准输出:(stdout,文件描述符为1):默认输出到屏幕。

标准出错:(stderr,文件描述符为2):默认输出到屏幕。

为什么要使用重定向?

1.当屏幕输出的信息很重要时,而且希望保存重要的信息时

2.后台执行中的程序,不希望它干扰屏幕正常的输出结果时

3.系统的例行命令,例如定时任务的执行结果,希望他可以存下来

4.一些执行命令,我们已经知道他可能出现错误信息,想把它直接丢掉时

5.执行一个命令,可能报错和正确的输出并序,类似错误日志与标准正确日志需要分别输出至不同的文件。

输出重定向

 示例:

因为标准出错默认输出到屏幕,所以直接使用>无法写入log,这时候需要使用出错重定向将2> log。如果想标准输出和标准出错都输出到log中,那么先将标准输出重定向到log,再将标准出错重定向到标准输出。

输入重定向

示例:

<功能,不加也能有对应功能,使用频率少

 

 <<功能,遇到分界停止

 

< >查看并输出到另一个文件 

 

4.3 通配符、管道

通配符是一种特殊语句,通配符是用来代替字符的

linux@ubuntu:~/mywork$ ls  file_*.txt
file_liu.txt   file_wang.txt   file_lee.txt   file_song.txtlinux@ubuntu:~/mywork$ ls  file_?.txt
file_1.txt   file_2.txt   file_3.txt   file_4.txt   file_5.txtlinux@ubuntu:~/mywork$ ls   file_[1-5].txt
file_1.txt   file_2.txt   file_3.txt   file_4.txt   file_5.txtlinuxx@ubuntu:~/mywork$ ls   file_[^245].txt
file_1.txt   file_3.txt

管道

管道可以把一系列命令连接起来,意味着第一个命令的输出将作为第二个命令的输入,通过管道传递给第二个命令,第二个命令的输出又将作为第三个命令的输入,以此类推。就像通过使用“|”符连成了一个管道。

示例

wc是统计,-l多少行,-w多少单词,-c多少字符

管道细节要求,前面得命令必须要有结果,没有结果无法使用

管道结合查找

4.4 历史查询、补齐功能

历史补齐 history 或者!

history

示例 

编译常用!g,因为gcc编译经常命令很长

tab 补齐

4.5 命令置换

用法:把终端输出得结果置换保存到变量

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

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

相关文章

MOS场效应管

导体三极管中参与导电的有两种极性的载流子&#xff0c;所以也称为双极型三极管。本文将介绍另一种三极管&#xff0c;这种三极管只有一种载流子参与导电&#xff0c;所以也称为单极型三极管&#xff0c;因为这种管子是利用电场效应控制电流的&#xff0c;所以也叫场效应三极管…

JVM 垃圾收集器

重点&#xff1a;CMS&#xff0c;G1&#xff0c;ZGC 主要垃圾收集器如下&#xff0c;图中标出了它们的工作区域、垃圾收集算法&#xff0c;以及配合关系。 Serial 收集器 Serial 收集器是最基础、历史最悠久的收集器。 如同它的名字&#xff08;串行&#xff09;&#xff0c…

使用实体解析和图形神经网络进行欺诈检测

图形神经网络的表示形式&#xff08;作者使用必应图像创建器生成的图像&#xff09; 一、说明 对于金融、电子商务和其他相关行业来说&#xff0c;在线欺诈是一个日益严重的问题。为了应对这种威胁&#xff0c;组织使用基于机器学习和行为分析的欺诈检测机制。这些技术能够实时…

从0创建vite+vue3项目遇到的一些坑

使用ws自动创建的vitevue3项目后设置不了alias 答&#xff1a;不懂原理&#xff0c;但是有其他方法解决。直接在命令行执行“npm init vitelatest"后&#xff0c;一路选下去有create-vue的选项&#xff0c;就选这个create-vue创建&#xff1b;创建后会自动导入一个叫node…

滑动窗口最大值

题目链接 滑动窗口最大值 题目描述 注意点 只可以看到在滑动窗口内的 k 个数字返回 滑动窗口中的最大值1 < k < nums.length 解答思路 首先使用双端队列解决本题&#xff0c;队列中存储的是元素在数组中的下标&#xff0c;不断往队尾添加元素下标。在双端队列中&…

【图解算法数据结构】分治算法篇 + Java代码实现

文章目录 一、重建二叉树二、数值的整数次方三、打印从 1 到最大的 n 位数四、二叉搜索树的后序遍历序列五、数组中的逆序对 一、重建二叉树 public class Solution {int[] preorder;HashMap<Integer, Integer> dic new HashMap<>();public TreeNode buildTree(in…

算法:分治思想处理归并递归问题

文章目录 算法原理实现思路典型例题排序数组数组中的逆序对计算右侧小于当前元素的个数 总结 算法原理 利用归并思想进行分治也是很重要的一种思路&#xff0c;在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的&#xff0c;归并排序要能写出来&#xff1a; c…

Linux学习之vsftpd虚拟用户

/etc/vsftpd/vsftpd.conf里边有几项跟vsftpd虚拟用户有关的主要配置&#xff1a; guest_enableYES&#xff0c;允许匿名用户登录vsftpd guest_usernamevirtual&#xff0c;指定虚拟用户账户为virtual&#xff0c;就是把虚拟用户映射成Linux本地用户&#xff0c;这样可以使用Lin…

【C++】C++11新特性(下)

上篇文章&#xff08;C11的新特性&#xff08;上&#xff09;&#xff09;我们讲述了C11中的部分重要特性。本篇接着上篇文章进行讲解。本篇文章主要进行讲解&#xff1a;完美转发、新类的功能、可变参数模板、lambda 表达式、包装器。希望本篇文章会对你有所帮助。 文章目录 一…

用反射实现自定义Java对象转化为json工具类

传入一个object类型的对象获取该对象的class类getFields方法获取该类的所有属性对属性进行遍历&#xff0c;并且拼接成Json格式的字符串&#xff0c;注意&#xff1a;通过属性名来推断方法名获取Method实例通过invoke方法调用 public static String objectToJsonUtil(Object o…

MVC模式分层练习

新建库 新建表 插入点数据 先不用MVC模式写功能,来看下缺点是什么 新建一个空项目 选项项目使用的JDK 自己的IDEA总是要重启下 新建模块 因maven还没教 添加框架支持 添加后项目多了这些 添加些必要依赖 这里注意下,如果导入jar包不对可以重新导入下或者是jar包本身出了问…

C语言每日一练--------Day(8)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;图片整理 寻找数组下标 &#x1f493;博主csdn个人主页&#xff1a;小小…

安防监控/视频存储/视频汇聚平台EasyCVR接入海康Ehome车载设备出现收流超时的原因排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚平台既具…

C++ for 循环

for 循环允许您编写一个执行特定次数的循环的重复控制结构。 语法 C 中 for 循环的语法&#xff1a; for ( init; condition; increment ) {statement(s); }下面是 for 循环的控制流&#xff1a; init 会首先被执行&#xff0c;且只会执行一次。这一步允许您声明并初始化任…

1688API技术解析,实现关键词搜索淘宝商品(商品详情接口等)批量获取,可高并发

要使用1688API接口采集商品详情&#xff0c;可以按照以下步骤进行&#xff1a; 获取API接口权限&#xff1a;申请1688的app key和app secret&#xff0c;并获取access_token。 编写API请求代码&#xff1a;使用Python等编程语言&#xff0c;编写API请求代码。以下是一个Python…

ARM Cortex-M 的 SP

文章目录 1、栈2、栈操作3、Cortex-M中的栈4、MDK中的SP操作流程5、Micro-Lib的SP差别1. 使用 Micro-Lib2. 未使用 Micro-Lib 在嵌入式开发中&#xff0c;堆栈是一个很基础&#xff0c;同时也是非常重要的名词&#xff0c;堆栈可分为堆 (Heap) 和栈 (Stack) 。 栈(Stack): 一种…

【Maven】如何发现,定位,解决依赖冲突

发现冲突 运行的时候可能报出错误xx类找不到xx方法&#xff0c;xx类找不到&#xff0c;很有可能就是冲突导致的。 定位冲突根因 通过idea maven插件 idea安装插件&#xff0c;maven helper 比如我有两个依赖&#xff0c;guava和findbug。 他们都用到了jsr305&#xff0c;…

可观测性用观测云,观测云护航「杭州亚运会」

2023 年亚洲运动会定于 2023 年 9 月 23 日至 10 月 8 日在中国杭州举办&#xff0c;这是在党的二十大召开后&#xff0c;我国疫情防控措施优化调整后举办的最大规模、最高水平的国际综合性运动会&#xff0c;意义十分重大。杭州亚组委以「举办一届史上最成功的亚运会」为工作目…

14:00面试,14:08就出来了,问的问题有点变态

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

C++的多重继承

派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。 …