码迷,mamicode.com
首页 > 其他好文 > 详细

博客重写

时间:2016-07-29 23:03:36      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:interface   应用程序   源代码   linux   编译器   

基础知识

硬件设备接口非常底层和简陋,叫硬件规格,不同厂商生产的接口不一样,写一款程序,多个机器都能运行,叫高级语言,但高级语言在哪里跑,需要编译器编译,汇编器汇编,才能在主机上运行。应用程序跑在硬件上意味程序需要驱动各种硬件,写程序之前还要写驱动,非常困难。所以有了操作系统内核:kernel,来应对硬件的复杂性。

操作系统研发非常困难,目前国内还没有像样的操作系统。linux内核,支持所有cpu,内核源代码编译成所有机器的机器语言。现在的嵌入式系统大多数都是跑linux。kernel把底层的复杂性隐藏起来,向上提供了系统调用。为了保证底核的统一性,做封装--库(libraries),离用户更近一步。从此程序员写程序就可以直接调用库里所提供的功能。库本身无论底层是什么样的cpu架构,库之上是统一而规范的。国际统一posix规范。

程序员的编程接口有API:application program interface 。但运行时面对的接口是ABI:application binary interface 应用二进制接口。

程序管理;

 程序的组成部分;
     二进制程序:最关键的部分,能运行的内容
     配置文件:为了让程序运行,在内部提供接口,通过配置文件保留
     库文件:二次开发,需要调用别人的库
     帮助文件:
 程序包管理器:
     x文件:程序的组成文件打包成一个或有限几个文件
            安装:
            卸载:
            查询:

linux使用

 查看bash类型:echo $SHELL
 用户界面
 远程连接:ssh协议 secure shell

   查看系统是否监听于tcp协议的22号端口   有个22,就表示ssh处于运行状态
   ~]#ss -tnl 

   查看系统ip
   ~]#ifconfig 

   确保防火墙处于关闭状态
   ~]#iptables -L -n 查看防火墙,如果有,清掉。iptables -F
   ~]#iptables -F
   centos7 执行systemctl disable firewalled.service
               systemctl stop firewalled.service
   centos6 执行service iptables stop
               chkconfig iptables off

终端设备:

多任务,多用户
接口程序叫进程
1物理终端,控制台:consle
2虚拟终端:默认启动6个、
  ctrl+alt+F[1-6]
 在哪个虚拟终端启动,及就在哪个虚拟终端上
3串型终端
4伪终端

linux的哲学思想之一:

  一切皆文件:硬件设备也通过文件表示;
    物理终端:/dev/console
    虚拟终端:/dev/tty#[1,6]
    串型终端;/dev/ttyS#
    伪终端:/dev/pts/#

注意:在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互; 查看终端设备:tty 查看shell类型:echo $SHELL

CLI接口: 命令行接口: [root@dasdf ~ ]# 命令 prompt(命令提示符) root当前登录用户 
dasdf主机名,非完整格式主机名
~:用户当前所在的目录(current directory),也称为工作目录(working directory);相对路径 #:命令提示符 #:管理员账号,为root用户,拥有最高权限,执行所有操作 $:普通用户,非root用户,不能执行系统管理类操作 注意:建议使用非管理员账号登录 执行管理操作临时切换至管理员,操作完成后及退回

几个基础命令

1、tty:查看当前终端设备

2、ifconfig:查看活动接口的ip地址

3、 echo:回显 1,回显字符 2,如果是变量,则显示变量值,叫变量引用

4、 ping:探测网络的目标主机与当前主机之间的联通性 ctrl+c 1,终止命令执行 2,命令取消

5、 关机命令: centos 7 ~]# systemctl poweroff 重启reboot

stallman : 自由含义:自由学习和修改;自由使用;自由分发;自由创建衍生版;

