【OK210试用体验】【第四篇】嵌入式Linux开发学习笔记-----第2课 Linux下基本编程 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】【第四篇】嵌入式Linux开发学习笔记-----第2课 Linux下基本编程

Murphy ( 楼主 ) 2015-8-25 19:51:25  只看该作者 倒序浏览
本帖最后由 elecfans跑堂 于 2015-8-26 20:15 编辑

【嵌入式Linux开发学习笔记】
第2课 Linux下基本编程
1、            文本编辑器 VIMEmacs的安装及两者的区别
1.1、简介及区别
Vim是一个类似于Vi文本编辑器,不过在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在20002Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, VimEmacs同样都是非常优秀的文本编辑器。
Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中,在基于编辑器的功能基础上,Emacs自行开发了一个“bourne-shell-like”shell: EShellEmacs还可以:收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、查看日历、文件比较、浏览网站、调试程序,结合GDBEDebug等,支持C/C++PerlPythonLisp等等
个人感觉,Emacs就如同里一个操作系统,其支持几乎操作系统能完成的所有事务,其文本处理功能更强,可以直接打开PDF文档,相当的专业。建议刚入门的童鞋还是先入手vim吧,操作简单。
1.2、安装
想必各位都已经知道该怎么在Linux下在线安装软件了吧。sudo apt-get install ***详细操作请百度,已经很多详细教程了。
2、            Vim的基本操作
在vim中有两种输入模式:命令模式和文本输入模式。
打开vim的时候默认为命令模式,在命令模式下,输入i转到“插入模式”,即文本输入模式。
在文本输入模式下,可以像window下的记事本一样输入,使用TAB,使用回车。
文本输入结束后,按键盘“ESC”键,返回命令模式。然后输入“:w [文件名称]”,如“:w test1”。即会将该输入
的文本保存在本目录下,命令是以“:”开始的,相当于是命令的标识,代表冒号后的内容为命令。

在命令模式下,通过“h”“l”可以在文本中左右移动光标,“j”“k”上下移动光标。输入“o”则会在光标所在
的这一行下面插入空行,并进入“插入模式”,“O”则会在当前行的上面插入新行。
在命令模式下,输入“a”,则在光标后插入文本,输入“A”则会在本行行末插入文本

2.1、“shift+4”“shift+6”移动到行末行首。“G”移动到当前文件的最后一行。
“ctl+f”“ctl+b”翻页功能。
2.2、vim的搜索功能。命令模式输入:“/hello”回车。按N键继续查找。区分大小写
         “:setignorecase”可以让其忽略大小写搜索。“set noignorecase”恢复大小写区分
2.3、文本的替换:
         命令模式,输入冒号进入命令行。输入“:1,4s/hello/HELLO/”,含义:1,4表示第一行到第四行,s表示搜索替换功能,
         第一个斜杠下的内容为要搜索的内容,第二个为替换的内容。
2.4、vim的删除文本功能:
         2.4.1使用“x”删除当前光标处的内容。
         2.4.2使用组合键:“dw”删除光标所在位置的一个单词,所谓的单词是以标点符号和空格来区分的,空格标点符号之间的为一个单词。
         2.4.3“d”就是删除的意思,但是其不能单独使用。“d+w”为删除光标位置的一个单词。
         2.4.4“d+$”表示删除光标所在位置到行末所有的内容。
         /*在editplus软件里通过ctl+d快捷键插入日期。*/
         2.4.5同理,使用“d+^”就可以删除光标所在位置前到行首的所有内容。
         2.4.6删除一行:“dd”。删除光标所在行。
         2.4.7数字指定命令执行的次数。“3dd”:表示删除当前光标所在位置及以下的三行内容。
         2.4.8“3j”表示下移三行
         2.4.9错误操作的恢复“u”,误删之后输入“u”即可恢复刚刚删除的内容。
         2.4.10“ctl+g”:显示光标所在行号,显示在vim的底部。
         2.4.11“可视块”操作。“ctl+v”和“v”键进入可视块操作状态。然后通过“j”“k”“l”“h”来选择一块区域。然后就可以进行其他块操作,如删除(x)、复制。
                   “ctl+v”是横扫选中。“v”为选中一行,然后通过“j”“k”纵扫选中块区。
