技術與技巧札記

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章