技术与技巧札记

Linux常用命令及技巧:

1cat /proc/version 查看当前内核的版本

  (2)  挂载nfs文件夹:需要先确认在/etcexports文件,可以用于开发板挂载的文件夹

        mount -o nolock 10.0.22.30:/root/sharednfs /mnt

etcexports文件常见参数:

rw 可读写的权限 

ro 只读的权限

no_root_squash   NFS 客户端分享目录使用者的权限,即如果客户端使用的是 root用户,那么对于这个共享的目录而言,该客户端就具有 root的权限

sync 资料同步写入到内存与硬盘当中 

async 资料会先暂存于内存当中,而非直接写入硬盘

  (3) Vi命令行模式:set nu显示行号

                           /搜索字符串

  (4) 强制删除非空的目录:rm -rf ./hello (强制删除本地目录下的hello及其子目录)

5)在当前目录及其子目录中查找字符串:grep -rn "PROC_FS" ./*

./* : 表示路径为当前目录.

-r 是递归查找

-n 是显示行号

       

  (6)建立文件的符号链接:ln -s ../hello.c ./hello1    上层目录中的hello.c在本层目录中建立符号链接hello1

7tar打包压缩;tar解压缩解包

        a. 当前目录下所有文件打包用gzip压缩: tar -czvf hello.tar.gz  ./*

        b. 当前目录下的文件解包gzip解压缩:tar -xzvf hello.tar.gz

        c. 当前目录下所有文件打包用bzip2压缩: tar -cjvf hello.tar.bz2  ./*

        d. 当前目录下的文件解包bzip2解压缩:tar -xjvf hello.tar.bz2

  (8)查看域名对应IP地址:nslookup www.ismartalarm.com

  (9)ifconfig eth0 down    网卡down

     ifconfig eth0 up       网卡up

     ifconfig -a   查看当前机器中所有网络,包括停止工作的网络

     ifconfig eth0 10.0.22.30 netmask 255.255.255.0

10)查看nfs服务是否启用:service nfs status

  (11)查看nfs服务在各个启动level下的启用/禁用情况:chkconfig —list | grep ifs

       修改nfs服务在启动level下的启用:chkconfig —level 3 nfs on

  (12)查看服务的端口号: catetc/service

  (13) VI 移动到行开头:0(数字0

            移动到行尾:$

            移动到文档开头:1(或输入数字到某一行)

            移动到文件尾部:G

            复制行:yy   黏贴:p  删除:dd  撤销:u  删除字符:x

 14gccgdb查看版本:gcc -v

                                      gdb -v

   (15) linux gzip解压包含符号链接文件的gzip压缩包失败:

         Windows共享目录, fat分区等是不支持linux的符号链接必须在ext3/4, btrfs等这些分区格式的目录下解压

 16touch命令创建文件

   (17) arp -a 查看接入路由器的MAC

 18tail命令,从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。

   (19) mkdir -p 选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录。如:mkdir -p /var/run

 20printk根据不同优先级的信息可以输出到控制台上、/var/log/messages里。其中,对输出给控制台的信息有一个特定的优先级 console_loglevel。若优先级小于这个整数值时,则消息才能显示到控制台上,否则,消息会显示在/var/log/messages里。若不加任何优先级选项,则消息默认输出到/var/log/messages文件中。

 21proc - process information pseudo-file system

          进程信息虚拟文件系统,此目录中的文件是关于你正在运行的进程详细信息,如PID等信息。

22)显示当前文件夹下所有文件的行数:cat*|wc -l

23)显示当前文件夹下各个文件的行数:ls *|xargs wc -l


24)修改Uboot中的串口波特率:/Ubootinclude/configs/rt2880.h   

          CONFIG_BAUDRATE

          Uboot开机的打印位于:/Ubootlib_mips/board.c


25Vim操作快捷键:dd--剪切光标所在行 ndd 连续剪切多行)

                                yy--复制光标所在行 nyy 连续复制多行)

                                p--黏贴

                                x--删除光标后面的一个字符

                                X--删除光标前面的一个字符

                                u--撤销上一个操作 ctrl+r 可撤销u的修改)

                                .--重复上一个操作

                                v--进入可视模式;选中多行,y--进行复制;p--进行黏贴;d--进行删除

                                G--跳转到最后一行

                                nG--跳转到第n

                               :%s/old/new/g     整个文件中的old替换为new


26!!可以执行上一个指令

27>以覆盖的方式重定向输出(>默认表示1>;还可以将标准错误输出重定向为2>

         >>以累加的方式重定向输出(>>默认表示1>>;还可以将标准错误输出重定向为2>>

         <<<表示标准输入重定向

(28) ubuntu12.04txt文件乱码如何解决?

gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8','GB18030','GB2312','GBK','BIG5','CURRENT','UTF-16’]"

(29)ubuntu terminal配色方案

文字颜色:#708284

背景颜色:#07242E

30)移除所有的.O文件

find  -name “*.o" | xargs rm




volatile关键字:

一般说来,volatile用在如下的几个地方:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile

2、多任务环境下各任务间共享的标志应该加volatile

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;



特殊字符:

~ @ # $ ^ & * ( ) - + = [ ] { } ? | . ‘


 TJk@GJyM:AHAw2INr:e*mfGCPN:q4H+ALMm:jMZ6pTk6:+U[kruWB 



const意味着只读

一个参数既可以是const还可以是volatile吗?解释为什么。

 一个指针可以是volatile吗?解释为什么。

 下面的函数有什么错误:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

下面是答案:

是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr)

{

int a,b;

a = *ptr;

b = *ptr;

return a * b;

}

由于*ptr的值可能被意想不到地该变,因此ab可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

long square(volatile int *ptr)

{

int a;

a = *ptr;

return a * a;

}



static关键字,意味着不要导出到程序外部


static void    /* "static" means don't export the symbol... */