2.5、vim与shell的交互。
         2.5.1、vim中使用shell命令。
                   “:r !ls”  解释:r为插入,要在vim中使用shell外部命令,就要用“!”。“ls”为在shell中执行ls命令。总的指令意思为:将ls命令的结果插入vim的光标位置。
2.6、vim中显示行号:命令模式“:setnu”,取消显示“:set nonu”
2.7、vim中对文本进行插入标号;“:r!nl %”,r:插入!:表示执行外部命令,nl:表示对文本进行编号,%表示对当前文本进行操作。
2.8、vim中复制和粘贴。
         8.1、复制:“y”。粘贴:“p”。首先用可视块选中文本内容,然后按“y”复制,按“p”粘贴。
2.9、vim中获得帮助。命令模式:“:help[命令]”

3、            vim的常用快捷键
yy复制光标所在行
[N]yy复制当前行及其后的N行
p粘贴到光标位置

dd删除当前行
[N]dd 删除当期行及其后N行

/name 查找光标之后名为name的字符串

G光标移动到文件尾部

u  撤销上次的操作。

:wq保存并推出
:q!  不保存,强行推出
:w [文件名]   保存为[文件名]文件
:set nu 当前文本显示行号
:set nonu 取消显示行号
4、            emacs的基本操作
4.1、sudo apt-getamacs-snapshot获得安装。
4.2、安装完之后在可以在命令行输入emacs打开
4.3、emacs tutorial是emacs的一个中文帮助文档,通过这个文档学习emacs
4.4、emacs功能非常强大,如同一个操作系统实现,可以打开PDF文档。使用了大量的快捷键操作。
4.5、基本操作
ctl+v向下翻页,alt+v向上翻页,ctl+l将光标所在的位置置于屏幕中央显示。
                   C-v     向前移动一屏
       M-v     向后移动一屏
       C-l     重绘屏幕,并将光标所在行置于屏幕的中央
                (注意是 CONTROL-L,不是 CONTROL-1)
                   C-f     向右移动一个字符
       C-b     向左移动一个字符

       M-f     向右移动一个词【对中文是移动到下一个标点符号】
       M-b     向左移动一个词【对中文是移动到上一个标点符号】

       C-n     移动到下一行
       C-p     移动到上一行

       C-a     移动到行首
       C-e     移动到行尾

       M-a     移动到句首
       M-e     移动到句
5、            Linux基本命令
df      查看磁盘使用情况
df -k以KB为单位显示磁盘的使用情况


du [选项] 目录   查看目录大小
du -b ipc以字节为单位显示ipc这个目录的大小

ifconfig [选项] [网络IP]查看修改IP地址
ifconfig查看
ifconfig eth0 192.168.0.122修改IP
ifconfig eth0 down关闭网卡0
ifconfig eth0 up启动

netstat -a查看系统中所有的网络监听端口。

rpm软件安装
rpm -ivh tftp.rpm安装名字为tftp的文件
rpm -qa列出所有已安装的rpm包
rpm -e name卸载名字为name的rpm包

mount挂载命令
mount /dev/cdrom /mnt将光驱挂载到/mnt目录下
umount /mnt取消光驱在/mnt下的挂载

find查找文件
find ./ -name co*在当期目录及其子目录中查找名为co开头的所有文件
find ./ -name test查找名为test的所有文件

grep查找字符串
grep "file" ./ -rn在当前目录及其子目录下查找包含file字符串的文件
netstat -a | grep tftp查看所有端口中用于tftp的端口


top命令。查看所有进程CPU内存的占用信息。

ps [选项]
ps aux 查看系统中的所有进程
kill [选项] 进程号
kill -s SIGKILL 4096杀死4096号进程

man帮助命令
man grep查看grep命令的使用方法

