2012-11-9
chmod -v a+wt $LFS/sources
chmod a+wt是将目录或文件的属性设置为1777,这样任何人都可以对其进行读写。
当一个目录被设置为"粘着位"(用chmod a+t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ '/bin/bash
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编译,然后会毕较第二次和第二次的结果以确保它能正确无误的生成它自己。
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
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
这个参数通过将输入位置修改为特殊的空设备来防止从框架目录(默认是 /etc/skel) 拷贝文件。最后的lfs为用户的用户名。之后可以通过passwd lfs来修改密码。
patch -Np1 -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 -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这三个目录文件
mkdir -pv /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)替换为空,即将该字符串删除。