Linux应用技巧之操作命令记录

嵌入式技术

1372人已加入

描述

1. 前言

大学毕业快一年了,经常看别人的博客,看着别人学习都很有条理,学什么都记录下来,所以自己也打算开始写属于自己的学习记录。而且很多时候有些技巧用到的时候上网查一下,下次又忘了,所以希望能够做好整理工作。

2. grep命令

刚刚参加工作的时候,对grep了解很少,但是工作中需要用的地方很多,所以就先来总结一下。

grep的功能有非常多,但是看代码却用不到那么多的高级功能,所以只列出对工作有帮助的几个参数,其他的以后如果需要,再继续添加

grep “字符串” *            如果要搜索的目录下没有目录的话,完全不用加参数

grep -r “字符串” *        如果有目录,-r可以递归搜索,好像-R也可以,而且man手册还区分了,可能在符号链接上有什么区别,但是没有试验过

grep -i “字符串” *        忽略字符串中的大小写

grep -n "字符串" *       列出字符串所在文件的行号,结合vim 文件 +行号 打开文件很有用

在grep实际使用中,可能还会结合转义字符\,比如带“->“的,就需要搜索时加转义”\->“不然搜不到的。反正有时候搜索带通用匹配符而又搜不到结果时,

就加个转义试试,说不定有惊喜欧

其他的参数以及结合正则表达式的方法,只是了解过,平时工作中并不常用,就不列举了。

以后需要再继续增加。

3. rpm命令

在平时工作中,rpm命令用的非常多,总结下他的基本用法

rpm -ivh + 包名   安装包,虽然-i 参数就可以了,但是还是习惯ivh,看起来舒服点吧

rpm -Uvh +包名  升级包,很多时候包已经存在了,这时需要用升级选项

--nodeps 、 --force  这两个参数平时都会用到,而且结合上面要用好,其实并不容易,刚开始工作一直不敢用这两个参数,而且就现在还经常忽略他们的使用。而且有时候是必须用的,比如用低版本的包替换高版本等等

rpm -qi +包名 可以查看rpm包的信息,工作时候有时候要修改上层的应用,但是却不知道这个上层应用属于那个src.rpm包,此时这个命令真是超级有用啊q

rpm -qf +文件 安装rpm包会在系统中产生很多文件,用这个命令可以找到这个文件属于那个rpm包。Linux上层应用很多时候有很多rpm包,你打开源码完全不知道这 个函数调用是怎么实现的。这个时候到/usr/include下grep下,找到对应的.h,之后结合rpm -qf 和rpm -qi参数,非常有效。

rpm -qa 可以查看linux系统中共安装了哪些rpm包,当然如果是某些不是rpm包维护的系统可能查不到,比如ubuntu。

rpm -qpl 可以不用安装或解压缩就可以看到一个rpm包中有哪些文件,很有用

--ignorearch 这个参数虽然不常用,但是需要的时候不知道真是要命啊。忽略平台参数安装,建议慎用。我也只是在mips64el架构的内核包拿来在mips架构上有时候用的。

rpm命令工作中差不多基本就用到这些,其他的以后需要再来补。

4. qemu命令

昨天研究了快一天的qemu虚拟机,大体上得到了下面比较靠谱的命令

1:启动一个安装镜像

qemu-img -create -f qcow2 fedora.img 10G

qemu-system-x86_64 -m 2048 -enable-kvm fedora.img -cdrom /path/yours.iso

上面的方法可以启安装光盘镜像

2:至于启一个文件系统

qemu-system-x86_64 -m 1024 -kernel /boot/vmlinuz-3.10.52-200.nk.6.zy.1.x86_64 -initrd /boot/initramfs-3.10.52-200.nk.6.zy.1.x86_64.img

这个有点反应,但是后面再加参数都没法启动显示界面

