嵌入式Linux学习 Day1

130 阅读6分钟

一 .shell命令

在linux中我们避免不了要和shell命令打交道,今天呢,我就来浅浅的讲一下shell命令。

其实我们在terminal(终端)执行的shell命令可以看做是一个应用程序,就拿ls(list)命令做简单的讲解。当我们在terminal输入ls然后回车之后,系统就会在PATH里面去找,看看是否有该应用程序,如果有,就将该应用程序运行,如果没有就不会执行。那么问题来了,PATH是什么东西呢,其实PATH是指的环境变量,在linux中有很多环境变量,我们可以通过env命令来查看环境变量

image.png 其中PATH的环境变量怎么看呢,可以通过echo $PATH来查看

image.png

大家可以看到,PATH里面有很多环境变量,其实也就是路径,它们是通过分号(:)来隔开的。回到刚才所说的,我们执行的ls命令,系统就会在PATH所有的环境变量里面去寻找,看看那个环境变量里面有ls这个应用程序。这里我先告诉大家,ls位于/bin/ls

image.png

image.png

系统找到这个应用程序之后就会执行该应用程序,我们的shell命令也就执行完毕。那么接下来我教大家如何将自己写的应用程序弄成shell命令。

1. 编写程序,并且编译成可执行文件

image.png

这个是已经写好的c语言文件,cat命令是展示文件的内容,后续会讲到。

image.png

这是将hello.c文件编译成可执行文件,名字为hello,取名大家可根据自己来,我这里比较随意。

image.png

ls(list)命令是列出文件,后续也会讲到。大家可以看到有hello这个可执行文件了,在当前目录下是可以执行的,但是我刚才说了,我们要把这个应用程序(我说的可执行文件和应用程序在这里是一样的)在任何一个地方都可以执行,那么我们该怎么办呢??只需要添加一下环境变量即可。下面给大家介绍三种添加环境变量的方式。

2. 添加环境变量

image.png

在添加环境变量之前先和大家讲一个pwd命令,这个命令就是可以看到大家当前用户在哪里,pwd(print working direction),大家可以看到我当前用户是mcp,路径是 /home/mcp,那么我后续添加环境变量都是将这个添加进去

方式一 : 执行shell命令 export PATH=$PATH:/home/mcp

image.png

这个命令是临时添加环境变量,如果我们将terminal关了,再开一个,那么环境变量就不起作用了。

方式二 : 执行shell命令 sudo gedit /etc/environment 这个命令意思是 sudo:使用root权限 gedit:编辑 /etc/environment文件内容。

image.png

大家可以看到这个和我们上文看到的PATH里面的是一样的,然后添加环境变量 :/home/mcp

image.png

方式三 : 编辑 /.bashrc,在最后一行添加环境变量(此方式需要先把该终端关闭,然后再启才会生效)

image.png

image.png

接下来给大家演示

image.png

cd /表示切换到根目录,然后执行hello程序,mcp是携带的参数,执行有结果,这里就是当我们执行hello命令,然后系统就会去PATH环境变量里面寻找哪里有hello这个应用程序,最后在/home/mcp里面找到了,就会最终执行

二. 文件常用命令

对于文件我们常用的无非就是增删改查

1.增

mkdir

命令 : mkdir

英文来源 : make directory

功能 : 创建目录

命令格式 : mkdir -p 目录

讲解 : p(parent) 意思是可以创建子目录

示例 :

image.png

image.png

这里dir1下面还有dir2文件夹

2.删

rm

命令 : rm

英文来源 : remove

功能 : 删除文件或文件夹

命令格式 : rm -r -f 文件/文件夹

讲解 : r(recursive)递归地,简单理解删除所下面的所有文件;f(force) 强制删除

3.改

cp

命令 : cp

英文来源 : copy

功能 : 复制文件

命令格式 : cp -r -f -d 源文件 目标文件

讲解 : r(recursive)递归,简单理解就是复制所有文件,子文件也是复制过去;f(force)强制复制;d如果源文件是链接文件,只复制链接文件不复制实际文件(这个了解一下就好)

4.查

ls

命令 : ls

英文来源 : list

功能 : 列出目录内容

