分类 技术 下的文章

By: [email protected]

项目平台基础信息:

系统信息:Ubuntu 12.04 LTS X64 Desktop

硬件信息:Intel® Core™2 Duo CPU P8400 @ 2.26GHz × 2,3G RAM

具体项目实施过程:

1. Ubuntu 系统安装的注意事项及操作系统基础环境配置

系统的安装。在安装Ubuntu系统的时候根据自己计算机情况合理清晰的构建新的系统,不可盲目选择。建议安装的时候选择全新安装或者事先预留空白分区手动分配磁盘。切忌不了解LVM的情况下不使用LVM管理方式安装。
在安装完成后首先选择合适的源来更新系统(可使用系统内置的源测速),其实主要更新的内容是系统语言包。在安装完更新以后即可随手安装些常用必备工具:Vim、Gcc、G++、Adobe Flash、Chromium等。

2. Android 开发平台的搭建

首先TaintDroid其实是一个自定义的Android ROM,所以必须自己编译Android源码来实“TaintDroid Build Instructions for Android”。那么首先要做的就是下载源码(Android及TaintDroid代码),然后进行编译并嵌入TaintDroid来实现自定义 ROM并刷入设备。

平台基础JDK 的安装:
由于Android代码编译使用的是JDK6,所以必须去Oracle上面寻找旧的对应平台的版本,而且需要注册并同意一些协议才会允许你去下载。下载到 的文件大概是类似于:jdk-6u45-linux-i586.bin,具体小版本号Google没有具体要求所以并不需要纠结。然就是安装JDK并配置 环境变量,具体操作如下:

ahaxzh@T400:~$ cd /workspace/soft
ahaxzh@T400:~$ chmod 701 jdk-6u45-linux-i586.bin
ahaxzh@T400:~$ sudo ./jdk-6u45-linux-i586.bin

(需要注意的是:其会在当前目录下解压JDK,也就是JDK所在的位置,需要记录下来并写在环境变量中)。
添加环境变量的方法:
编辑/etc/profile文件在文件最后添加内容:

#set java environment
JAVA_HOME=/home/ahaxzh/workspace/soft/jdk1.6.0_45
export JRE_HOME=/home/ahaxzh/workspace/soft/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

然后注销系统并重新登录,在终端使用命令:java -version来查看JDK是否安装完成。 若安装成功则会显示当前JDK版本号:

java version "1.6.0_45"
Java(TM) SE RuntimeEnvironment(build 1.6.0_45-b06)
JavaHotSpot(TM)Server VM (build 20.45-b01, mixed mode)

Android 源代码的下载:
根据官方网址说明需要的是首先需要安装以下工具软件:curl和git-core。在终端输入:

ahaxzh@T400:~$ sudo apt-get install curl
ahaxzh@T400:~$ mkdir ~/bin
ahaxzh@T400:~$ PATH=~/bin:$PATH
ahaxzh@T400:~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
ahaxzh@T400:~$ sudo chmod a+x ~/bin/repo

(需要注意的是,首先要在~/home下建立bin目录,并给与repo目录以权限。)

然后就可以新建一个目录用来存放Android源代码,如:workspace/tdroid/ tdroid-4.1.1\_r6)
进入到用于存放代码的目录使用repo命令来获取Android源代码:

ahaxzh@T400:~/workspace/tdroid$ mkdir -p ~/tdroid/tdroid-4.1.1_r6
ahaxzh@T400:~/workspace/tdroid$ cd ~/tdroid/tdroid-4.1.1_r6
ahaxzh@T400:~/workspace/tdroid$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6
ahaxzh@T400:~/workspace/tdroid$ repo sync

然后就进入漫长的等待过程。

在执行上面的步骤时需要注意的事项:
在使用repo命令时会遇到很多很多的问题下面进行详细说明:
关于repo只是google用Python写的一个用来调用git的脚本,主要是用来下载、管理Android项目的软件仓库。
官方安装介绍:http://source.android.com/source/downloading.html
官方使用说明:http://source.android.com/source/using-repo.html
在首次安装完git、curl及repo如果立即执行repo init操作可能会出现各种异常情况,这个主要和地域互联网环境有关。例如:直接链接不了源码服务器、出现读取失败等等。即使你能够链接并读取正常,第一 次还会出现要求你编辑git的配置文件(根据提示输入邮件、用户名字等)。至于出现问题的解决方案可以使用代理服务器、备份服务器及本地安装等。在漫长的 下载Android代码的过程中很容易出现repo sync 中断的现象,不得不重新执行repo sync命令。

关于repo init -u URL , 在当前目录安装 repository ,会在当前目录创建一个目录 “.repo” , -u 参数指定一个URL, 从这个URL 中取得repository 的 manifest 文件,然后才能够使用repo sync命令根据manifest文件抓取源码。抓取源代码是一个非常非常漫长的过程,我用了将近7小时。直到出现:

Fetching projects:100%(294/294),done.
Syncing work tree:100%(294/294),done.

算是下载完源代码了。这时候源代码目录(~/workspace/tdroid/tdroid-4.1.1\_r6)中 .reop目录大小为12G,而整个 tdroid-4.1.1\_r6目录将近20G左右。