3:还有就是fedora的arm版的一个qemu,是师傅交代我要做的,当时不知从哪里弄了一个qemu中压缩出来的aarch64编译机,解压打开就是一个跟文件系统。结果用qemu-system-arm启动一直报错。

至于把华为提供给我们公司的内核和initrd更换掉,更是一点输出都没有。感觉好无奈。

最后还是他询问了相关人员,才知道

To use Fedora 23 on QEMU you will need to use a build of UEFI that is not hosted by Fedora for licensing reasons. For convenience a dnf|yum repository had been created

相关详细链接:http://fedoraproject.org/wiki/Architectures/AArch64/F23/Installation

由于这个事情暂时绕开了,目前是没时间搞了,以后有机会会验证下,毕竟让我纠结了一天。

希望以后谁再需要可以有点帮助

5. rpmbuild命令

rpmbuild命令是一个通过src.rpm反过来编译rpm包的命令。

先用rpm -ivh 命令安装src.rpm包,然后在家目录下就会有一个rpmbuild的目录

目录下面会有两个文件夹,SOURCES和SPEC

其中SPEC文件夹下面是spec文件,通过rpmbuild命令编译这个文件就可以得到想要的一些东西

rpmbuild -bp *.spec         编译后发现在rpmbuild/BUILD目录下生成了源码,其实很多时候有人会直接用rpm2cpio命令

解压缩得到里面的源码tar包或者到SOURCES下面得到源码tar包。这种做法会有隐患的,因为可能有些patch是通过rpmbuild

编译的过程中打进去的,可能会产生不利的影响

rpmbuild -ba *.spec     编译得到rpm和src.rpm包,如果成功,会在rpmbuild/RPM和rpmbuild/SRPM下面生成rpm包和src.rpm包

rpmbuild -bb *.spec     只编译RPM包,不编译SRPM包

rpmbuild -bs *.spec      只编译出SRPM包,有时候changelog忘改了或者修改了一些和代码无关的地方,可以只生成SRPM包,节省时间。

其中有两个参数。

--nodeps 忽略依赖,有时候我们只想得到源码,可以考虑在缺依赖的时候使用这个参数

--target 这个参数真是要命啊,用交叉编译其他平台的包时,这个参数没加的情况下解报错真是泪流满面啊。我之前弄了一周实在搞不

定了,然后我师傅告诉了我这个参数,当时真是要疯了啊。。。

其他的参数暂时想不起来了,不太常用吧,以后有需要再补充

6. find命令

对于find命令,很尴尬的是我基本用的只有一条,那就是

find . | grep "文件名"

额,虽然粗暴,但是真是基本解决了找文件的需求。如果以后碰到高级点的,再补充

7.vim

对于vim,里面的技巧真是太多了,我只是学会了其中一些,应付工作暂时是够了

esc键     没事的时候多按几下,让文件处于一般模式,这个模式可以用hjkl来进行上下左右移动

i和a键   一个是在当前光标前插入一个是在当前光标后插入,按了以后就可以从一般模式进入插入模式,进行文本编辑了

x     删除一个字符---》一般模式下啊

r     替换一个字符---》一般模式下啊

dd  删除一行,其实说是剪切更恰当,因为按p又可以粘贴出来了

yy  复制一行

p   粘贴“剪贴板“里的内容

u 是撤销命令

home 和end 快速到一行的行头和行尾 其实shift+“$“也可以快速到行尾,好像好像有个组合键快速到行头,但是忘了

shift+"*"或shift+"#"  在当前单词上按上面两个组合,可以向下或向上搜索单词。然后按n或N上下找

/         在一般模式下按"/"然后输入要搜索的单词或字符串,也可以定位,然后按n或N上下找。这个方法的优势在于可以搜索带空格的字符串,很实用

v        按v进入可视模式,上下移动可以选中整行,一般用来大面积的删除(d)或复制(y)。