linux的哲学思想: 1、一切皆文件: 把几乎所有资源统统抽象为文件形式:包括硬件设备、通信接口 open(),read(),write(),close(),delete(),create() 2、由众多功能单一的程序组成:一个程序只做一件事,并且做好; 组合小程序完成复杂任务; 3、尽量避免跟用户交互: 目标:易于以编程的方式实现自动化任务; 4、使用文本文件保存配置信息;

思考:文件是什么?众多文件如何有效组织起来? 目录:路径映射; 文件:有边界的在磁盘上的,存储空间存储的一段流式数据,对文件可以做到按名存取 文件系统:划分成层级,层级方式管理文件机制。在文件系统下,靠目录来找 /dev/pts/2 最左侧的/表示根目录,其他/表示路径分隔符 linux的路径分隔符是/ window的是\ 层级结构;有索引; /:原初起点; 第二层结构: 第三层结构: 倒置树状结构;

文件的路径表示: 绝对路径:从根开始表示出的路径 相对路径:从当前位置开始表示出的路径

文件名使用法则: 严格区分字符大小写:file1,File1,FILE1; 目录也是文件,在同一路径下,两个文件名不能同名; 支持使用除/以外的任意字符; 最长不能超过255个字符;

用户有家目录:home, 用户的起始目录:普通用户管理文件的位置 工作目录:

 /etc/sysconfig/network-scripts/ificfg-eno1212313
    basename(机名):最右侧的文件或目录名;
    dirname(目录名):basename左侧的路径

  命令:
  ~]# basename /PATH/TO/SOMEFILE
        SOMEFILE
  ~]#dirname /PATH/TO/SOMEFILE
       /PATH/TO

根目录和家目录的区别: 管理员权限下:/是根目录,家目录在根目录下面,空敲cd只是回到文件的家目录

普通用户登录:/是根目录,家目录与根目录是分开的,空敲cd只是回到文件的家目录

回顾: 开源协定: GPL,LGPL,BSD,Apache

 BSD:
   1、如果二次发布的产品中包含源代码,则在用开源代码的作者或组织,以及原来的代码中必须带有原来的代码中的BSD协定;
   2、如果二次发布产品是二进制格式的库或程序,则需要在发布的文档或版权声明中说明包含原来的代码中的BSD协定;
   3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广;

代码的共产主义运动;

linux文件系统,文件,目录:
   倒置树状结构:
      目录:路径
      文件:存储在磁盘中

    文件名:严格区分字符大小写;路径分隔符/

路径:
  绝对路径
  相对路径

程序的组成部分:二进制程序文件、库文件、配置文件、帮助文件 前两者是二进制格式,后两者通常是文本格式 二进制、库文件:可执行文件,库文件不能独立执行,只能被调用时执行 配置文件、帮助文件:用查看工具打开,可被查看其内容的文件

人机交互界面:交互式接口 GUI CLI [login@hostname workdir]#命令

linux基础知识 命令的语法统一格式: #COMMAND(命令) OPTIONS(选项) ARGUMENTS(参数)

 COMMAND :(命令)
  发起一个命令(进程):请求内核将某个二进制程序运行为一个进程;
     程序--> 进程
     静态(永远不会删除)--> 动态(有生命周期,运行完会自动退出)

     命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件;
        多数程序文件都存放在:/bin, /sbin,/usr/bin,/usr/sbin,/usr/local/sbin
           普通命令:/bin, /usr/bin/,/usr/local/bin
           管理命令:/sbin,/usr/sbin/,/usr/local/sbin
        共享库:二进制文件(不能单独启动运行)
            usr/local/lib,/usr/local/lib64
            64bits的库:/lib64,/usr/lib64,/usr/local/lib64

注意:并非所有的命令都有一个在某目录与之对应的可执行程序文件

命令必须遵循特定格式规范:exe,msi(windows),ELF(linux)
file:用来查看文件的内容格式的类型
   ~]# file /bin/ls 