Android源码的编译:

下载完源代码以后就可以开始着手准备源码编译工作了。官方编译说明:http://source.android.com/source/initializing.html
在着手编译的时候你需要再次确认一下问题:
首先你的操作系统必须是64位的(前面的几个Android版本貌似可以在32位编译,但是4.x的就没有遇到说可以在32位机器编译运行的 了)Linux发行版本。官方推荐的是Ubuntu 12.04 LTS版本,另外官方要求的编译环境必须是:Python 2.6 — 2.7, GNU Make 3.81 — 3.82,JDK 6,Git 1.7。除了这些以外还需要有的软件包:

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/libGL.so

这其中会出现的问题:libgl1-mesa-glx:i386 会提示找不到。这时候就陷入了一个痛苦的循环。具体见:http://askubuntu.com/questions/335853/ubuntu- wont-boot-after-initializing-the-build-environment-for-android/335865#335865
总之最后的解决方法是一次启动之内完成编译工作,然后重新启动以后需要在非GUI环境下安装xorg。
上述基本必须环境搭建完毕就可以开始编译Android源代码了。具体编译流程如下:

ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ . build/envsetup.sh
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ lunch 1
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ make -j4

然后就是漫长的编译等待了。整个过程花费的时间视机器硬件配置不通,我编译完成大概用了一整夜。等待编译完成以后就可以运行emulator命令来 测试原版(没有安装TaintDroid的)的Android原版系统了,这时候在工作目录里面会多一个out文件夹,大小13G。

上面所做的这些其实说白了只是为了测试。如果这些都通不过就没有办法接下来进行下面的事情。在第一次运行模拟器的时候,如果出现找不到emulator命令的话需要进行初始化操作:

ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ source build/envsetup.sh
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ lunch full-eng
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ emulator

3. 将TaintDroid定制到Android系统内并重新编译

下载TaintDroid源代码:
TaintDroid并不是一个软件,而是嵌入到系统本身的一个服务。所以并不可以直接有Apk文件来安装。需要的是讲其源代码加入到Android系统源代码中编译出来一个含有TaintDroid的定制版系统。
根据官方说明,需要:

Download the TaintDroid4.1 local_manifest.xml and place it in~/tdroid/tdroid-4.1.1_r6/.repo or copy and paste the following content into.repo/local_manifest.xml

其中的XML文件包含了托管在github上的TaintDroid源代码。然后执行如下操作来具体实施下载代码:

ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ repo sync
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ repo forall dalvik libcore frameworks/base frameworks/native system/vold system/core device/samsung/crespo device/samsung/tuna packages/apps/TaintDroidNotify-c 'git checkout -b taintdroid-4.1.1_r6 --track github/taintdroid-4.1.1_r6 && git pull'

在重新repo的时候会看到:

“warning: local_manifest.xml is deprecated; put local manifests in`/home/ahaxzh/workspace/tdroid/tdroid-4.1.1_r6/.repo/local_manifests` instead”

这样也就知道了local\_manifest.xml文件是什么用的了。等待repo完成以后就完成了TaintDroid的下载。就可以准备重新编译了。是的又要花将近一夜的时间来重新编译。

重新编译定制版Android系统:
首先要自己在工作目录写一个makefile,内容如下:

ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ gedit buildspec.mk

-

# Enable core taint tracking logic (always add this)
WITH_TAINT_TRACKING :=true# Enable taint tracking for ODEX files (always add this)
WITH_TAINT_ODEX :=true# Enable taint tracking in the "fast" (aka ASM) interpreter (recommended)
WITH_TAINT_FAST :=true# Enable additional output for tracking JNI usage (not recommended)#TAINT_JNI_LOG := true# Enable byte-granularity tracking for IPC parcels#WITH_TAINT_BYTE_PARCEL := true

然后执行下面的命令来重新编译定制版ROM(定制TaintDroid的Android系统):

ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ . build/envsetup.sh
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ lunch full-eng
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ make clean
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ make -j4

有了原版系统的编译通过,这次编译基本不会有什么问题,注意到编译的时候会出现一些警告,但是没有给编译造成什么困难。编译的时间同样很久,编译完 成了以后会在工作目录生成新的out文件夹make clear命令会删除原先的原版系统。有一点需要注意的是如果你不缺定是否在系统内嵌入了TaintDroid,你可以通过查看out/target /product/generic 目录下面的install-files.txt来查看是否含有tdroid。到这里一个定制版的ROM就已经生成了,同样可以通过emulator命令来 运行模拟器(可能需要初始化)。

4. 测试并统计TaintDroid实际效果

获取Android SDK及Eclipse
关于AVD(Android模拟器)的创建,Google提供了简单方便的可视化工具来创建。首先需要用到的是Android SDK。可以在:http://developer.android.com/sdk/index.html#download
找到与自己系统相对应的版本。下载并解压后会发现其包含了Android SDK和集成了众多Android应用调试插件的Eclipse IDE。由于SDK 中只含有最新版的SDK,所以需要对SDK 进行更新以便获取需要的版本(Android 4.1)。更新SDK 简单的方法是从Eclipse 重直接点击Android SDK Manager来启动SDK内容管理工具,选择需要的内容打勾安装(需要同意许可)即可。