6、            Shell的基本操作
6.1、shell编程
         6.1.1、正则表达式
                   在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
         在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。
         许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。
         正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
                   例:egrep"^a.*t$" words|wc-w   搜索words文件中以a开头,以t结尾的单词,并使用管道技术输出匹配的个数
                   其中^a表示以a开头,t$表示以t结尾,.表示一个任意字符,.*表示任意多个字符
         egrep命令是一个搜索文件获得模式,使用该命令可以任意搜索文件中的字符串和符号,也可以为你搜索一个多个文件的字符串
         grep默认不支持正则表达式,egrep默认支持正则表达式,egrep等于 grep -E 命令

         6.1.2、shell脚本
                   linuxshell脚本文件的后缀名为.sh
                   新建一个helloworld.sh
                   打开该文件之后再其第一行输入:#!/bin/bash(一般以#开头的为注释行,但shell脚本中以#!开头的为魔术行,该行指定了执行该shell脚本文件的程序,因为系统中可能存在不同的脚本解释程序,所以尽量显示指定要运行的脚本解释程序的名字,这里为bash,其他以#开头的为注释行)
                   另外,要使该脚本文件得到执行,需要给该文件赋予一个可运行的权限,输入命令:chmod u+x helloworld.sh
                   然后可执行该脚本文件:./helloworld.sh使用./是显示指定在当前目录下寻找helloworld.sh文件,因为linux默认不是在当前目录查找文件。

                   变量的定义
                   在shell编程中变量没有类型,你赋予它什么类型,其就是什么类型。例,在vim中输入:
                           
                            #!/bin/bash

                            log="monday"

                            echo"the value of logfile is"
                            echo"logout is ${log} out"                #通过{log}实现log变量的输出
                            echo$log
                            echo$              #输出$

                   在程序中引用变量的时候需要使用$来引用,shell将$后的字符串当作变量替换。要输出$则需要转义字符。


                   引号使用规则:
                            双引号"",单引号'',倒引号``(esc键下方的引号)
                   示例:aaa.sh
                   #!/bin/bash
                   log=monday
                   echo"today is $log"
                   echo'today is $log'
                   echo"today is `date`"

                   ./aaa.sh执行输出

         shell中的执行命令和控制语句:
                   一般shell脚本中的命令是按顺序执行的,有时需要根据特殊情况需要循环执行或条件执行。
                   1、if判断语句
                   2、case语句
                   3、循环语句
                            wile语句
                           
6.2、shell命令
         6.2.1、cut -c 3-6hello.c提取hello.c中每行的3-6个字符。
         6.2.2、cut -f1biao.c提取biao.c中的第一列,列之间为tab空格。
         6.2.3、sort命令,对文本文件进行排序。默认对文件的第一列进行排序,sort biao.c则按第一列升序排列
                            sort-r biao.c降序排列。指定列排序:sort -k 2 biao.c对第二列进行排序
         6.2.4、sort排序之后可以使用uniq命令删除重复的行。可以使用管道技术:sort biao.c|uniq
         6.2.5、字符替换指令tr。对中文无效。使用重定向指定输入。
                   例:tr  "hello" "HELLO"                    可以使用tr对文本内容进行删除。tr--delete "he"          6.2.6、wc命令。用来统计文件的字节单词数量
                   wchello.c 得到6 12 79 hello.c说明:6表示行,12单词,79字节数文件名
                   wc-c hello.c 只显示字节数wc -l hello.c 显示行数 wc -w hello.c显示单词数。
         6.2.7、substr命令,从指定字符串提取指定长度的子字符串。
                   substr不能直接在shell中使用,要加上前导expr即expr substr"hello world" 1 5从hello world中的第一个字符开始提取5个字符。
         6.2.8、seq命令。用来产生一个整数数列。seq -1 3产生-1到3的整数数列
                   seq9 -3 0产生9-0中步长为-3的整数数列。
         6.2.9、环境变量。和当前shell相关的变量。
                   printenv查看当前系统已经定义的系统变量。
         6.3.0、别名的定义。
                   aliasll='ls -l'其中ls -l是列表查看当前目录下的所有文件的详细信息。通过alias定义别名后可以通过ll来使用。但是这种重命名只在当前终端环境中有效,在另一个终端中无效,再次启动终端也无效。
                   要想每次使用,则需要修改bash的配置文件。
                   在主目录下,有隐藏文件.bashrc打开后在#aliasdefinitions后边是定义别名的位置。在这里定义可以永久生效使用。
                  