命令分为两类:
   由shell程序的自带的命令:内置命令(builtin)
   独立的可执行程序文件,文件名即命令名:外部命令

 shell程序是独特的程序,负责解析用户提供的命令;词法分析,语法分析  
     环境变量:
        PATH:从哪些路径中查找用户键入的命令字符串所对应的命令文件:
        [root@localhost ~]# echo $PATH
        /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

      查找次序:自左而右;

## 查看命令类型: type COMMENT

内部命令没有路径

OPTIONS:(选项) 指定命令的运行特征:

 选项有两种表现形式;
     短选项:-c,例如-l,-d
         注意:有些命令的选项没有-;
         同一命令同时使用多个短选项,多数可合并:-l -d=-ld
     长选项:--word,例如--help,--human-readable
          注意:长选项不能合并;

     注意:有些选项可以带参数,此称为选项参数

ARGUMENT:(参数) 命令的作用对象:命令对什么生效;

   注意:不同的命令的参数;有些命令可以带多个参数,多个之间以空白字符做分隔;

例如:ls -ld /etc /var

获取命令的使用帮助:

内部命令:
   help COMMAND
 外部命令:
    (1)命令自带简要格式的使用帮助
          # COMMAND --help
     (2)使用手册:manual
        位置:ls /usr/share/man
          #man COMMAND

           SECTION:
                NAME:功能性说明
                SYNOPSIS:命令使用语法格式 
                DESCRIPTION:描述
                OPTIONS:选项
                EXAMPLES:使用示例
                AUTHOR:作者
                BUGS:报告程序bug的方式
                SEE ALSO:参考
                。。

             特别关注:SYNOPSIS:
                []:可选内容;
                <>:必须提供的内容
                a|b:多选一;
                ...:同类内容可出现多个; 

        使用手册:压缩格式的文件,有章节之分;
           /usr/share/man 
              man1,man2,....

              1:用户命令;
              2:系统调用;
              3:C库调用;
              4:设备文件及特殊文件;
              5:文件格式:(配置文件格式)
              6:游戏使用帮助;
              7:杂项;
              8:管理工具及守护进行;

          ~]# man 数字 COMMAND

              注意:并非每个COMMAND在所有章节下都有手册;
                 查看:
                   ~]# whatis COMMAND

                   注意:其执行过程是查询数据库进行的;
                     手动更新数据库:
                       ~]# makewhatis

        man命令打开手册以后的操作方法:
          翻屏:
             空格键:向文件尾部翻一屏
             b:向文件首部翻一屏
             ctrl+d:向文件尾部翻半屏;
             ctrl+u:向文件首部翻半屏;
             回车键:向文件尾部翻一行;
             k:向文件首部翻一行;
             G:跳转至最后一行;
             #G:跳转至指定行;
             1G:跳转至文件首部;


          文本搜索:查找时,不区分大小写
             /keywork:从文件首部向文件尾部依次查找;
             ?keywork:从文件尾部向文件首部依次查找;
               n:与查找命令方向相同;
               N:与查找命令方向相反; 

          退出:
            q:quit

      选项:
        -M /PATH/TO/SOMEDIR:到指定目录下查找命令手册并打开之

     练习:获取useradd命令的用法
        (1)添加用户gentoo;
            useradd gentoo  验证id gentoo
        (2)添加用户slcakware,要求指定其所用的shell为/bin/tcsh
            useradd -s /bin/tcsh slackware
              验证tail -l(数字1)  /etc/passwd

     (3)info COMMAND
          获取命令的在线文档;

     (4)很多应用程序会自带帮助文档:/usr/shate/doc/APP-VERSION
           README:程序的相关的信息;
           INSTALL:安装帮助;
           CHANGES:程序发展过程中随版本更新时的改动信息。

      (5)主流发行版官方文档
          http://www.redhat.com/doc

       (6)程序官方的文档:   
              官方站点上的“Document”

       (7)搜索引擎
            google
               keyword filetype:pdf
               keyword site:domain.tld

常用命令:

linux文件系统:
   1、文件名名称严格区分字符大小写;
   2、文件可以使用除/以外的任意字符;
   3、文件名长度不能超过255个字符;
   4、.开头的文件为隐藏文件;
          .:当前目录
          ..:当前目录的上一级目录
             /etc/sysconfig/
               .:syscongif
               ..:etc

 工作目录:working directory
 家目录:home

常用跟文件系统相关的命令
   pwd:printing working directory
        显示工作目录
   cd:changing directory
       切换目录
         cd [/PATH/TO/SOMEDIR]
            cd:切换回家目录;
              注意:bash中,~表示家目录;
            cd ~:切换回自己的家目录
            cd ~SUERNAME:切换至指定用户的家目录;
(非常有用) cd -:在上一次所在目录与当前目录之间来回切换
            cd ..上一级目录
            cd../var/log 上一级目录的/ver/log下,相对目录的标准边上
            cd ./var 当前目录下进到var目录

            $PWD:当前工作目录
            $OLDPWD:上一次的工作目录

    ls:list,列出指定目录下的内容
       ls [OPTION]... [FILE]...

        -a:显示文件,包括隐藏文件
        -A:显示除.和..之外的所有文件
        -l:--long,长格式列表,即显示文件的详细属性信息
            -rw-r--r--  1 root   root    17395 Jul 26 07:47 boot.log
            -:文件类型,-,d,b,c,l,s,p
            rw-r--r--
              rw-:文件属主的权限
              r--:文件属组的权限;
              r--:其他用户(非属主、属组)的权限       
            1:数字文件被硬链接的次数;
            root:属主,文件的所有者
            root:文件的属组
            17395:数字表示 文件的大小,单位是字节;
            Jul 26 07:47:文件最近一次被修改的时间
            boot.log:文件名
         -h,--hunman-readable:对文件大小单位换算;换算后的结果非精确
         -d:ld结合起来使用,查看目录自身属性,而非其内部的文件列表
         -r:reverse,逆序显示;
         -R:recursive,递归显示;

    cat:concatenate 连接文件显示在标准输出上
       文本查看工具
         file 查看 
           cat  /etc/fstab
           cat /etc/passwd

        cat [OPTION]...[FILE]..
          -n:给显示的文本行编号;
          -E:显示行结束符$;

    tac:cat一样,每一行逆序显示
        文件文本查看工具
         file 查看 
           tac  /etc/fstab
           tac /etc/passwd

        tac [OPTION]...[FILE]..
          -n:给显示的文本行编号;
          -E:显示行结束符$;

    file:查看文件内容类型;
       file [FILE]..

    echo:回显
       echo [SHORT-OPTION]... [STRING]...
          -n:不进行换行;
          -e:让转义符生效;
                \n:换行
                \t:制表符
                \v
                \b
            STRING可以使用引号,单引号和双引号
              单引号:强引用,比较傻,变量引用不会执行替换;

              双引号:在中间,变量引用会被替换

        注意:变量引用的正确符号
          ${NAME}

   关机或重启命令:
     shutdown [OPTIONS...] [TIME] [WALL...]
          OPTIONS:
            -h:halt
            -r:reboot
            -c:cancel

          TIME:
             now
             hh:mm
             +m
               +0

          WALL

    日期相关的命令:
       linux:系统启动时从硬件读取日期和时间信息;读取完成以后,就不再与硬件相关联;
         系统时钟
         硬件时钟
       date :系统时钟
           显示日期时间:[OPTION]... [+FORMAT]

           设定日期时间:[MMDDhhmm[[CC]YY][.ss]

       hwclock,clock:硬件时钟
           显示或设定硬件时钟
             -s :--hctosys 以硬件为准,把系统调整为与硬件时间相同
             -w : --systohc  以系统为准,把硬件调整为与系统时间相同



       cal:日历
         cal [[month] year]


博客重写

标签:interface   应用程序   源代码   linux   编译器   

原文地址:http://11541229.blog.51cto.com/11531229/1831872

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!