创建一个TaintDroid定制版ROM的AVD
然后在Eclipse中使用Android Virtual Device Manager来创建一个AVD模拟器,如果直接选择的话,其实选择的是原版的ROM,而我们需要的是嵌入了TaintDroid的ROM,所以这里可以取巧,方法如下:
由于AVD需要的核心内容是system.img(系统镜像)这个系统文件,所以可以使用我们编译完成的Rom来替换掉原生SDK里面的 systen.img。我的自定义ROM的system.img文件在/out/target/product/generic目录里面,而SDK 的system.img文件在sdk/system-images/android-16中,操作时注意备份好原生系统镜像。上面的步骤昨晚了以后就可以 使用AVDM来创建一个我们需要的ADV了,内存、屏幕分辨率根据实际情况进行相应的调整。SDCard是必须的,大多数软件需要。

运行TaintDroid定制版ROM的AVD及测试统计
上面创建完成AVD以后就可以运行了,在AVDM界面点击Start来运行我们的模拟器初次运行会很慢,因为会创建sdcard.img、 userdata.img、userdata-qemu.img、等等一些列的相关镜像文件(放在~/.android/avd目录中)。
进入Android系统后,在系统设置界面里可以更改系统语言,非必要。打开TaintDroidNotify并开启监控。TaintDroid服务就会 在后台运行,这时候如果有程序出现违规操作,就会在系统通知处显示Notify,滑动即可查看具体违规的详细情况,会显示应用名称、违规操作内容、目标 IP地址、时间等。
在网易移动应用商城随机选择好评100W以上的几个应用进行测试结果统计:

酷狗音乐 发送IMEI 42.62.20.242

天天静听 发送IMEI到多个IP地 址202.75.220.21

酷我音乐盒 发送IMEI 221.238.18.38

辣妈帮 发送IMEI到多个IP地址 202.75.220.15等

++++++++++++++++++++++++++++++++++++++

BOSS啊,这什么编辑器嘛。。代码成这样了,我也不知道怎么弄了。就这么着吧。。

http://www.cnblogs.com/ahaxzh/archive/2013/12/02/3454540.html

Linux ps 命令

linux的ps命令是一个查看系统运行的进程的一个最基础的工具。它提供了一个当前进程的快照,还带有一些具体的信息,比如用户id,cpu使用率,内存使用,命令名等,它不会像top或者htop一样实时显示数据。虽然它在功能和输出上更加简单,但它仍然是每个linux新手需要了解和学好的必要进程管理/检测工具。

在本篇中,我们会学习ps命令基本的用法:查找、过滤,以不同的方式排序。

语法说明

ps命令有两种不同风格的语法规则:BSD风格和UNIX风格。Linux新手经常感到困惑并会误解这两种风格,所以在继续下一步之前,我们来弄清楚一些基本的信息。

注意: "ps aux"不等同于"ps -aux"。比如"-u"用于显示用户的进程,但是"u"意味着显示具体信息。

BSD 形式 - BSD形式的语法的选项前没有破折号,如:

ps aux

UNIX/LINUX 形式 - linux形式的语法的选项前有破折号,如:

ps -ef
在linux系统上混合这两种语法是可以的。比如 "ps ax -f"。但是本章中我们主要讨论UNIX形式语法。

如何使用ps命令

1. 显示所有进程

下面的命令可以显示所有进程的列表。

$ ps ax
$ ps -ef

通过管道输出到"less"可以分页。

使用"u"或者"-f"选项可以显示进程的具体信息。

$ ps aux
$ ps -ef -f
为什么USER列显示的不是我的用户名,但是其他的像root,www-data等却显示? 对于所有的用户(包括你们的),如果长度大于8个字符,那么ps只会显示你的UID而不是用户名。

2. 显示用户进程

使用"-u"选项后跟用户名来过滤所属用户的进程。多个用户名可以用逗号分隔。

$ ps -f -u www-data
UID        PID  PPID  C STIME TTY          TIME CMD
www-data  1329  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1330  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1332  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1377  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                               
www-data  1378  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                               
www-data  4524  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4527  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4528  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start

3. 通过名字或者进程id显示进程

通过"-C"选项后面加上名字或者命令来搜索进程。

$ ps -C apache2
  PID TTY          TIME CMD
 2359 ?        00:00:00 apache2
 4524 ?        00:00:00 apache2
 4525 ?        00:00:00 apache2
...

要通过进程id显示进程,就使用"-p"选项,并且还可以通过逗号分隔来指定多个进程id。

$ ps -f -p 3150,7298,6544

"-C"必须提供精确的进程名,并且它并不能通过部分名字或者通配符查找。为了更灵活地搜索进程列表,通常使用grep命令。

$ ps -ef | grep apache

4. 通过cpu或者内存使用排序进程

系统管理员通常想要找出那些消耗最多内存或者CPU的进程。排序选项会基于特定的字段或者参数来排序进程列表。

