文章目录
0. 学习路线
- 嵌入式Linux系统就是一套完整的PC系统。
- 对于新手入门来说,需要动u-boot的可能性不大,投入过多精力得不偿失。
- 对内核本身的操作,如裁剪、移植,一般是芯片厂商做的事情,也不应该过多牵扯精力。
- 因此总的原则是:
先粗浅入门,再专题学习
。
具体而言:
- 入门:应用程序开发–>驱动程序基础–>项目
- 进阶:u-boot or 内核 or 驱动进阶
1. Linux入门概念
1.1 Linux 与 Windows 的区别
两者最大区别在于目录,Linux视万物皆为目录(文件)
- Windows 是盘符对应磁盘分区。
- Linux 是目录挂载在磁盘的不同分区上。
- Windows的路径分隔符是
\
; Linux的路径分隔符是/
。 - /dev/sda1 : dev指设备,sd表示磁盘,a表示第一个磁盘,1表示该磁盘上的第一个分区。
1.2 shell是什么
- shell是一个应用程序,它可以从键盘、串口接受指令,回车后执行指令。
- 接受键盘传入的字符并回显,回车是通知shell输入结束了;
- 解析输入的字符串,寻找程序,通常 shell 是去PATH环境变量所指的位置寻找程序/指令。也可以直接给 shell 指定路径。
- 找到程序,启动程序,传入参数。
- 举个例子:
- 先创建一个 hello.c 文件
# include <stdio.h>
int main(int argc, char **argv)
{
if (argc >= 2)
printf("Hello, %s!\n", argv[1]);
else
printf("Hello, world!\n");
return 0;
}
- 然后,在其所在路径下执行以下指令对其进行编译。
gcc -o hello hello.c # 第一个hello是给可执行文件指定的名称
- 显然,编译后直接对 hello 进行运行是行不通的。
- 因为 shell 会去 PATH 所指路径下去寻找 hello 程序,这肯定找不到。
- 因此应该为 hello 指定存储路径,绝对路径或相对路径都可以。
- 也可以把可执行文件 hello 直接移动到 PATH 下的某个路径内。
hello # 行不通
./hello # Hello, world!
./hello Shili_Chen # Hello, Shili_Chen!
# 在执行这条指令时,argc = 2, argv[0] = ./hello, argv[1] = Shili_Chen
# 这就是 shell 的传参方式
sudo cp hello /usr/local/bin/hello2 # 把可执行文件转移到 PATH 所指定的路径 /usr/local/bin 下,命名为hello2
hello # 这时候就好使了
- shell 甚至可以写循环,它是有自己的编程的。
1.3 PATH环境变量
1.3.1 什么是环境变量
- evn 指令可以看到各种环境变量,等号前的是变量名,等号后的是它的值。
- echo $PATH 可以显示PATH环境变量的具体值。
1.3.2 添加PATH环境变量的三种方法
- 临时添加的方法,只对当前终端有效。
export PATH=$PATH:/home/chen # 此时用户 chen 的路径就被临时存放在PATH中了
- 永久添加的方法,只对当前用户有效。
gedit ~/.bashrc # 编辑 .bashrc文件
# 在打开的文件最后加上
export PATH=$PATH:/home/chen # 重启后就生效了
- 永久添加的方法,对所有用户都有效。
sudo gedit /etc/environment # 修改/etc/environment
# 在打开的页面里找到 PATH ,在它后面添加:/home/chen
# 当然其实不一定非把用户路径添加上,只添加可执行文件所在路径也OK
1.4 Ubuntu 的文件系统组织方式简介
- 系统存放可执行程序/命令的路径
- /bin 所用用户皆可用
- /sbin 系统命令,仅管理员可用
- 无关系统启动的程序/命令的存放路径
- /usr/bin
- /usr/sbin
- 注:usr 全称unix software resource 存放非系统启动的必要资源,可分享与不可变动的数据。
- 存放库文件的路径
- /lib
- /usr/lib
- 一般启动文件、内核的保存路径
- /boot
- 设备文件,表示硬件
- /dev
- /dev/sda1 : dev指设备,sd表示磁盘,a表示第一个磁盘,1表示该磁盘上的第一个分区。
- 配置文件
- /etc
- 家目录与用户目录
- /home 家目录,它的下级目录对应不同的用户
- /home/chen 用户chen的专属目录
- 虚拟文件系统的挂载目录
- /proc
- /sys
- 注1:所谓的虚拟文件系统是指不对应真实的存储设备。
- 注2:对它们进行访问可以看到内核信息,如 /proc 里保存的是进程信息。
- 缓存文件保存路径
- /var 保存的是缓存文件,临时可变动的文件。
2. Linux的常见指令
2.1 Linux指令基本形制
- Linux的命令分为三部分:
- 命令 [选项] [参数]
- command [options] [parameters]
- ls -l /
- [] 表示选填,<>表示必填。
2.2 目录与文件操作命令
- clear 清除终端历史痕迹
- pwd指令——打印当前路径
- 家目录,即/home/chen。可以用 ~ 表示。
- 上一次的路径,可以用 - 表示。
- cd指令——路径跳转
cd - # 返回上一次的路径。
- 创建或删除目录
mkdir 目录名 # 创建目录
rmdir 目录名 # 删除目录,实际上它只能删除空目录
rm 路径名/文件名 -r # 删除文件/目录,因为用递归的方式删除,所以可以删除非空目录
- 注:rm -rf 指令是递归强制删除,这是个危险的指令,要当心。
- ls指令——列出内容
- 列出目录内容以及文件信息。
- 有多种选项可供使用:-a 列出隐藏文件;-l 列出详细信息,能看到文件权限。
ls -l tes* # tes*用于缩小展示范围,也可以指定路径
- cp指令——复制文件
cp 1.txt '2 .txt' # 如果文件中有空格,可以用单引号把它引起来。
cp 1.txt ./test # 往test里复制1.txt文件。
- mv指令——移动/改名
mv 1.txt 2.txt # 改名
mv 1.txt ../2.txt # 移动 + 改名
mv 1.txt ../ # 只移动,不改名
- cat指令——显示/拼接显示
cat 1.txt # 显示
cat 1.txt 2.txt # 显示拼接
- touch指令——触摸/创建
touch 1.txt # 有就只是触摸,改变文件的时间信息;无则创建新的文件
2.3 权限与属性
- 权限查看
- 查看文件的详细信息,在最开始可以看到如下形式的信息:
- 最前面的十个字符代表了目录/文件的权限信息。
- 第一个字符常见两种取值:d 或 - 。d 表示目录;- 表示常规文件。
- 第二到第十这九个,三个一组,分别表示拥有者、同组者、其他者的权限。
- 权限字符有四种:r、w、x、- 。分别表示,读,写,执行,无权限。
- 以图2所展示的信息为例:
- -rw-rw-r–
- 第一位的 - 表示常规文件;
- 第二到第七位的 rw-rw- 表示拥有者、同组者都有读写权限,但没有执行权限;
- 第八到第十位的 r-- 表示其他用户对该文件只有读取的权限。
- chmod指令——权限修改
- 用421编码 :rwx 就是二进制的111,即十进制的7。
chmod 675 1.txt # 即把1.txt的权限设置为 rw-rwxr-x
- 用加减符
chmod -x 1.txt # 给所有用户都减去执行权限
chmod a+x 1.txt # 给所有用户都加上执行权限
chmod u-r 1.txt # 给拥有者减去读权限
chmod g+w 1.txt # 给同组者加上写权限
chmod go-x 1.txt # 给同组者和其他人减去执行权限
- 对目录递归修改权限
chmod -R 776 目录名
- chown指令——修改文件拥有者
chown root:root 1.txt # 把拥有者调整成了root组的root用户了,用户:组
2.4 查找与搜索
- find命令——根据名字查找文件地址
- find 路径 选项 查找条件
find /home/chen/桌面/ -name 1.txt # 查找名为1.txt的文件
find /home/chen/桌面/ -name *2.txt # 查找名字以2.txt结尾的文件,*是通配符
- 注:路径用于缩小搜索范围,不指定路径就在当前路径下递归寻找。
- grep命令——根据内容搜索文件
- grep [选项] [查找模式] [文件名]
grep "abc" * -nwr # 在当前路径下找所有带"abc"的文件,n列出所在行,w整词查找,r递归查找
2.5 压缩与解压缩
- tar——压缩与解压缩
- tar的常用选项:
- c :创建压缩;
- x :提取压缩;
- t :查看压缩;
- z :用于对gzip方式的处理,与c配合即压缩,与x配合即解压;
- j :用于对bzip2方式的处理;
- v :报告tar处理的信息;
- f : 表示文件,后接文件名;
- C<指定目录> :解压到指定目录。
tar czf test.tar.gz test # 把文件(夹)test压缩成test.tar.gz文件
tar xjf test.bar.bz2 # 把test.tar.gz解压到当前路径下
tar xzf test.tar.gz -C 路径 # 把test.tar.gz解压到指定路径下
2.6 网络命令
- ifconfig命令——网络命令
ifconfig
- ping命令——可以观察能否上网
ping 网址
- 注:一般虚拟机,有NAT网卡,Windows能上网,Ubuntu也能上网。