linux學習雜記(四)

chmod -v a+wt $LFS/sourcesphp

chmod a+wt是將目錄或文件的屬性設置爲1777,這樣任何人均可以對其進行讀寫。html

當一個目錄被設置爲"粘着位"(用chmod a+t),則該目錄下的文件只能由
1、超級管理員刪除
2、該目錄的全部者刪除
3、該文件的全部者刪除
也就是說,即使該目錄是任何人均可以寫,但也只有文件的屬主才能夠刪除文件
linux

能夠參考http://blog.sina.com.cn/s/blog_49302a850100gfrs.html shell

exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ '/bin/bashbootstrap

exec的做用是執行一個可執行文件來替換掉當前進程(注意進程號並無改變),env -i 就是之後面的環境變量來執行 /bin/bash。通過上面的整條命令,linux將用一個全新的shell來執行接下來的命令,這樣能夠去除掉不少環境變量。 bash

set +h:該命令是關閉bash  hash功能。Hash一般是一個有用的特性 —bash使用一個hash表來記錄可執行文件的完整路徑,以免爲尋找同一個可執行文件而反覆搜索PATH裏的目錄。框架

2012-11-10spa

make-C  ld clean : 表示先進入ld目錄,而後執行ld/Makefile中的clean目標
.net

make -C ld LIB_PATH=/tools/lib   #進入ld目錄進行make,同時將make的環境變量LIB_PATH設置爲/tools/lib,該環境變量指定了連接器的默認搜索路徑。htm

make bootstrap    #該命令通常在編譯編譯器時用。這個bootstrap不僅是編譯GCC,而要連着編譯屢次,它第一次用主機的GCC進行編譯,第二次用剛編譯好的GCC編譯,而後再用編譯好的GCC編譯,而後會畢較第二次和第二次的結果以確保它能正確無誤的生成它本身。

sed's@^/lib/ld-linux.so.2@/tools&@g ': 把/lib/ld-linux.so.2所有換成/tools/lib/ld-linux.so.2,@在這裏只是一個分隔符,與經常使用的/同樣。不論什麼字符,緊跟着s命令的都被認爲是新的分隔符!!

dirname  $(gcc -print-libgcc-file-name):該命令是獲取libgcc.a文件的路徑名,如/usr/lib/gcc/i486-linux-gnu/4.3.3