命令格式 : ls -l -h -a 目录

讲解 : l(long)简单理解会展示更多信息 h(human readable)方便我们阅读 a(all)展示所有的文件

cat

命令 : cat

英文来源 : /

功能 : 展示文件内容

命令格式 cat 文件

三 文件权限

一个文件有三种权限,w(write)写的权限,r(read)读的权限,x(exe)执行的权限。还需要补充的就是一个文件权限分几类,持有者对文件的权限,同组对文件的权限,其他用户对文件的权限

image.png

大家可以看到,hello有三组rwx,有中间没有代表没有该权限,第一组就是文件持有者,第二组就是同组,第三组就是其他用户。接下来教大家修改文件权限

1.使用数字修改文件权限

rwx用八进制表示,1就是有,0就是没有,示例 111就是是三个权限都有,101就是有读和执行的权限,换成十进制,r就是4,w就是2,x就是1

命令 chmod 数字 文件

chmod : change mode

image.png

大家可以看到,我使用了chmod 777 hello这个命令,第一个7是把文件持有者,第二个就是同组,第三个是其他用户,7是怎么来的呢?上文说的r就是4,w就是2,x就是1,三者加起来就是7,如果是6就是4+2说明没有执行权限

递归修改权限 : chmod -R 数字 文件

2. 使用符号类型修改文件权限

命令 : chmod u=,g=,o= 文件

image.png

这里我相信大家看这个通俗易懂吧。需要说明一下的是,u代表user文件持有者,g代表group同组的,o代表other其他的

3. 修改文件所属用户组

命令 : chgrp -R 文件

chgrp : change group

我相信大家应该可以看到这个命令了,-R递归修改

示例 : chgrp hu install.log 将install.log文件的用户组改为hy用户组

4. 修改文件持有者

命令 : chown -R 账号名 文件

chown : change owner

四 其他常用shell命令

find命令

命令 : find 目录名 选项 查找条件

讲解 : 如果不写目录名就会在当前文件查找,选项我们一般选择-name,也就是查找名字

示例 : find /home/mcp -name "test1.txt"

find /home/mcp -name "test1.txt" 这里的星号(*)是通配符的意思,学过正则的都应该了解

grep命令

grep 选项 查找模式 文件名

示例 : grep -rwn "abc" *

r(递归) n(行号) w(显示) 在当前目录查找abc字符串,如果查找出来了就显示行号,w表示必须是abc三个整的,比如abce,abc134等等之类都不可以

tar命令

压缩命令 : tar c(jz)f 文件名.tar.(gz,bz) 文件

c(create) : 用来创建生成的文件包

jz : j表示使用bzip2来压缩,z表示用gipz来压缩,这是两种不同的压缩方式而已,知道就好

f(file) : 表示文件

如果前面使用gzip压缩,后面文件后缀使用tar.gz;如果使用bzip2压缩,后续文件后缀使用bz

解压命令 : tar x(jz)f 文件名.tar.(gz,bz) -C 路径

x : 表示解压,其他的和上述一样,-C路径是指可以将文件解压到具体的地方去

查看压缩文件信息 : tar tvf 文件名

t : 表示查看压缩文件

v(verbose) : 查看压缩信息

五 vi的使用

vi有三种模式,普通模式,命令模式,插入模式

普通模式: 一开始进入就是普通模式,给我们来阅读的

命令模式: 冒号(:)进入命令模式

插入模式: i(insert)进入插入模式

命令模式下常用命令

set number : 显示行数

set nonumber : 不显示行数

w : 存盘

q : 退出

wq : 存盘退出

q! : 强制退出

n : 跳转到n行

%s/p1/p2/g : 将文件中所有的p1都用p2来替代,s(substitude)

一般模式下常用命令

o : 在光标下新增一行

dd : 删除光标所在行

ndd : 删除n行(光标所在行及其下面的n-1行)

D : 删除光标之后的内容

dw(delete word) : 删除光标后面整个单词

yy(yank) : 复制光标所在行

nyy : 复制n行(光标所在行及其下面的n-1行)

p(paste) : 粘贴内容

u : 撤销,类似于windows里面的ctrl+z