7、            shell中引号的使用规则
shell中引号的使用方法
shell使用引号(单引号/双引号)和反斜线("")用于向shell解释器屏蔽一些特殊字符反引号(````)shell则有特殊意义
如:
abc="how are you" (bash/pdksh)
set abc = "how are you" (tcsh)
这个命令行把三个单词组成的字符串how are you作为一个整体赋值给变量abc.
abc1='@LOGNAME,how are you!' (bash/pdksh)
set abc1='$LOGNAME,how are you!' (tcsh)
abc2="$LOGNAME,how are you!" (bash/pdksh)
set abc2="$LOGNAME,how are you!" (tcsh)

LOGNAME变量是保存当前用户名的shell变量,假设他的当前值是:wang.执行完两条命令后,abc1的内容是:$LOGNAME,how are you! 而abc2的内容是: wang, how are you!

象单引号一样,反斜线也能屏蔽所有特殊字符.但是他一次只能屏蔽一个字符.而不能屏蔽
一组字符.

反引号的功能不同于以上的三种符号.他不具有屏蔽特殊字符的功能.但是可以通过他将
一个命令的运行结果传递给另外一个命令.

如:
contents=`ls` (bash/pdksh)
set contents = `ls` (tcsh)
shell中引号分为三种:单引号,双引号和反引号。
(1)单引号
由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:
[liu@mail shell]$ st='$PATH'
[liu@mail shell]$ echo $st
$PATH
可见$保持了其本身的含义,作为普通字符出现。
(2)双引号
由双引号括起来的字符,除$、和这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量的 值来代替这个变量和$;对于而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在 前面加上的只有四个字符$本身。而对号,若其前面没有加,则Shell会将它同前一个号匹配。
[liu@mail shell]$ st="$PATH"
[liu@mail shell]$ echo $st
/usr/local/***in:/usr/local/bin:/***in:/bin:/usr/***in:/usr/bin:/usr/X11R6/bin:/root/bin
(3)反引号 `
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号()混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:
[liu@mail shell]$ ls
test1.sh test2.sh

[liu@mail shell]$ st="There are followfiles in this folder: `ls`"

[liu@mail shell]$ echo $st

There are follow files in this folder: test1.shtest2.sh


8、            Root管理员的切换
从普通用户切换到root用户,输入命令“sudo su”即可。从root切换到普通用户,输入“exit”或“su [用户名]”,如“su zjt”
或者“CTL+D”组合键。

处于安全的考虑,ubuntu的root用户没有固定的密码,密码随机的。
默认root用户是无固定密码的,并且是被锁定的,如果想给root设置一个密码

只需执行命令:sudo passwd root 然后根据提示一步一步来

这样皆可以 su root ,输入root密码切换到root用户

注意:给root设定密码后,仍可以 sudo su 切换到root用户

禁用和启用root登录:
执行 sudo passwd -l root 即可(只是禁用root,但是root密码还保存着),再执行su root发现认证失败,
要再次启动root登录,执行 sudo passwd -u root 即可

7个回复

lxlskj 发表于 2015-9-20 10:18:42
胜,不妄喜;败,不惶馁;胸有激雷而面如平湖者可拜上将军。
你有一个苹果,我有一个苹果,你我交换之后还是一个苹果。
你有一个思想,我有一个思想,你我交换之后却是二个思想。
Murphy 发表于 2015-9-20 19:12:47
lxlskj 发表于 2015-9-20 10:18
胜,不妄喜;败,不惶馁;胸有激雷而面如平湖者可拜上将军。
你有一个苹果,我有一个苹果,你我交换之后还是一个苹果。
你有一个思想,我有一个思想,你我交换之后却是二个思想。

互相学习哈
嘟嘟 发表于 2015-9-25 20:12:00
点赞,学习楼主的帖子来了,感谢分享
黄智林 发表于 2015-10-15 09:49:37
顶。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复 1

举报 使用道具

brave8 发表于 2015-10-15 10:55:16
这个资料对于我们初学者来说真的是太好了,赞一个!!!
Murphy 发表于 2015-11-1 08:35:41
brave8 发表于 2015-10-15 10:55
这个资料对于我们初学者来说真的是太好了,赞一个!!!

抱歉,这段时间比较忙,有段时间没更新了
Murphy 发表于 2015-11-1 08:36:07
ICHLIEBEDICH13 发表于 2015-11-1 08:35
抱歉,这段时间比较忙,有段时间没更新了

一起交流学习啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-18 15:09 , Processed in 0.781149 second(s), Total 72, Slave 52 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表