可以用'--sort'指定多个字段,并用逗号分割。除此之外,字段前面还可以跟上'-'或者'+'的前缀来相应地表示递减和递增排序。这里有很多的用于排序的选项,通过man页来获取完整的列表。

$ ps aux --sort=-pcpu,+pmem

显示前5名最耗cpu的进程。

$ ps aux --sort=-pcpu | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  2.6  0.7  51396  7644 ?        Ss   02:02   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
root      1249  2.6  3.0 355800 30896 tty1     Rsl+ 02:02   0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp
root       508  2.4  1.6 248488 16776 ?        Ss   02:02   0:03 /usr/bin/python /usr/sbin/firewalld --nofork
silver    1525  2.1  2.3 448568 24392 ?        S    02:03   0:01 /usr/bin/python /usr/share/system-config-printer/applet.py

5. 以树的形式显示进程层级

许多进程实际上是从同一个父进程fork出来的,了解父子关系通常是很有用的。"--forest" 选项会构造一个ascii艺术形式的进程层级视图。

下面的命令会用apache2的进程名来搜索并构造一个树来显示具体信息。

$ ps -f --forest -C apache2
UID        PID  PPID  C STIME TTY          TIME CMD
root      2359     1  0 09:32 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4524  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4525  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4526  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4527  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4528  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
不要在排序中使用树状显示,因为两者都会以不同方式影响显示的顺序。

6. 显示父进程的子进程

下面一个是找出所有从apache进程fork出来的进程的例子。

$ ps -o pid,uname,comm -C apache2
  PID USER     COMMAND
 2359 root     apache2
 4524 www-data apache2
 4525 www-data apache2
 4526 www-data apache2
 4527 www-data apache2
 4528 www-data apache2

第一个属于root的进程是apache2的主进程,其他的apache进程都是从主进程fork出来的。下面的命令使用apache2主进程的pid列出了所有的apache2的子进程。

$ ps --ppid 2359
  PID TTY          TIME CMD
 4524 ?        00:00:00 apache2
 4525 ?        00:00:00 apache2
 4526 ?        00:00:00 apache2
 4527 ?        00:00:00 apache2
 4528 ?        00:00:00 apache2

7. 显示进程的线程

"-L"选项会随着进程一起显示线程。它可用于显示所有指定进程或者所有进程的线程。

下面的命令会显示进程id为3150的进程的所有线程。

$ ps -p 3150 -L

8. 改变显示的列

ps命令可以被配置用来只显示被选中的列。很多列可以被用来显示,完整的列表可以查看man页。

下面的命令会只显示pid、用户名、cpu、内存、命令列。

$ ps -e -o pid,uname,pcpu,pmem,comm

同样可以重命名列的名字。

$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
  PID USERNAME CPU_USAGE %MEM COMMAND
    1 root           0.0  0.0 init
    2 root           0.0  0.0 kthreadd
    3 root           0.0  0.0 ksoftirqd/0
    4 root           0.0  0.0 kworker/0:0
    5 root           0.0  0.0 kworker/0:0H
    7 root           0.0  0.0 migration/0
    8 root           0.0  0.0 rcu_bh
    9 root           0.0  0.0 rcuob/0
   10 root           0.0  0.0 rcuob/1

非常灵活。

9. 显示进程运行的时间

运行的时间指的是,进程已经运行的时间。运行时间的列并没有默认显示,需要使用-o选项带入。

$ ps -e -o pid,comm,etime

10. 将ps转换为实时进程查看器

通常上,watch命令可将ps命令变成实时进程查看器。像这个简单的命令

$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'

我桌面上的输出如下。

Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --...  Sun Dec  1 18:16:08 2013

  PID USER     CMD                         %MEM %CPU
 3800 1000     /opt/google/chrome/chrome -  4.6  1.4
 7492 1000     /opt/google/chrome/chrome -  2.7  1.4
 3150 1000     /opt/google/chrome/chrome    2.7  2.5
 3824 1000     /opt/google/chrome/chrome -  2.6  0.6
 3936 1000     /opt/google/chrome/chrome -  2.4  1.6
 2936 1000     /usr/bin/plasma-desktop      2.3  0.2
 9666 1000     /opt/google/chrome/chrome -  2.1  0.8
 3842 1000     /opt/google/chrome/chrome -  2.1  0.8
 4739 1000     /opt/google/chrome/chrome -  1.8  1.0
 3930 1000     /opt/google/chrome/chrome -  1.7  1.0
 3911 1000     /opt/google/chrome/chrome -  1.6  0.6
 3645 1000     /opt/google/chrome/chrome -  1.5  0.4
 3677 1000     /opt/google/chrome/chrome -  1.5  0.4
 3639 1000     /opt/google/chrome/chrome -  1.4  0.4

输出会每秒刷新状态,但是这其实很top不同。你会发现top/htop命令的输出相比上面的ps命令刷新得更频繁。

这是因为top输出是结合了cup使用值和内存使用值后的排序值。但是上面的ps命令是一个更简单的行为的排序,每次获取一列(像学校的数学),因此它不会像top那样快速更新。


via: http://www.binarytides.com/linux-ps-command/