myfunc2()

{

    myfunc3();

}



tar压缩算法:

tar -zcvf /home/xahot.tar.gz /xahot

tar -zcvf 打包后生成的文件名全路径要打包的目录

例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。


几种快速清空文件内容的方法:

  $ : > filename #其中的 :是一个占位符,不产生任何输出.

  $ > filename

  $ echo “” > filename

  $ echo /dev/null > filename

  $ echo > filename

  $ cat /dev/null > filename




mount命令详解

Baby 镜像更新:

1.cp /tftpboot/root_uImage /root/sharednfs

2.telnet 登录板子

3.mount 本地镜像所在路径到/mnt

mount -o nolock,rw 10.0.22.18:/root/sharednfs /mnt

4.cd mnt

   cp  root_uImage /dev/mtdblock4

5.reboot


功能:加载指定的文件系统。 

语法:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点

用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入文件/etc/fastab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。 

常用参数和选项: 

-a 加载文件/etc/fstab中设置的所有设备。 

-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。 

-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。 

-h 显示在线帮助信息。 

-L<标签>加载文件系统标签为<标签>的设备。 

-n 不将加载信息记录在/etc/mtab文件中。 

-o<选项>指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括: 

async 以非同步的方式执行文件系统的输入输出动作。 

atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime 

auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto 

defaults 使用默认的选项。默认选项为rwsuiddevexecanto nouserasync 

dev 可读文件系统上的字符或块设备,取消选项为nodev 

exec 可执行二进制文件,取消选项为noexec 

noatime 每次存取时不更新inode的存取时间。 

noauto 无法使用-a参数来加载。 

nodev 不读文件系统上的字符或块设备。 

noexec 无法执行二进制文件。 

nosuid 关闭set-user-identifier(设置用户ID)set-group-identifer(设置组ID)设置位。 

nouser 使一位用户无法执行加载操作,默认设置。 

remount 重新加载设备。通常用于改变设备的设置状态。 

ro 以只读模式加载。 

rw 以可读写模式加载。 

