LINUX读书笔记

1.每一个硬盘的第一个扇区为:“启动扇区”,它包括了这个硬盘的分区表,还可能包括了启动系统的代码。
2.第一个硬盘的“启动扇区”被称为:“主引导记录(MBR)”,是因为当你启动系统时,BIOS把控制权交给了它上面的的一段程序(启动装载器)。
3.LILO
  它包括:启动装载器和lilo命令。
   lilo命令主要用于配置,安装,和更新启动装载器。
   一旦你改变了/etc/lilo.conf或者重新编译或删除一个内核映象时,你就需要从新运行lilo,从而重新建立映象文件和更新LILO。
4.GRUB的安装
  A.使用grub-install命令
   grub-install /dev/hda
5.rpm包的命名规则
  package-version-release.architecture.rpm
6.rpm包格式软件的选项说明
   rpm -U:安装一个新的软件并且删除旧版本
   rpm -i:直接安装软件
   rpm -q:查询一个包的安装情况,它还包括两个子集合选项
           rpm -q -X. (x=a:查询所有的包;)
   rpm -e:删除一个包
7.通用的系统程序一般放置在:/usr/bin;系统管理员安装的特殊软件一般在:/usr/local/bin or /opt
而X WINDOW的程序一般装在:/usr/X11
8.程序要使用的头文件一般放在:/usr/include及其子目录下(/usr/include/sys;/usr/include/linux)
9.在编译程序的时候,我们也可以指定编译器从特定的地方寻找头文件例如:
   gcc -I /usr/openwin/include fred.c
   就指明了GCC从"/usr/openwin/include"和"标准地方"寻找头文件
10.一般可以使用 grep 命令来查找特定的宏命令 例如:
    grep EXIT_*.h
就会返回定义了 EXIT_*.h的文件名
11.库文件
 它是一组已经被编译过的函数集合(一般是完成一些公共的,基本的操作,例如:数据库访问进程,屏幕处理函数等),以便以后调用。标准库函数存放的目录是:/lib和/usr/lib
 库文件的命名有如下规则:
        A.以lib开头
        B.以.a(静态库)或者.so结尾(共享库)
        在便宜程序的时候,我们可以用以下方式指定在哪里查找使用的库:
        gcc -o fred fred.c /usr/lib/libm.a
        也可以使用 -l 标志来代表:lib这个字符串
        gcc -o fred fred.c -lm和上面的等效
         同时我们也可以指定特定的库目录 如:
        gcc -o x11fred -L/usr/openwein/lib x11fred.c -lX11
12.编写自己的库文件
 1.在 /home/ljw/src/test/lib 下编写如下两个文件:bill.c和fred.c
        2.bill.c如下:
          #include <stdio.h>
          void bill(char* arg)
   {
  printf("bill: you passed %s/n",arg);
   }
         3.fred.c
          #include <stdio.h>
  void fred(int arg)
  {
  printf("fred:you passed %d/n",arg);
  }
         4.使用 gcc -c bill.c fred.c把这两个文件编译成目标文件,而不进行连接.
         5.在/home/ljw/src/test/include
 下编写一个头文件lib.h来包含这两个函数的申明
         lib.h
         #ifndef _LIB_H_
         #define _LIB_H_
         void bill(char*);
        void fred(int);

        #endif

         6.在 /home/ljw/src/test 下编写一个主程序文件 program.c
         program.c
         #include "lib.c"
         int main()
  {
  bill("Hello world !");
  exit(0);
  }
  7.把program.c编译成目标文件
           gcc -I /home/ljw/src/test/include/ -c program.c
           其中-I 用来指定头文件的寻找目录
         8.再把刚才的几个文件编译成可执行文件
           gcc -o program program.o lib/bill.o
  9.运行
           ./program
         10.到此为止我们就完成了传统的编译和连接的过程,接下来我们来形成库文件
            使用ar命令把目标文件集合在一起(在/home/ljw/src/test/lib下执行)
     ar crv libfoo.a  bill.o fred.o
            a - bill.o
            a - fred.o
          11.使用ranlib libfoo.a形骋桓隹獾列表文件
          12.使用
             gcc -o program program.o lib/libfoo.a (1)
             gcc -o program program.o -Llib/ -lfoo (2)
             gcc -I include/ -o program program.c -Llib -lfoo (3)
          都可以生成可执行文件
          注意: gcc -I include/ -Llib -lfoo -o program program.c
    不能形成可执行文件!原因还不清楚!
          13.使用 nm命令可以查询出一个目标文件或可执行文件里包含了哪些函数

       14.可以使用ldd命令查看一个可执行文件包含哪些动态库
          15.输出重定向
             ls -l > lsoutput.txt 将覆盖lsoutput.txt的内容
             ps >> lsoutput.txt 将追加lsoutput.txt
          16.输入重定向
              more < killout.txt
          17.管道:用于连接两个进程 |
              ps | sort >pssort.out
          18.find 命令格式
             find [path] [options] [tests] [actions]
             option:
                    -depth:先从子目录找起走
                    -follow:跟踪符号连接
                    -maxdepths N :最多查找深度
                    -mount(or xdev):不查找挂起的目录
             tests:
                    -name pattern:按名称匹配
                    -user username:匹配拥有者
      -type :文件匹配类型,一般的有 d:表示目录,f:表示常规的文件
              例如:
                   find . -newer while2 -print
               在当前目录中找出比while2更新的文件
               再如:find . -newer while2 -type f -print
               在当前目录中查找比 while2新的文件,当测试通过时;再测试类型是一般
               文件的对象,当测试通过时 把文件打印出来           
            19.grep 文件
               grep=general regular expression parser
               我们一般用它来查找字符匹配的对象
               grep [options] PATTERN [FILES]
                    options:
                            -c:打印出匹配的行数,而不是行
                            -E:优化扩展表达式
                            -h:把文件名加到匹配行的前面
                            -i:不考虑大小写
                            -l:列出文件名
                            -v:选择不匹配的行,而不是匹配的行
                例如:
                    grep in words.txt
                    i am in school.
                    grep -c in words.txt words2.txt
                    words.txt:2
                    words2.txt:14
                    grep -c -v in words.txt words2.txt
                    words.txt:9
                    words2.txt:16
             20.库函数级别的文件操作
                1.FILE *fopen(const char *filename,const char*mode)
  它相当于open这个系统调用.
                2.size_t fread(void *ptr,size_t size,size_t nitems,FILE *stream)  fread用于读取块数据,返回读取的记录块数,放在ptr指示的内存区
                3.size_t fwrite(const void *ptr,size_t size,size_t nitems,FILE
*stream)
  4.fclose(FILE *stream)
                5.int num;scanf("Hello %d",&num)
    这输入字符串要满足前5个是