译者:geekpi 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

一图胜千言,一个精心设计的指导视频更是能给你带来良好体验。Linux上有你需要的制作有用且高质量教学视频的所有工具。我们将用强大的kdenlive视频编辑器和Audacity音频录制器和编辑器制作一个简单的屏幕录像,并学习如何在YouTube上分享精彩的屏幕录像。

一台安装了Kdenlive和Audacit软件的Linux系统PC,一个质量好的麦克风或耳机,和一个YouTube的帐号就是你需要准备的全部。(是的,除了Youtube还有很多其他的免费视频共享服务,你也可以使用它们。)YouTube属于Google,Google想让你与全世界共享任何人和事。如果这不是你想做的,请说no。

我们的工作流程是这样的:

  • 用Kdenlive录制屏幕录像
  • 用Audacity录制音轨
  • 添加音轨到Kdenlive
  • 上传到YouTube
  • 全世界看你的视频,好开心

kdenlive支持最流行的数字视频格式,包括AVI,MP4,H.264,和MOV。它支持的图像文件包括GIF,PNG,SVG和TIFF;支持的音频文件格式,包括非压缩的PCM,Vorbis,WAV,MP3和 AC3。你甚至可以阅读和编辑Flash文件。总之,它可以处理很多东西。

你的配音与你的视频一样重要。请一定要重视你的音频。使音频保持干净和简单,去除杂乱的题外话、方言,并将背景噪声降到最低点。我喜欢用一个质量好的耳麦做讲述,这样你不必担心话筒位置,你可以反复听你自己的讲述而不会影响到你身边的人。

Kdenlive的文档已过期,它会告诉你制作屏幕录像需要RecordMyDesktop软件。我用的是kdenlive 0.9.4,其实不需要Recordmydesktop。

图 1:默认配置

制作屏幕录像

首次安装kdenlive,第一次运行时会启动配置向导。不必在意默认设置,因为你随时都可以改变它们。

这是我的屏幕录像的设置:高清720p每秒30帧,1280x720的屏幕尺寸。如何知道该使用什么设置项? Google上有一些说明。设置这些值可到Settings > Configure Kdenlive > Project Defaults > Default Profile > HD 720p 30fps(图1)。

设置捕捉屏幕的大小到 Settings > Configure Kdenlive > Capture > Screen Grab(图2)。虽然你也可以选择捕捉全屏幕,但最好还是坚持用YouTube规定的尺寸。因为如果使用的尺寸与YouTube规定的不一样,则YouTube将增加黑边来达到合适的尺寸。热切的观众会更加希望看到一个充满生动的内容的屏幕,而不是黑边。

图 2:屏幕录像的屏幕大小

默认的YouTube视频播放器的大小是640x360标清320p,又小又模糊。播放器有小屏,大屏,全屏,和多个质量等级的控制。这些设置只有你的观众会使用,640x360标清320p看起来真的不咋样,但郁闷的是你无法改变这个缺陷。尽管如此,你仍然想制作高质量视频的话,你可以添加一些文字来提醒观众尝试更好的配置。

保存你的项目

在你做任何其他事情之前,点击 File->Save as 保存您的项目,并记住周期性地保存它。

抓取屏幕

抓屏小菜一碟。到Record Monitor,选择Screen Grab,然后点击Record按钮。屏幕上将打开一个带虚线的框,框里面的所有内容都将被录制下来。因此,你需要做的所有事就是移动框并调整框的大小到你想要l录制的范围。完成后点击停止按钮(图3)。

图 3:屏幕抓取

单击Stop,自动打开Clip Monitor,你可以预览你的裁剪效果。如果你觉得不错,把它从Project Tree中拖到Video 1轨道。现在你可以编辑你的视频了。总会有需要你修剪的地方;一个快速的方法是,你在Project Monitor里播放你的剪辑片,直到播放到你需要移除部分的末尾。然后暂停,然后按下Shift+r。你的剪辑片将会在你按下停止的时间轴上的点上被切割为两个剪辑。点击你要删除的片断,按下Delete键,噗!它就消失了。

对于剩下的剪辑片断,可能你想要从时间轴上的某一点开始播放,也可能你想要加入一些好的变换。比如一些简单的渐变就相当不错;右键点击你的剪辑片断,点击Add Effect > Fade > Fade from black 和 Fade to black,然后Kdenlive将自动将这两个效果放到开头和末尾。

添加配音

请参阅Whirlwind Intro to Audacity on Linux: From Recording to CD in One Lesson来学习使用Audacity录音的基础操作。以16bit的wav格式导出你的音频文件,然后通过Project > Add Clip导入到Kdenlive。然后将你的新音频剪辑拖到Audio tracks。一个简单的制作视频讲述的方式是边播视频边说。运气好的话,你不需要做很多的清理工作,你的讲述就会与视频同步。

图 4:用Shift+r切割音轨,然后将其中一个剪辑片从切割点拖离,创建一个静音间隙

如果你的语速比视频快,你可以在音轨中添加空档时间.很简单,用Shift+r切割音轨,然后将其中一个剪辑片从切割点拖离,创建一个静音间隙。(图4)。