suid 启动set-user-identifier(设置用户ID)set-group-identifer(设置组ID)设置位,取消选项为nosuid 

sync 以同步方式执行文件系统的输入输出动作。 

user 可以让一般用户加载设备。 

  

-r 以只读方式加载设备。 

-t<文件系统类型>指定设备的文件系统类型。常用的选项说明有: 

minix Linux最早使用的文件系统。 

ext2 Linux目前的常用文件系统。 

msdos MS-DOS FAT 

vfat Win85/98 VFAT 

nfs 网络文件系统。 

iso9660 CD-ROM光盘的标准文件系统。 

ntfs Windows NT的文件系统。 

hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。 

auto 自动检测文件系统。 

-v 执行时显示详细的信息。 

-V 显示版本信息。 

-w 以可读写模式加载设备,默认设置。




mount jffs2 文件系统系统错误解决办法 

分类: Linux2012-09-11 17:37 930人阅读 评论(0) 收藏 举报

flashblog

最近在板上mount jffs2时老是出错,困扰了好像。主要是提示如下错误:

Child dir "upf" (ino #26) of dir ino #3 appears to be a hard link
Child dir "param" (ino #21) of dir ino #3 appears to be a hard link

.........................
Child dir "app" (ino #62) of dir ino #6 appears to be a hard link

一堆的这样问题。搞的头大。

想不出为什么!!

没办法G之。偶然找到一个blog说是flash没有擦除。fuck earse ,tftp下载,果然正常。

该文主要内容如下:

1.判断是不是jffs2文件。用UE打开,在前面应该是0x85,0x19 ,如果不是,则是大小端的问题。请在mkfs.jffs2命令上加入-l或者-b

2.如果出现以下错误,则是文件系统被覆盖了。


3.出现以下错误。是因为flash不够干静。erase

Child dir "upf" (ino #26) of dir ino #3 appears to be a hard link
Child dir "param" (ino #21) of dir ino #3 appears to be a hard link

4.出现以下错误。是Flash空间不够

jffs2_read_dnode() asked for 4096 bytes at 114688 from 3241-byte node
jffs2_read_dnode() asked for 4096 bytes at 118784 from 3241-byte node

顺便带上jffs2的命令格式:

/mkfs.jffs2 -d ./jffs2 -l  -e 0x20000 -o jffs2.img

原文地地址:http://blog.csdn.net/plaris060504/article/details/6031576






glibc libc 


glibc libc 都是 Linux 下的 C函数库。 

libc Linux 下的 ANSI C 函数库;glibc Linux下的 GUN C函数库。 


ANSI C GNU C有什么区别呢? 


       ANSI C 函数库是基本的 C语言函数库,包含了 C语言最基本的库函数。这个库可以根据头文件划分为 15个部分,其中包括: 

  1. <ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
  2. <errno.h>:定义用来报告错误条件的宏;
  3. <float.h>:包含系统的浮点数大小限制;
  4. <math.h>:包含数学库函数的函数原型;
  5. <stddef.h>:包含执行某些计算 C所用的常见的函数定义;
  6. <stdio.h>:包含标准输入输出库函数的函数原型,以及他们所用的信息;
  7. <stdlib.h>:包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
  8. <string.h>:包含字符串处理函数的函数原型;
  9. <time.h>:包含时间和日期操作的函数原型和类型;
  10. <stdarg.h>:包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;
  11. <signal.h>:包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
  12. <setjmp.h>:包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;
  13. <locale.h>:包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。
  14. 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;
  15. <assert.h>:包含宏和信息,用于进行诊断,帮助程序调试。

上述库函数在其各种支持 C 语言的 IDE中都是有的。 


       GNU C 函数库是一种类似于第三方插件的东西。由于 Linux是用 C语言写的,所以 Linux的一些操作是用 C语言实现的,因此,GUN组织开发了一个 C语言的库以便让我们更好的利用 C语言开发基于 Linux 操作系统的程序。不过现在的不同的 Linux的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了。 

查看当前系统的 glibc 版本的方法: 

(1)/lib/libc.so.6

(2)ldd - -version


      错误观点glib前面有个 "g",所以认为 glib GNU的东东;同时认为 glibc glib的一个子集。 

      其实,glib glibc基本上没有太大联系,可能唯一的共同点就是,其都是 C编程需要调用的库而已。 

glib Gtk+ 库和 Gnome 的基础。glib可以在多个平台下使用,比如 LinuxUnixWindows等。glib为许多标准的、常用的 C 语言结构提供了相应的替代物。 


libc 实际上是一个泛指。凡是符合实现了 C标准规定的内容,都是一种 libc

glibc GNU 组织对 libc 的一种实现。它是 unix/linux的根基之一。

微软也有自己的 libc 实现,叫 msvcrt

嵌入式行业里还常用 uClibc ,是一个迷你版的 libc


ld-uClibc-0.9.28uclibc下进行动态库连接的连接器


uclibc

计算术语中,uClibc是一个面向嵌入式Linux系统的小型的C标准库。最初uClibc是为了支持uClinux而开发,这是一个不需要内存管理单元Linux版本,因此适合于单片机系统(uCs;此处"u"是代表"micro"μ罗马化)

uClibc 是一个小型的 C库,应用于嵌入式 Linux系统开发。它基本实现了 glibc的功能,几乎所有 glibc支持的应用程序都能在 uClibc上运行,这使得应用程序的移植变得相当简单,只需要使用 uClibc库重新编译源代码就可以了。目前 uClibc主要运行在不带 MMU的平台下,支持 alpha, ARM, i386, i960, h8300, m68k, mips/mipsel, PowerPC, SH, SPARC等等。






uclibcglibc的差别

uClibcGlibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题。


1. uClibcGlibc小,虽然uClibcGlibc在已有的接口上是兼容的,而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便,但是uClibc并没有包括Glibc中的所有接口实现,因此有些应用可能在uClibc中不能编译。

2. uClibc在可配置性上比glibc要好。

3. uClibc并不能保证发布的库二进制兼容旧版本uClibc库。当一个新的版本uClibc库被发布,则可能需要也可能不需要重新编译应用程序。

4. Glibc中调用malloc(0),将返回一个有效的指针,然而在uClibc中调用malloc(0),则返回NULL指针。根据在SuSv3中关于malloc(0)的行为的定义,两个库的实现都是正确的。对于调用relloc(NULL,0),两个库的实现也不同。个人感觉Glibc的如此实现不是特别安全。Glibcmalloc的实现可以通过MALLOC_CHECK_环境变量调节。这个方法主要用于malloc调试。这些扩展的malloc调试特性在uClibc中是不可用的。在Linux上有许多有些的malloc调试功能的库(如:dmalloc,electric fence,valgrind)Glibc中的扩展的malloc调试功能更好用。因此uClibc中去掉这些功能特性并不会有多大损失。


5. uClibc没有提供用于数据接口的库(libdb)

6. uClibc不支持NSS(/lib/libnss_*),在这方面Glibc更容易支持不同方式的认证和DNS解析。uClibc仅仅支持采用flat口令文件或者shadow口令文件存储授权信息。如果需要比这些更复杂的的授权,可以编译安装pam

7. uClibc中的libresolv库仅仅是一个桩。Glibclibresolv库中的部分并不是全部的功能uClibc都提供,许多函数都没有实现。

8.提供网络信息服务支持(NIS)libnsl(最初被称为黄页YP),被SUN扩展为发明为RPC并用于网络共享Unix口令文件。个人认为NIS是一个令人厌恶的东西并应该使用。因此,在实现相同的功能情况下采用ldapNIS更有效。uClibc虽然提供一个桩libnsl,但并不支持NIS。我们因此也不提供在Glibc下提供的位于/usr/include/rpcsvc里的头文件。

9. uClibc的区域支持并不是100%的完全。正在这方面努力 

10. uClibc的数据功能函数库内部仅仅支持long double,设置对于long double的支持也是非常有限。与此对应的只实现了较少的数学函数。如果应用程序采用double类型,则会程序会运行得较好。

11. uClibclibcrpt库不支持可重入crypt_r,setkey_rencrypt_r,因为这些也不是SuSv3所规定的。

12. uClibc直接采用内核的数据类型去定义大多数透明的数据类型。

13. uClibc支持采用linux内核结构特有的结构体"struct stat"

14. uClibc的运行时库librt当前缺少aio接口、全部的时钟接口和共享内存接口(仅仅实现定时器接口和消息队列接口)





MIPS架构的交叉编译工具问题



某些MIPS架构的机顶盒提供了六种交叉编译工具GCC,如下:
· mipsel-linux-gcc
· mipsel-linux-uclibc-gcc
· mipsel-uclibc-gcc
· mips-linux-gcc
· mips-linux-uclibc-gcc
· mips-uclibc-gcc

这六种有什么区别?分别用于什么情况呢?

1)首先,mipsmipsel的主要区别在于Big Endian(大端)和Little Endian(小端)结构。
mips对应的是Big Endian
mipsel对应的是Little Endian

2)其次,要明白uclibc库。
uclibc库是面向嵌入式Linux系统开发优化的C语言库。比GNU C Library更小,但接口兼容,且更易于配置。
uclibc可运行于标准的以及无MMULinux系统之上,支持i386x86x64ARMAVR32BlackfinH8300M68KMIPSPowerPCSuperHSPARCV850等处理器下列。
mips-uclibc-gcc表示采用uclibc库进行编译的GCC

3)至于第三点是否带linux的区别则不清楚,以后再补充吧




预定义__GNUC__

    1 __GNUC__ gcc编译器编译代码时预定义的一个宏。需要针对gcc编写代码时,可以使用该宏进行条件编译。

    2 __GNUC__ 的值表示gcc的版本。需要针对gcc特定版本编写代码时,也可以使用该宏进行条件编译。

    3 __GNUC__ 的类型是“int”,该宏被扩展后,得到的是整数字面值。可以通过仅预处理,查看宏扩展后的文本。

示例:

  #include <assert.h>

  #include <stdio.h>

  #include <typeinfo>
  #ifndef __GNUC__

    #error sample for gcc compiler

  #else

    /* use gcc special extension: #warning , __attribute__, etc.  */

  #endif

  int main() 

  {    

    printf("hello gcc %d\n",__GNUC__);    

    assert( typeid(__GNUC__)==typeid(int) );    

    printf("press Enter to exit\n");    

    (void)getchar();

  }





函数名: getenv

:从环境中取字符串,获取环境变量的值

头文件:stdlib.h

:char *getenv(char *envvar);

函数说明:getenv()用来取得参数envvar环境变量的内容。参数envvar环境变量的名称,如果该变量存在则会返回指向该内容的指针环境变量的格式为envvar=valuegetenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。

返回值:执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符的第一个字节是null

相关函数:_wgetenvgetenv_s_wgetenv_s




git取消修改,恢复版本命令大全

分类: git2014-01-15 15:41 5847人阅读评论(2)收藏 举报

#取消对文件的修改。还原到最近的版本,废弃本地做的修改。

git checkout -- <file>


#取消已经暂存的文件。即,撤销先前"git add"的操作

git reset HEAD <file>...


#修改最后一次提交。用于修改上一次的提交信息,或漏提交文件等情况。

git commit --amend


#回退所有内容到上一个版本

git reset HEAD^


#回退a.py这个文件的版本到上一个版本  

git reset HEAD^ a.py  


#向前回退到第3个版本  

git reset –soft HEAD~3  


#将本地的状态回退到和远程的一样  

git reset –hard origin/master  


#回退到某个版本  

git reset 057d  


#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit.(代码回滚到上个版本,并提交git)

git revert HEAD


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值