Linux常用命令及技巧:
(1)cat /proc/version 查看当前内核的版本
(2) 挂载nfs文件夹:需要先确认在/etc/exports文件,可以用于开发板挂载的文件夹
mount -o nolock 10.0.22.30:/root/sharednfs /mnt
/etc/exports文件常见参数:
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
(7)tar打包压缩;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)查看服务的端口号: cat/etc/service
(13) VI 移动到行开头:0(数字0)
移动到行尾:$
移动到文档开头:1(或输入数字到某一行)
移动到文件尾部:G
复制行:yy 黏贴:p 删除:dd 撤销:u 删除字符:x
(14)gcc与gdb查看版本:gcc -v
gdb -v
(15) linux gzip解压包含符号链接文件的gzip压缩包失败:
Windows共享目录, fat分区等是不支持linux的符号链接; 必须在ext3/4, btrfs等这些分区格式的目录下解压
(16)touch命令创建文件
(17) arp -a 查看接入路由器的MAC
(18)tail命令,从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。
(19) mkdir -p 选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录。如:mkdir -p /var/run
(20)printk根据不同优先级的信息可以输出到控制台上、/var/log/messages里。其中,对输出给控制台的信息有一个特定的优先级 console_loglevel。若优先级小于这个整数值时,则消息才能显示到控制台上,否则,消息会显示在/var/log/messages里。若不加任何优先级选项,则消息默认输出到/var/log/messages文件中。
(21)proc - process information pseudo-file system
是“进程信息虚拟文件系统”,此目录中的文件是关于你正在运行的进程详细信息,如PID等信息。
(22)显示当前文件夹下所有文件的行数:cat*|wc -l
(23)显示当前文件夹下各个文件的行数:ls *|xargs wc -l
(24)修改Uboot中的串口波特率:/Uboot/include/configs/rt2880.h
CONFIG_BAUDRATE
Uboot开机的打印位于:/Uboot/lib_mips/board.c
(25)Vim操作快捷键: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.04下txt文件乱码如何解决?
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的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
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 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
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个部分,其中包括:
- <ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
- <errno.h>:定义用来报告错误条件的宏;
- <float.h>:包含系统的浮点数大小限制;
- <math.h>:包含数学库函数的函数原型;
- <stddef.h>:包含执行某些计算 C所用的常见的函数定义;
- <stdio.h>:包含标准输入输出库函数的函数原型,以及他们所用的信息;
- <stdlib.h>:包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
- <string.h>:包含字符串处理函数的函数原型;
- <time.h>:包含时间和日期操作的函数原型和类型;
- <stdarg.h>:包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;
- <signal.h>:包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
- <setjmp.h>:包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;
- <locale.h>:包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。
- 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;
- <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可以在多个平台下使用,比如 Linux、Unix、Windows等。glib为许多标准的、常用的 C 语言结构提供了相应的替代物。
libc 实际上是一个泛指。凡是符合实现了 C标准规定的内容,都是一种 libc。
glibc 是 GNU 组织对 libc 的一种实现。它是 unix/linux的根基之一。
微软也有自己的 libc 实现,叫 msvcrt 。
嵌入式行业里还常用 uClibc ,是一个迷你版的 libc。
ld-uClibc-0.9.28是uclibc下进行动态库连接的连接器
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等等。
uclibc和glibc的差别
uClibc和Glibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题。
1. uClibc比Glibc小,虽然uClibc和Glibc在已有的接口上是兼容的,而且采用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的如此实现不是特别安全。Glibc中malloc的实现可以通过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库仅仅是一个桩。Glibc的libresolv库中的部分并不是全部的功能uClibc都提供,许多函数都没有实现。
8.提供网络信息服务支持(NIS)libnsl库(最初被称为黄页YP),被SUN扩展为发明为RPC并用于网络共享Unix口令文件。个人认为NIS是一个令人厌恶的东西并应该使用。因此,在实现相同的功能情况下采用ldap比NIS更有效。uClibc虽然提供一个桩libnsl,但并不支持NIS。我们因此也不提供在Glibc下提供的位于/usr/include/rpcsvc里的头文件。
9. uClibc的区域支持并不是100%的完全。正在这方面努力
10. uClibc的数据功能函数库内部仅仅支持long double,设置对于long double的支持也是非常有限。与此对应的只实现了较少的数学函数。如果应用程序采用double类型,则会程序会运行得较好。
11. uClibc的libcrpt库不支持可重入crypt_r,setkey_r和encrypt_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)首先,mips和mipsel的主要区别在于Big Endian(大端)和Little Endian(小端)结构。
mips对应的是Big Endian;
mipsel对应的是Little Endian。
2)其次,要明白uclibc库。
uclibc库是面向嵌入式Linux系统开发优化的C语言库。比GNU C Library更小,但接口兼容,且更易于配置。
uclibc可运行于标准的以及无MMU的Linux系统之上,支持i386、x86、x64、ARM、AVR32、Blackfin、H8300、M68K、MIPS、PowerPC、SuperH、SPARC和V850等处理器下列。
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=value。getenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。
返回值:执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符的第一个字节是null。
相关函数:_wgetenv、getenv_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