2012-11-9
chmod -v a+wt $LFS/sources
chmod a+wt是將目錄或檔案的屬性設定為1777,這樣任何人都可以對其進行讀寫。
當一個目錄被設定為"粘著位"(用chmod a+t),則該目錄下的檔案只能由
一、超級管理員刪除
二、該目錄的所有者刪除
三、該檔案的所有者刪除
也就是說,即便該目錄是任何人都可以寫,但也只有檔案的屬主才可以刪除檔案
可以參考http://blog.sina.com.cn/s/blog_49302a850100gfrs.html
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ '/bin/bash
exec的作用是執行一個可執行檔來替換掉當前進程(注意進程號並沒有改變),env -i 就是以後面的環境變數來執行 /bin/bash。經過上面的整條命令,linux將用一個全新的shell來執行接下來的命令,這樣可以去除掉很多環境變數。
set +h:該命令是關閉bash的
hash功能。Hash通常是一個有用的特性 —bash使用一個hash表來記錄可執行檔的完整路徑,以避免為尋找同一個可執行檔而反覆搜尋PATH裡的目錄。
2012-11-10
make-C
ld clean : 表示先進入ld目錄,然後執行ld/Makefile中的clean目標
make -C ld LIB_PATH=/tools/lib #進入ld目錄進行make,同時將make的環境變數LIB_PATH設定為/tools/lib,該環境變數指定了連結器的預設搜尋路徑。
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)替換為空白,即將該字串刪除。