find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm-rvf '{}'  \;   :該命令表示刪除GCC_INCLUDEDIR目錄下的全部目錄文件,  -maxdepth 0表示只查找GCC_INCLUDEDIR,而不查找其子目錄。
grep -l "DO  NOT EDIT THIS FILE"${GCC_INCLUDEDIR}/*  :輸出在$GCC_INCLUDEDIR目錄下的文件中包含"DO  NOT EDIT THIS FILE"字符串的文件名。

2012-11-13

ln -sv $LFS/tools  /    # /tools -> $LFS/tools

ln -s源文件  目標文件      -s symbolic的意思  該命令是用於創建軟連接。當沒有指定目標文件名時,則目標文件名與源文件名相同,當沒有指定源文件的路徑時,則源文件的路徑與目標文件的路徑相同。

useradd -s /bin/bash -g lfs -m -k /dev/null lfs

上面的命令爲增長一個用戶名爲lfs的用戶。-s 指定用戶的默認shell爲/bin/bash, -g lfs將用戶添加到lfs組,-m爲用戶建立home目錄,-k /dev/null 

這個參數經過將輸入位置修改成特殊的空設備來防止從框架目錄(默認是 /etc/skel) 拷貝文件。最後的lfs爲用戶的用戶名。以後能夠經過passwd lfs來修改密碼。

patch -Np1 -i /lfs-sources/expect-5.43.0-spawn-1.patch

-N表示忽略修補的數據較原始文件的版本更舊,或該版本的修補數據已使用過。-p表示要去掉斜線的個數,在這裏-p1表示去掉一個"/"即補丁文件是lfs-sources/expect-5.43.0-spawn-1.patch, 若是用-p2則表示使用的補丁文件是expect-5.43.0-spawn-1.patch. patch通常都是在須要打補丁的文件所在的目錄下執行。若是打完補丁後又不想打了,那可使用-R選項來進行恢復,即patch  -Rp1 -i /lfs-sources/expect-5.43.0-spawn-1.patch

cp configure{,.bak}   #複製configure且新的文件名爲configure.bak

sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig >gcc/Makefile.in  #該命令爲將gcc/Makefile.in中的./fixinc.sh換爲-c ture   Makefile.in.orig爲Makefile.in的一個副本,@在這裏爲分隔符

sed's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.orig >gcc/Makefile.in  #將gcc/Makefile.in中的XCFLAGS=$換爲XCFLAGS=$  -fomit-frame-pointer   "/"在這裏爲分隔符,&表示前面的匹配項「XCFLAGS =$」, ^符號表示行首。注意-fomit前面有一個空格,該空格是不能夠省略的!

sed -i 's@/usr/include@/tools/include@g' configure #將configure中的/usr/include所有替換成/tooles/include, g表示所有替換,若是沒有g,那隻表示只替換第一行中的第一個匹配項。

make -C mount mount umount:先進入mount目錄,而後執行該目錄下Makefile中的mount目標,再執行umount目標。

chown -R root:root $LFS/tools  #表示將$/LFS/tools下的全部文件(包括子目標的文件)的擁有者改爲root,用戶組也改爲root,命令中的第一個root表示用戶,第二個root表示用戶組

mkdir -pv $LFS/{dev,proc,sys} #在$LFS/目錄下建立dev,proc,sys這三個目錄文件

install -dv -m 1777 /tmp /var/tmp  #以1777的模式建立/tmp /var   /var/tmp這三個目錄文件,若是目錄文件已存在,則會覆蓋原來的文件,另外須要注意的是/var這個目錄文件的模式並非1777,而是系統默認的 模式。該命令也等同於mkdir -pv -m 1777 /tmp  /var/tmp   只是mkdir建立時,若是目錄文件已存在,則會建立會失敗。

mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}

建立 /usr/{bin,include,lib,sbin,src} /usr/local/{bin,include,lib,sbin,src}等目錄文件

sed-i  '/vi_VN.TCVN/d' localedata/SUPPORTED  #將/localedata/SUPPORTED文件中vi_VN.TCVN所在的行刪除

sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in  #將elf/ldd.bash.in文件中的@BASH@替換爲/bin/bash,符號|在這裏爲分隔符。

gcc -dumpspecs | sed \

-e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \

-e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \

-e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \

`dirname $(gcc --print-libgcc-file-name)`/specs

gcc -dumpspecs是輸出specs文件  sed命令中 -e表示在同一行執行那三個操做 最後的\表示轉義回車鍵

's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g':將/tools/lib/ld-linux.so.2所有換爲/lib/ld-linux.so.2

'/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/@}'若是匹配*startfile_prefix_spec:則將下一行換爲/usr/lib/ 其中的.*表示匹配全部字符

/\*cpp:/{n;s@$@ -isystem /usr/include@}:如查匹配*cpp:,則將下一行的$換爲:-isystem/usr/include

這裏的命令若是對specs這個文件有所瞭解,那麼會更容易理解,該文件格式差很少以下:

%cmmand  ,即%後接的是命令

*[specs_name]: 該語句單獨成一行,以*號開頭,緊接着的一行爲specs字符串的值。具體狀況能夠參考GCC手冊

Sed的用法請參考:http://www.linuxsir.org/bbs/showthread.php?t=189620

http://jiebaiyou.blog.163.com/blog/static/11624901820094201479719/

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in  #將Makefile.in文件中的install_to_$(INSTALL_DEST)替換爲空,即將該字符串刪除。

相關文章
相關標籤/搜索