Rendering Your Project ### 渲染你的项目

当你满意自己的编辑,并准备导出你的最终格式时,点击Render按钮。这需要几分钟的时间,取决于你的电脑速度和项目大小。已有为网站预先设定的值,如果你选择File Rendering, 你可以调整你的设置(图5)。我用File Rendering中的H.264,Video比特率12000, Audio比特率384取得了不错的效果。H.264是一种超压缩格式,使用这种格式发布的文件小但质量好。

图 5:选择文件渲染,调整你的网页设置

发布到YouTube

现在你可以在VLC或MPlayer或你喜欢的任何播放器中播放你的视频了,如果它看起来很好,那么你就可以将它上传到你的YouTube帐户里了。YouTube是典型的Google风格,信息中心和视频管理器会混乱又复杂,不过请坚持多研究下,你会理出头绪的。在你做任何事情之前,你必须对你的账户做资格认证,也就是通过短信和邮件获得一个验证码。通过输入验证码证明你不是一个网络爬虫后,你就能上传你的视频了。

你可以上传你的视频,然后标记它们为私人可见或所有人可见。Google有一些编辑工具,你可能会喜欢,比如自动纠错和配背景音乐。不过以我的拙见,几乎没有人是这样子做背景音乐的,所以这种工具只会令人讨厌。不过你有可能是第一个正确使用这个工具的人哦。

最有用的编辑工具是自动字幕。我推荐在你所有的视频上使用此功能,不光是为了那些听觉障碍的人,也为了那些需要保持低音量观看的人,确保所有的人都明白你在说什么。字幕工具也能创建副本。

另一个有用的工具是注释工具,它支持对话气泡,标题,聚光灯和标签。当然,在Kdenlive中,这些你都可以做到,所以都可以尝试一下。

好吧,到这里就结束了,但似乎我们刚刚开始。请分享你的视频,并在评论中添加Youtube的小建议和技巧。如果可以的话,请在video.linux.com分享你的新的视频教程,并参加100个Linux教程比赛。


来源于: http://www.linux.com/learn/tutorials/745745-how-to-make-a-youtube-instructional-screencast-video-on-linux/

译者:coolpigs 校对:jasminepeng

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux中的top命令显示系统上正在运行的进程。它是系统管理员最重要的工具之一。被广泛用于监视服务器的负载。在本篇中,我们会探索top命令的细节。top命令是一个交互命令。在运行top的时候还可以运行很多命令。我们也会探索这些命令。

(译注:不同发行版的top命令在各种细节有不同,如果发现不同时,请读你的帮助手册和命令内的帮助。)

  1. Top 命令输出:

首先,让我们了解一下输出。top命令会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出:

默认显示

前几行水平显示了不同系统参数的概括,接下来是进程和它们在列中的属性。

1.1 系统运行时间和平均负载:

显示运行时间

top命令的顶部显示与uptime命令相似的输出。

这些字段显示:

  • 当前时间
  • 系统已运行的时间
  • 当前登录用户的数量
  • 相应最近5、10和15分钟内的平均负载。

可以使用'l'命令切换uptime的显示。

1.2 任务:

任务概况

第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用't'切换显示。

1.3 CPU 状态:

CPU状态显示

下一行显示的是CPU状态。 这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:

  • us, user: 运行(未调整优先级的) 用户进程的CPU时间
  • sy,system: 运行内核进程的CPU时间
  • ni,niced:运行已调整优先级的用户进程的CPU时间
  • wa,IO wait: 用于等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si: 处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

可以使用't'命令切换显示。

1.4 内存使用:

内存使用情况

接下来两行显示内存使用率,有点像'free'命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。

物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。

内存显示可以用'm'命令切换。

1.5 字段/列:

任务信息列

在横向列出的系统属性和状态下面,是以列显示的进程。不同的列代表下面要解释的不同属性。

默认上,top显示这些关于进程的属性:

PID

进程ID,进程的唯一标识符

USER

进程所有者的实际用户名。

PR

进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

NI

进程的nice值(优先级)。越小的值意味着越高的优先级。

VIRT

进程使用的虚拟内存。

RES

驻留内存大小。驻留内存是任务使用的非交换物理内存大小。

SHR

SHR是进程使用的共享内存。

S

这个是进程的状态。它有以下不同的值:

  • D - 不可中断的睡眠态。
  • R – 运行态
  • S – 睡眠态
  • T – 被跟踪或已停止
  • Z – 僵尸态

%CPU

自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM

进程使用的可用物理内存百分比。

TIME+

任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND

运行进程所使用的命令。

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。

  1. 交互命令:

我们之前说过top是一个交互命令。上一节我们已经遇到了一些命令。这里我们会探索更多的命令。

2.1 ‘h’: 帮助

首先,我们可以用'h'或者'?'显示交互命令的帮助菜单。

帮助菜单

2.2 ‘’ 或者 ‘’: 刷新显示

top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。

2.3 ‘A’: 切换交替显示模式

这个命令在全屏和交替模式间切换。在交替模式下会显示4个窗口(译注:分别关注不同的字段):

  1. Def (默认字段组)
  2. Job (任务字段组)
  3. Mem (内存字段组)
  4. Usr (用户字段组)