ctrl+v  块选中,可以结合上面的删除,复制等命令。另外有时候我们写代码的时候需要连续注释多行,块选中每行代码的最前面部分,然后按大写的"I",之后就进入了插入模式。输入注释符号"//"或“#”,然后按加下esc键就可以注释多行啦,很实用。如果要删除这些注释,块选中后点击“d“就可以了。

还有就是vim的跳转问题,用ctags命令生成tags文件,然后修改配置项~/.vimrc。如果以前没有也没关系,直接新建一个就好了。然后在最下面写上

set tags=/路径/tags

一定要注意这个只在当前用户下有效,可能切换到root或者其他用户,就会失效。他生效的原理很重要,因为有时候可能你在其他用户下编辑,其他用户也配置了ctags。然后跳转的地方可能就不是你想要的地方,这会造成很大的困扰。以前我在root用户和user下都配置了内核源码,关键是路径不一样,然后改来改去发现一团遭,所以一定要去了解配置文件才是跳转的关键。

vim用法很多,一时也想不出其他常用的方法了,暂时先写到这里。

8 yum

yum库有些系统可能用不到,对于创建本地仓库那一块我以后用到再写,暂时记不清楚了

由于公司的系统有自己的Yum源,所以装系统以后就需要自己配置一下。

在/etc/yum.repo/yous.repo中写入yum库,配置好了后就可以用Yum来装软件包了,非常方便

yum install +包名 可以自动检索依赖,作为有时候需要手动去网上解依赖的人来说,yum真是很方便。特别是编包的时候发现yum里都有,真是幸福啊

这里贴一个rpm下载网址,http://rpm.pbone.net/

基本少的rpm包我会现在这里找,输入栏右边有一个高级选项,可以选择包的来源哪个系统。

输入栏下面有分类,有时候可能编译应用或安装驱动的时候,发现少的是动态库,或者就是你就是想看看我这个头文件哪个rpm包里有,就可以勾选第一个选项。如果只是找rpm包,就选第三个。另外两个没试过。

9 ssh scp

ssh 远处登陆一个主机,比如ssh test@10.3.3.66。然后输入密码就可以登陆别人的电脑了。有时候报一个错,好像和安全有关,需要删掉一个配置文件,具体忘了。

scp 拷贝远处主机的东西到本地或拷贝本地的东西到远处主机。非常使用,而且速度快。

scp yous.txt test@10.3.3.66:/home/test 

scp test@10.3.3.66:/home/test/test .

加上-R参数可以拷贝目录

上面具体意思不知道可以去百度,我写也没法太详细。

10 手动改内核

有时候内核作了修改后,就会手动换一些内核。一般情况下,操作系统的引导文件在sda1分区的/boot下面。把要换的内核放到这个目录下,然后修改grub.cfg或boot.cfg。反正复制一下那些大括号里面的东西,然后改下名字。如果想启动时进入字符界面,就在后面加个3,但是要

删掉一些参数,比如rhgb,其实内核参数基本可以删掉,不确定就多删掉点。

如果系统坏了或者其他什么原因,没法进系统了,但是又不甘心。可以试试在手动启动内核。我目前熟悉的有pmon和grub引导。顺便谴责下pmon,经常

出一些我无法理解的事情,比如同样是我做的系统盘,我的u盘无法识别,我师傅的却可以。以及有些机器没法显示引导界面啊,真是不喜欢。

手动引导命令分为grub和pmon

grub 举一个启动本地磁盘的例子

linux (hd0,msdos1)/boot/vmlinux

boot

hd0和msdos1表示第一块硬盘和第几分区

ls可以查看分区

pmon 举一个usb的例子。pmon下devls命令可以查看当前的设备,然后@后面的设备就是这么来的,0是第一个。再有(好像)是按照abcd排的。比如0a什么的,可能不对,毕竟块2个月没弄了。

load /dev/fs/ext2@usb0/boot/vmlinux-uni

initrd /dev/fs/exit2@usb0/boot/initrd.gz

g console=tty

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分