"Hello",并且后一个是数字,中间的一个空格用来ignore所有的空格和tab,/n等
             21.向程序传参数
                int main(int argc,char *argv[])
                如果执行 myprog left right 'and center' 那么
                argc:4
                argv:{"myprog","left","right","and center"}
                命令本身作为第一个参数,要进一步处理是选项还是参数,可以参考getopt函数,做进一步处理
             22.make的使用
                make命令本身有下面几个option
                     -k:跳过错误继续
                     -n:打印出本应该做的,但没有完成的
                     -f <filename>:指定要使用的makefile文件
                dependency:
                一个target通常需要dependency语法是:
  target名称+":"+" "+dependency文件名1+""+dependency文件名2+.
  例如:
  myapp: main.o 2.o 3.o
  main.o: main.c a.h
  2.o: 2.c a.h b.h
  3.o: 3.c b.h c.h
  表示myapp这个target需要 main.o,2.o,3.o
  如果我们要make多个文件,我们使用 all这个target
  all: myapp
  如果没有all这个target,那么make就只创建第一个target
                rules:
  它说明按什么样的规则make target,比如我们要指定头文件的位置,库
  文件的位置等.每一个rule必须是一个tab开头!!
  下面是一个简单的makefile文件的内容:
  myapp: main.o 2.o 3.o
   gcc -o myapp main.o 2.o 3.o
  main.o: main.c a.h
   gcc -c main.c
  2.o: 2.c a.h b.h
   gcc -c 2.c
  3.o: 3.c b.h c.h
   gcc -c 3.c
  makefile文件里变量的使用:
  变量一般被定义成大写:变量的应用使用 $(变量名),
  $@,$<,$^为内置变量
  $@:代表一个target的名称
  $<:代表一个target的第一个dependency对象
    $^:代表一个target的所有dependency对象
  例如:
  ---makefile----
  OBJS= foo.o bar.o
  CC= gcc
  CFLAGS= -Wall -O -g
  
  myprog: $(OBJS)  ------> myprog: foo.o bar.o
   $(CC) $^ -o $@  ---> gcc foo.o bar.o -o myprog
  foo.o: foo.c foo.h bar.h
   $(CC) $(CFLAGS) -c $< -o $@  ---->gcc -Wall -O -g -c
foo.c -o foo.o
  bar.o: bar.c bar.h
   $(CC) $(CFLAGS) -c $< -o $@  -->gcc -Wall -O -g -c
bar.c -o bar.o
  --------endmakefile----- 
  23.gdb的使用
   file :转入想debug的程序
   kill:结束在debug的程序
   list:列出原文件的代码
   next:执行一行代码但不进入函数
   step:进入函数内部
   run:执行当前程序
   quit:退出程序
   watch:观察一个变量
   print:打印出变量的value
   break:设置断点
   make:不退出gdb就重新产生可执行文件
   shell:使你不离开gdb就执行shell命?
   delete:删除所有的断点
  其中经常用到的就是 next,step,break,run,watch,print,delete
  使用watch时,不关什么时候变量名被改变,gdb都会打印出以下格式:
   old value:
   new value:
  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值