这四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方。(译注:只有当前窗口才会接受你键盘交互命令)

交替显示

我们可以用'a'和'w'在4个 窗口间切换。'a'移到后一个窗口,'w'移到前一个窗口。用'g'命令你可以输入一个数字来选择当前窗口。

在交替显示中选择窗口

2.4 ‘B’: 触发粗体显示

一些重要信息会以加粗字体显示。这个命令可以切换粗体显示。

关闭粗体

2.5 ‘d’ 或‘s’: 设置显示的刷新间隔

当按下'd'或's'时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了1,top将会每秒刷新。

刷新间隔l

2.6 ‘l’、‘t’、‘m’: 切换负载、任务、内存信息的显示

这会相应地切换顶部的平均负载、任务/CPU状态和内存信息的概况显示。

不显示平均负载

不显示CPU概况

不显示内存和交换内存概况

上面三个全不显示

2.7 ‘f’: 字段管理

用于选择你想要显示的字段。用'*'标记的是已选择的。

管理显示列

上下光标键在字段内导航,左光标键可以选择字段,回车或右光标键确认。

按'<'移动已排序的字段到左边,'>'则移动到右边。

2.8 ‘R’: 反向排序

切换反向/常规排序。

2.9 ‘c’: 触发命令

切换是否显示进程启动时的完整路径和程序名。

完整命令路径

2.10 ‘i’: 空闲任务

切换显示空闲任务。

不显示空闲命令

2.11 ‘V’: 树视图

切换树视图。

树视图

2.12 ‘Z’: 改变配色

按下'Z'向用户显示一个改变top命令的输出颜色的屏幕。可以为8个任务区域选择8种颜色。

定制颜色

下面显示的是4中颜色显示的top视图。

彩色显示

2.13 ‘z’: 切换彩色显示

切换彩色,即打开或关闭彩色显示。

2.14 ‘x’ 或者 ‘y’

切换高亮信息:'x'将排序字段高亮显示(纵列);'y'将运行进程高亮显示(横行)。依赖于你的显示设置,你可能需要让输出彩色来看到这些高亮。

X 和 Y高亮

2.15 ‘u’: 特定用户的进程

显示特定用户的进程。你会被提示输入用户名。空白将会显示全部用户。

raghu的进程

2.16 ‘n’ 或 ‘#’: 任务的数量

设置最大显示的任务数量

设置最大显示的任务数量

2.17 ‘k’: 结束任务

top命令中最重要的一个命令之一。用于发送信号给任务(通常是结束任务)。

杀死一个任务

2.18 ‘r’: 重新设置优先级

重新设置一个任务的调度优先级。

  1. 命令行选项:

这些命令行选项与上面讨论的命令大多相同。top的输出可以用命令交互操作,但是你也可以带参数运行top来设置你想要的效果。

3.1 -b: 批处理模式

-b选项以批处理模式启动top命令。当你想要在文件中保存输出时是很有用的。

3.2 -c: 命令/程序名 触发:

如上面所讨论到的命令,这个选项会以上次记住的程序/命令显示的状态显示(是否显示完整路径)。

3.3 -d: 设置延迟间隔

设置top的显示间隔(以秒计)。比如。

$ top -d 1 

将会以1秒的刷新间隔启动top。

3.4 -i: 切换显示空闲进程

这个选项设置top命令的上一次记住的相反的'i'状态。

3.5 -n: 设置迭代数量

用-n选项,你可以设置top退出前迭代的次数。

$ top -n 3 

将会在刷新输出3次后退出。

3.6 -p: 监控特定的PID

你可以用-p选项监控指定的PID。PID的值为0将被作为top命令自身的PID。

3.7 -u 或 -U: 用户名 或者 UID

可以用这些选项浏览特定用户的进程。用户名或者UID可以在选项中指定。-p、-u和-U选项是互斥的,同时只可以使用这其中一个选项。当你试图组合使用这些选项时,你会得到一个错误:

$ top -p 28453 -u raghu
top: conflicting process selections (U/p/u) 

via: http://linoxide.com/linux-command/linux-top-command-examples-screenshots/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

LCTT(Linux中国翻译组)募新公告

