1.直接编译一个test.c文件
gcc -EL test.c -o test
生成test是可执行文件.
2.只生成.o文件,为打包生成库文件准备
gcc -c hello.c
生成hello.o的目标文件.
3.生成静态库文件
ar -r libhello.a hello.o
生成libhello.a静态库文件.
4.生成动态库文件
gcc -shared -fPIC hello.c -o libhello.so
生成libhello.so动态库文件.
5.使用-I指定包含头文件路径,中间不要空格.
INC_PATH = -I. -I../kernel/include #搜索当前路径和 ../kernel/include下所有的头文件
6.使用-L指定库文件路径,中间不要空格.
LIB_PATH = -L../gstreamer/lib/gstreamer-0.10 #搜索../gstreamer/lib/gstreamer-0.10下所有库
-loil-0.3 #连接liboil-0.3.so 或 liboil.a
5.test.c和libhello.a静态库文件一起生成执行文件
gcc test.c -lhello -L. -static -o hello.static
生成hello.static可执行文件.
6.test.c和libhello.so动态库文件一起生成执行文件
gcc test.c -lhello -L. -o test
生成test可执行文件.
7.如果目标平台是小端架构,编译,连接时都需要 -EL 选项.
mips-linux-gnu-gcc -EL test.c -o test
8.连接远程网络:
mount -o nolock 192.168.9.222:/home/pub/test /root/
把192.168.9.222:/home/pub/test挂接到/root/上.
9.直接替换整个partiton1分区
dd if=/root/vmlinux.bin of=/dev/mtdblock1
10.显示环境变量HOME
$ echo $HOME
/home/redbooks
11.设置一个新的环境变量hello
$ export HELLO="Hello!"
$ echo $HELLO
Hello!
12.使用env命令显示所有的环境变量
$ env
HOSTNAME=redbooks.safe.org
PVM_RSH=/usr/bin/rsh
Shell=/bin/bash
TERM=xterm
HISTSIZE=1000
...
13.使用set命令显示所有本地定义的Shell变量
$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
14.使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
$ unset $TEST #删除环境变量TEST
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了
15.使用readonly命令设置只读变量
如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ readonly TEST #将环境变量TEST设为只读
$ unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable
环境变量的设置位于/etc/profile文件
如果需要增加新的环境变量可以添加下属行
export path=$path:/path1:/path2:/pahtN
16.Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
永久的:需要修改配置文件,变量永久生效。
临时的:使用export命令声明即可,变量在关闭shell时失效。
17.设置变量的三种方法
17.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用vi在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。
17.2在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用vi在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
例如:编辑guok用户目录(/home/guok)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
17.3直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
18.常用的环境变量
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
19.scp
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
假如有两台机器:本地:192.168.0.1 远程:192.168.0.2
拷贝远程文件到本地
scp -P 2222 root@192.168.0.2:/root/fcbu.com.zip /home/wwwroot/fcbu.com.zip
将本地文件上传到服务器上
scp -P 2222 /home/wwwroot/fcbu.com.zip root@192.168.0.2:/root/fcbu.com.zip
拷贝远程目录到本地
scp -P 2222 -r root@192.168.0.2:/root/fcbu.com/ /home/wwwroot/fcbu.com/
将本地目录上传到远程服务器上
scp -P 2222 -r /home/wwwroot/fcbu.com/ root@192.168.0.2:/root/fcbu.com/
ssh默认连接端口是22,如果有更改过,则需要使用-P参数。例如上面的命令是将端口更改为2222:scp -P 2222
scp常用的一些参数:
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接,认证,或是配置错误。
-C 启用压缩选项,
-r 传递目录下的所有内容
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .
更多man scp
20.git命令
查看分支:
$ git branch 该命令会类出当先项目中的所有分支信息,其中以*开头的表示当前所在的分支。参数-r列出远程仓库中的分支,而-a则远程与本地仓库的全部分支。
创建新分支:
$ git branch testing 创建一个名为testing的分支
切换分支:
$ git checkout teting 切换到testing分支上。通过向该命令传递一个-b参数,可以实现创建并切换分支的功能。
合并分支:
$ git merge hotfix 将hotfix分支合并到当前分支当中去
删除分支:
$ git branch -d hotfix 删除分支hotfix,-d选项只能删除已经被当前分支所合并过的分支,而要强制删除没有被合并过的分支,可以使用-D。
重命名分支:
$ git branch -m oldbranch newbranch -M用来强制重命名,如newbranch已经存在的时候。
查看分支之间的不同:
$ git diff branchName 查看当前分支与branchName分支之间的差异,也可以使用:$ git diff branch1 branch2 来比较这1和2分支之间的差异,当使用第一种方式比较时,如果当前工作目录中存在与branchName同名的文件,系统则会提示错误,要是指明要比较的是文件还是分支,如果比较分支,可以进入.git中进行比较或切换分支,如果是>比较文件,则使用$ git diff -- fileName命令。
$ git diff <branchA>:<fileA> <branchB>:<fileB>
$ git ls-tree -r branch 列出所有的树对象
合并冲突:
如果在不同的分支中都修改了同一个文件的同一部分,Git 就无法干净地把两者合到一起(译注:逻辑上说,这种问题只能由人来裁决。)
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。
在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决。如
果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突。
要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge 和 --no-merged 选项(Git 1.5.6 以上版本)。比如用 git branch --merge 查看哪些分支>已被并入当前分支(译注:也就是说哪些分支是当前分支的直接上游。)
远程分支:
远程分支是对远程仓库分支的索引。它们是一些无法移动的本地分支,只有在Git进行网络交互时才会更新。我们用(远程仓库名)/(分支名)来表示远程分支。比如想查看上次>同origin仓库通讯时master的样子,就应该查看origin/master分支。
推送本地分支:
$ git push (远程仓库名字) (分支名) 如:$ git push orgin serverfix 该命令会将本地serverfix分支推送到origin远程仓库的serverfix分支中去,也可以使用命令 $ git push origin serverfix:serferfix实现同样的效果,可以将第二个serverfix更改为其它名字来指定要将该本地分支推送到远程仓库中的的指定分支中去,如果不存在,则会在
远程仓库中新建分支。
获取远程分支:
在使用git clone命令从远程服务器克隆Git仓库时,只是将远程仓库当前分支的内容克隆到本地,要是克隆其他分支的内容,需要使用下面命令:可通过git branch -r命令来
查看想要获取的远程仓库中的分支。
$ git fetch origin 值得注意的是,在 fetch 操作下载好新的远程分支之后,你仍然无法在本地编辑该远程仓库中的分支。
如果要把该内容合并到当前分支,可以运行 git merge origin/serverfix。如果想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来:
$ git checkout -b serverfix origin/serverfix
这会切换到新建的 serverfix 本地分支,其内容同远程分支 origin/serverfix 一致,这样你就可以在里面继续开发了。
Git pull:
从服务器的仓库中获取代码,和本地代码合并。(与服务器交互,从服务器上下载最新代码,等同于: Git fetch + Git merge)。
从其它的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:“git pull origin master ”就是将origin这个版本库的代码更新到本地的master主分支。
git pull可以从任意一个git库获取某个分支的内容。用法如下:
git pull username@ipaddr: 远端repository名 远端分支名:本地分支名。这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地
分支名,则默认pull到本地当前分支。
需要注意的是,git pull也可以用来合并分支。 和git merge的作用相同。 因此,如果你的本地分支已经有内容,则git pull会合并这些文件,如果有冲突会报警。
Git push
将本地commit的代码更新到远程版本库中,例如 “git push origin”就会将本地的代码更新到名为orgin的远程版本库中。
git push和git pull正好想反,是将本地某个分支的内容提交到远端某个分支上。用法: git pushusername@ipaddr: 远端repository名 本地分支名:远端分支名。这条命
令将本地git库的一个本地分支push到远端git库的远端分支名中。
需要格外注意的是,git push好像不会自动合并文件。因此,如果git push时,发生了冲突,就会被后push的文件内容强行覆盖,而且没有什么提示。 这在合作开发时是>很危险的事情。
git-clone命令只要碰到类似下面格式的远程仓库地址,都会被认为地址是符合SSH协议的: 账户@IP:工作目录
git checkout -b [分支名] [远程名]/[分支名]
如果你有 1.6.2 以上版本的 Git,还可以用 --track 选项简化
$ git checkout --track origin/serverfix
删除远程分支:
git push [远程名] :[分支名]
git pull 远程仓库名 远程分支:本地分支
git push 远程仓库名 远程分支:本地分支
git checkout -b 分支名 远程仓库名/分支名
21. 循环执行程序
# !/bin/sh
while : ;
do
./test
done