目录
两个半天一刷Ubuntu入门指令
一. Ubuntu初次体验
二. 设备驱动
三. Ubuntu用户组及其权限分配
四. 压缩解压
五. Linux连接文件
六. vim编辑器
七. Linux下C编程
八. gcc和make及其Makefile的引入
九. Shell脚本:
两个半天一刷Ubuntu入门指令
对于拥有图像化界面的Linux系统可以比较好的从Windows系统习惯过来。如果实在是无法安装桌面的系统版本就只能心中想象吧。
外部设备的挂载和取消挂载,例如U盘的挂载。可以通过原始的命令行进行扇区分配,相比于Windows的借助于软件进行格式化显得更加麻烦,但是能够更加深刻的认识到内存磁盘的分配,有利于建立后续上升到Linux开发板上进行硬件开发。
这是windows上从来没有过的体验,很像手机安装app后的权限管理(个人理解,可能会有错误)
Ubuntu的压缩和解压很强大,gzip和bzip2还有tar真的很强大,能够使用的格式超级多,是普通解压软件无法媲美的。
文件系统结构跟widows几乎是不一样的得重新熟悉,到时候用着用着就能记住了,熟能生巧。
Linux有两种连接文件:符号连接(软连接)和硬链接,
符号链接类似Windows下的快捷方式。
硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。(都删了这个文件才会被删除)
硬连接感觉像是给一个文件进行多个命名,就好比人一样每个人都有自己的名字还有化名和绰号啥都,其实本质都是一个人。硬连接得把所有连接删除完才算是真的删除干净。
inode:记录文件属性,一个文件一个inode。inode相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。
对于刚开始使用的人会感觉很反人类(现在的我就觉得用的挺不习惯的),如果是一点都不知道vim或者vi的使用的人,可能连如何进行文本的添加和修改都不能做到,因为vim有四种模式分别是:命令模式,可视化模式,编辑模式,末行模式。要想进行操作就得进入相应的模式,每个模式都是有快捷键的(由于这是我一刷Ubuntu入门指令所以也不能特别详细的说明很多快捷键)。基础的快捷键就是:
在命令模式下i或者a进入编辑模式,i是出现在光标的左边开始编辑,a是出现在光标的右边开始编辑。
在命令模式下dd,就是删除光标所在的一行,一行一行删除太慢了就“number”dd,number就是想要删除的行数这样就是删除光标及其后面的number-1行,如果不足number行就把后面全部删除完毕。
最重要的就是保存所写文件,按Esc推出编辑模式进入命令模式:w就是保存但是不退出,:wq就是保存并且退出。:q!强制退出不保存。
以上都是常用的快捷键,还有特别多快捷键都还没有介绍,其他的快捷键就自行上网搜索吧,太多了。
!!!注意:对于vim或者vi编辑器,作为小白的我建议能用则用吧,但是在不熟悉的时候该怂还得怂,比如学过单片机的同学都知道模块化编程,这样会有很多的文件.c和.h,这个时候如果要用vi来写的话,不报错就没事,如果报错就G,因为你每个终端只能打开一个vim或者vi编辑器。所以很是麻烦,如果有条件还是用gedit吧,应为可以同时存在多个文本,更加适合写中小型的脚本demo。(当然大佬随意,这是作为一个从MCU转换到Linux进行代码编写的一种习惯过度的建议吧!当然很有可能是我对vim或者vi的使用不正确导致的吧,毕竟是一刷,希望每一次的总结会更加倾向于vim或者vi吧。)
到了最重头戏的地方了,既然讲完了编辑器那么就得开始写代码了。在Linux下进行C的编程。个人总结完全就是用着C语言的代码但是得遵循python的代码书写格式,这对于没有接触过python的人来说就是噩梦。如果是两种都没有接触过的那就没有影响了,这样反而能规范自己的代码书写。
当然书写规范不是最头疼的!!!注意!!!空格非常重要 空格非常重要 空格非常重要!!!
应为在vim或vi编辑器下书写代码的时候经常会发先我明明代码和书上一样为什么就是报错或者运行不对呢。这时候就要想到空格上了。很多命令之间是需要空格的,如果你以为就是空格就完事的话就说明你还是太年轻了。因为同一个命令在不同的地方可能就有不同的要求,就比如说“=”,有的时候需要在两边加上空格,有的时候不能加上空格,就很玄学。由于是一刷我把我说知道的一些坑先填上:
1.定义变量时, =号的两边不可以留空格.
eg:
gender=femal————right
gender =femal———–wrong
gender= femal———–wrong
2.条件测试语句 [ 符号的两边都要留空格.
eg:
if [ $gender = femal ]; then——-right.
echo “you are femal”;
fi
if[ $gender...-----------------------wrong
if [$gender...----------------------wrong.
- 条件测试的内容,如果是字符串比较的话, 比较符号两边要留空格!
eg:
if [ $gender = femal ]; then——-right.
if [ $gender= femal ]; then——–wrong.
if [ $gender=femal ]; then———wrong.
- 如果if 和 then写在同一行, 那么,注意, then的前面要跟上 ; 号.如果 then 换行写, 那么也没问题.
eg:
if [ $gender = femal ]; then——-right.
if [ $gender = femal ]
then——————————-right.
if [ $gender = femal ] then——-wrong. then前面少了 ; 号.
提示出错信息:
syntax error near unexpected token then
同理,还有很多出错信息 比如
syntax error near unexpected token fi 等都是这样引起的.
- if 后面一定要跟上 then. 同理
elif 后面一定要跟上 then.
不然提示出错信息:
syntax error near unexpected token else
- if 语句后面需要跟着then,同时前面要有分号;
2) 空格非常重要,shell 会认为空格前的为一个命令,如果a=3 认为是赋值操作,如果写成a = 3,那么就会认为a为一个命令 this=`ls -l |grep ‘^-’ | wc -l `
3) 操作符之间要用空格分开 ,如 test ! -d $1,其中的!和-d就要用空格分开
空格是命令解析中的重要分隔符
6. 命令和其后的参数或对象之间一定要有空格
if [ -x"~/Workspace/shell/a.sh" ];then
只有 -x 后有空格才表示紧跟其后的字符串是否指向一个可执行的文件名,否则就成了测试 -x"~/Workspace/shell/a.sh" 这个字符串是不是空。
- 取变量值的符号'$'和后边的变量或括号不能有空格。
千万不要小看一个空格,要是你心态不好的话可能真就是从入门到放弃了。
既然写了代码那么就得进行编译,Linux不像在Windows环境下进行开发能有集成IDE,在Linux下只能自己来编译文本。make和Makefile就体现了他的作用了。
Gcc:使用 GCC 编译器在 Linux 进行 C 语言编译,通过在终端执行 gcc 命令来完成 C 文件的编译。如果我们的工程只有一两个 C 文件还好,需要输入的命令不多,当文件有几十、上百甚至上万个的时候用终端输入 GCC 命令的方法显然是不现实的。如果我们能够编写一个文件,这个文件描述了编译哪些源码文件、如何编译那就好了,每次需要编译工程的时只需要使用这个文件就行了。
make:为此提出了一个解决大工程编译的工具:make,描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile, Makefile 就跟脚本文件一样,Makefile 里面还可以执行系统命令。使用的时候只需要一个 make命令即可完成整个工程的自动编译,极大的提高了软件开发的效率。由于Makefile很深奥具体到可以写一本书了,这书的厚度让我不敢拿来压泡面了都。所以就进行一个简单的基础入门了解。作为一个专业的程序员,是一定要懂得Makefile 的,一是因为在 Linux 下你不得不懂Makefile,再就是通过 Makefile 你就能了解整个工程的处理过程。
例子:将main.c input.c calcu.c input.h calcu.h这五个文件进行编译
main: main.o input.o calcu.o //main 依赖与.o文件
gcc -o main main.o input.o calcu.o
main.o: main.c //.o文件依赖与.c文件
gcc -c main.c
input.o: input.c
gcc -c input.c
calcu.o: calcu.c
gcc -c calcu.c
clean:
rm *.o
rm main
代码其实就是一层一层的依赖关系。但是这样依旧还是很麻烦,得需要多次重复输入文件名称,而且在vim和vi编辑器下复制粘贴效率并不高。所以我们引入变量及其模式规则这个概念,可以大大提高效率了。
#Makefile变量及其模式规则的使用
objects = main.o input.o calcu.o //定义objects这个变量=要编译的.o文件
main: $(objects) //调用这个变量,等效所有将要编译的.o文件
gcc -o main $(objects)
%.o : %.c //所有.o文件依赖所有.c文件
gcc -c $< //编译所有.c文件
clean:
rm *.o
rm main
后面还有太多的使用方法了,用的最多的就暂时是这些了(其实是由于一刷,很多都没有接触到)。
shell脚本是个纯文本文件,扩展名为.sh。命令从上而下,一行一行的开始执行。shell脚本第一行一定要为:#!/bin/bash表示使用bash。
要执行shell脚本,必须添加文件权限,添加所有权限使用命令chomd 777。
交互式shell脚本:使用read作为shell的输入。Linux read命令用于从标准输入读取数值。read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,相当于C语言里面的scanf。当然read还有很多后缀的都有自己的作用。
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志
-p 后面跟提示信息,即在输入前打印提示信息
-e 在输入的时候可以使用命令补全功能
-n 后跟一个数字,定义输入文本的长度
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了
-s 安静模式,在输入字符时不再屏幕上显示
-t 后面跟秒数,定义输入字符的等待时间
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的
还有很多类似于read的命令在这就不多阐述了,实在是太多了。例如:test命令,&&与||命令,[]判断符,shell脚本默认参数,shell脚本条件判断、函数和循环等等。
值得一提的是:
cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。
cmd1 || cmd2当cmd1执行完毕并正确,那么cmd2不执行,如果cmd1执行完毕错误,那么cmd2执行。
以上就是两个半天一刷的Ubuntu入门总结。由于项目需要只能这样赶进度了,若有需要以后还会继续回来学习的。期待N刷总结。。。。。
代码和部分讲解使用的是正点原子Ubuntu入门教程的教程。如有侵权联系删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)