LCTT是Linux中国社区(http://linux.cn/)的翻译组,负责从国外优秀媒体翻译Linux相关的技术、资讯、杂文等内容。

LCTT已经拥有二十余名活跃成员,并欢迎更多的Linux志愿者加入我们的团队。

项目地址: http://lctt.github.io/

互联网是个大熔炉。无论是好人还是坏人,都可以和我们一样连接到网络。那些制作病毒感染人们电脑的坏蛋以及寻求保护人们的好人们全都连接到同一网络中。

就像人们所说的那样,互联网是过去所出现的一个最好的东东。它包含着任何人都可以获取的有价值的信息和资源,且大部分可以免费获取。一些最著名高校的人提供了免费的高质量课程,可供任何想学习的人来学习。今天,我们都可以连入互联网真是一件好事情。

但是有些事情你一定要记住,当你连入互联网时,你的电脑就成了攻击的目标。成为病毒,木马和其它程序破坏的目标。

正因为此,推荐连入互联网的电脑都要使用反病毒和反间谍软件来保护。在有些情况下,即使使用了这些软件也不能完全保证你的安全。再添加一个安全层总是一个好主意。

当寻找添加一个额外的安全层去保护你的机器时,使用OpenDNS的安全DNS框架可能会有帮助。因特网有许多部分组成,尽力对其每一部分都进行相应保护是保证安全的最好方法。

首先,你要在你的电脑上安装反病毒和反间谍软件。由于浏览因特网时允许你的电脑查询远程DNS服务器,因此使用受保护的安全的DNS服务器将是保护你电脑安全的好方法。(译注:我们认为,其实在Ubuntu上使用反病毒和反间谍软件并不太必要,但是使用OpenDNS来拦截对恶意网址的访问是有必要的。另外,使用国外的DNS可能会比较慢,也许过一段时间,国内也会出现类似的服务。)

这是一个简明手册,告诉你如何在Ubuntu上配置OpenDNS框架以便保护你的电脑。

sudo gedit /etc/dhcp/dhclient.conf

最后,在打开的文件中添加下面一行,然后保存。

supersede domain-name-servers 208.67.222.222,208.67.220.220;

重启你的电脑,祝你玩的开心!

好好享受吧!


via: http://www.liberiangeek.net/2013/11/daily-ubuntu-tipsprotect-your-computers-using-opendns-secure-dns-infrastructure/

译者:Linux-pdz 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Ghost是一个相对较新的博客发布平台,它开始于众筹平台kickstarter上一个£25,000英镑的众筹项目。尽管WordPress依然是网上主流的博客工具,但它现在已然是一个拥有众多第三方开发功能的通用内容管理平台,发展到现在已经逐渐变得笨重、复杂以至于难以维护。但与此同时,仅仅诞生才几个月的Ghost坚持以用户为中心,打造精雕细琢的用户界面,承诺要做一个纯粹的博客平台。

在本教程中,我将描述如何在Linux中设置Ghost博客平台

在Linux上安装Ghost

Ghost是使用Node.js框架编写的。因此,首先你需要在你的Linux系统上安装Node.js框架。确保Node.js的版本为0.10或者更高。接下来,登录入http://ghost.org(需要注册),然后下载Ghost的源代码。记着按照下面的步骤安装:

$ sudo mkdir -p /var/www/ghost
$ sudo unzip ghost-0.3.3.zip -d /var/www/ghost
$ cd /var/www/ghost
$ sudo npm install --production

启动前先配置Ghost

在你启动Ghost之前,按照下面的步骤在/var/www/ghost/config.js位置创建它的配置文件。使用你的主机IP地址替换掉“YOUR\_IP”。

$ cd /var/www/ghost
$ sudo cp config.example.js config.js
$ sudo sed -i 's/127.0.0.1/YOUR_IP/g' config.js

以开发者模式尝试运行Ghost

搞到这一步,你就可以准备去启动Ghost咯。

要注意的是,Ghost可以以两种不同的模式运行:“开发者模式”和“用户模式”。为了安全起见,Ghost将两种模式的配置文件(/var/www/ghost/config.js)分开存放。例如,两种不同的模式使用不同的数据库文件(例如位于/var/www/content/data的ghostdev.db和ghost.db)。

使用以下命令就可以启动Ghost。Ghost默认以开发者模式运行。

$ cd /var/www/ghost
$ sudo npm start

Ghost成功运行后,终端中会有以下输出信息,告诉你Ghost正运行在:2368(译者注:2368为端口号)。

在你本机的浏览器中键入 http://:2368,身份校验后你就会看到Ghost的初始页面。

以用户身份启动Ghost

在你确认Ghost运行完好后,按下Ctrl+C停用开发者模式下的Ghost。现在你就可以在用户模式下启动Ghost咯。当你以用户模式运行Ghost时,你就可以使用Node.js呼叫forever模块了,forever模块允许你以守护进程运行Ghost,还可以让你以后台进程运行Ghost。

安装forever模块:

$ sudo npm install forever -g

最后,你就可以以用户模式像下面这样运行Ghost:

$ cd /var/www/ghost
$ sudo NODE_ENV=production forever start index.js

检查一下Ghost的数据库文件是否成功以用户模式创建(/var/www/ghost/content/ghost.db)。

你也可以检查一下forever活动进程列表:

$ sudo forever list
 info:    Forever processes running
 data:        uid  command         script   forever pid   logfile                     uptime
 data:    [0] cH0O /usr/bin/nodejs index.js 15355   15357 /home/dev/.forever/cH0O.log 0:0:0:37.741 

假如你看到以上信息,意味着Ghost已经成功以后台进程运行咯。

想停止Ghost守护进程,可以运行以下命令:

$ cd /var/www/ghost
$ sudo forever stop index.js

via: http://xmodulo.com/2013/11/install-ghost-blogging-platform-linux.html

译者:Linux-pdz 校对:Mr小眼儿

本文由 LCTT 原创翻译,Linux中国 荣誉推出