分类 Unix,Linux,BSD 下的文章

今天清理一下系统,使用了一个命令行,可能对其他人有参考价值

dpkg -l | grep "^rc" | awk '{print $2}' | xargs aptitude -y purge

用途:
删除已经删除的软件包的残留配置文件。因为 debian 中 remove 包不删除配置文件,purge 才能清除,但根据依赖关系自动清除都是 remove,在加上自己失手操作,所以用得时间长了,难免残留很多没必要的配置文件,比较烦,于是有了上述操作。

说明:
1) dpkg -l
列出系统中安装的所有包的状态,ii 开头的是正常安装的包,rc 开头的则是删除但仍留下配置文件的包,其他状态则是有错误的状态,自己执行一次就明白了,输出结果的开头有说明的。
2) grep "^rc"
提取以 rc 开头的包,也就是被删除但仍残留配置文件的包的信息的行。
3) awk '{print $2}'
打印这些包的名字,他们位于 dpkg -l 输出结果的第二个字段,估计有很多人是通过这个命令认识到 awk 的,也有很多人只在这个命令行中才使用 awk,我就是其中之一。
4) xargs aptitude -y purge
把上述输出,也就是要清除配置文件的包的名字放在 aptitude -y purge 后面,purge命令会清除配置文件,而 -y 参数会自动对后面 aptitude 命令的提示回答是,这个开关通常是危险的,所以在一般情况下不要轻易使用,而在这里,如果你确定这些包的配置文件的清除是没有问题的的话,可以使用这个开关。

经常要从CM7源代码构建ROM,于是以Atrix4G为例写了这个脚本,实现自动编译新版CM7。
当然,脚本可能还有一些不完善的地方,欢迎大家提出来。

#!/bin/sh
#
# 编译环境 Ubuntu Desktop 11.10
# 参考文献 http://www.anrip.com/post/261
# http://developer.android.com/sdk/installing.html
# http://source.android.com/source/initializing.html
# http://wiki.cyanogenmod.com/wiki/Motorola_Droid:_Compile_CyanogenMod_%28Linux%29
#

sudo su -
ulimit -S -n 1024

# 设定工作目录
export WORK=/media/workspace
export PATH=$PATH:$WORK/bin
mkdir -p $WORK/CyanogenMod
mkdir -p $WORK/bin

# 安装必要的软件包
apt-get install git-core zip curl gnupg flex bison \
  gperf pngcrush schedtool build-essential squashfs-tools \
  libsdl1.2-dev libesd0-dev libwxgtk2.6-dev libncurses5-dev zlib1g-dev

# 安装其他软件包
if [ $(getconf LONG_BIT) == 64 ]; then
  apt-get install lib32z1-dev lib32ncurses5-dev lib32readline5-dev g++-multilib
fi

# 安装java-sdk
apt-get install openjdk-6-jdk

# 安装android-sdk
cd $WORK/
wget http://dl.google.com/android/android-sdk_r14-linux.tgz
tar xvf android-sdk_r14-linux.tgz && rm android-sdk_r14-linux.tgz

# 手动选择并安装platform-tools
$WORK/android-sdk-linux/tools/android
export PATH=$PATH:$WORK/android-sdk-linux/platform-tools

# 安装repo工具
cd $WORK/bin/
wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
chmod 0755 repo

# 同步CM7源码
cd $WORK/source/
repo init -u git://github.com/source/android.git -b gingerbread
repo sync -j16

# 把编译选项-m64改成-m32
cd $WORK/source/external/clearsilver/
if [ $(getconf LONG_BIT) == 32 ]; then
  sed -i "s/-m64/-m32/g" cgi/Android.mk
  sed -i "s/-m64/-m32/g" cs/Android.mk
  sed -i "s/-m64/-m32/g" java-jni/Android.mk
  sed -i "s/-m64/-m32/g" util/Android.mk
fi

# 获取设备专属文件(需调试模式连接手机)
cd $WORK/source/device/motorola/olympus/
./extract-files.sh

# 下载Rom管理器
cd $WORK/source/vendor/cyanogen/
./get-rommanager

# 编译CM7源码
cd $WORK/source/
source build/envsetup.sh
brunch olympus

查找软件的安装路径

whereis < 程序名称>
-b 只查找二进制文件
-m 只查找帮助文件
-s 只查找源代码
-u 排除指定类型文件
-f 只显示文件名
-B < 目录> 在指定目录下查找二进制文件
-M < 目录> 在指定目录下查找帮助文件
-S < 目录> 在指定目录下查找源代码

在文件索引数据库中搜索文件

locate < 文件名称>
-d < 数据库路径> 搜索指定数据库
updatedb 更新文件索引数据库

查找文件

find [路径] < 表达式>
-name < 表达式> 根据文件名查找文件
-iname < 表达式> 根据文件名查找文件,忽略大小写
-path < 表达式> 根据路径查找文件
-ipath < 表达式> 根据路径查找文件,忽略大小写
-amin < 分钟> 过去N分钟内访问过的文件
-atime < 天数> 过去N天内访问过的文件
-cmin < 分钟> 过去N分钟内修改过的文件
-ctime < 天数> 过去N天内修改过的文件
-anewer < 参照文件> 比参照文件更晚被读取过的文件
-cnewer < 参照文件> 比参照文件更晚被修改过的文件
-size < 大小> 根据文件大小查找文件,单位b c w k M G
-type < 文件类型> 根据文件类型查找文件。b 块设备 c 字符设备 d 目录 p 管道文件 f 普通文件 l 链接 s 端口文件
-user < 用户名> 按归属用户查找文件
-uid 按UID查找文件
-group < 群组名> 按归属群组查找文件
-gid 按GID查找文件
-empty 查找空文件

因为装的是英文版的Ubuntu Server,故时区为美国东部时间。
查找/etc目录后发现在timezone文件中有指定时区。

修改timezone配置为"Asia/Shanghai"即可

echo "Asia/Shanghai" > /etc/timezone

也可以使用以下命令打开交互式界面来更改系统时区

sudo dpkg-reconfigure tzdata

同步时间

ntpdate cn.pool.ntp.org

写入硬件时钟

hwclock -w