• Linux基础


    1.描述计算机组成及其功能

        在学习Linux操作系统之前,首先我们要对计算机硬件进行简单的了解,随着计算机硬件的快速发展,现代计算机设备主要分为五个部分,分别是运算器、控制器、存储器、输入以及输出设备。

        控制器(Control):正确的分布的完成每一条指令规定的功能。比如控制内存数据给CPU或者CPU结果放入存储器等。

        运算器(Datapath):对数据进行算术运算和逻辑运算。要提到的是计算机的算术运算都是转换成加法进行计算的。

        存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要的时候提供这些信息

        输入(input system):输入设备,常见的输入设备有键盘、鼠标、摄像头等。

        输出(output system):输出设备,常用的输出设备有显示器、打印机等。

        其中运算器和控制器组成了电脑中的CPU(中央处理器)。所以CPU也成了计算机的核心组成部分,主要负责对数据的运算。存储器包括了硬盘,内存,负责存储和便于读取数据。输入输出设备,用于与外界信息交互。互相之间通过bus总线来连接传输。

        CPU控制是基于大量的指令集来运行的,而用户态的应用程序并不能直接控制CPU,所以就需要操作系统在中间作为中转,应用程序进行系统接口调用,OS运行特权指令。

        然后就引出了操作系统的概念。

     操作系统的定义:操作系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间。

     操作系统的内核的定义:操作系统的内核是一个管理和控制程序,负责管理计算机的所有物理资源,其中包括:文件系统、内存管理、设备管理和进程管理。

      CPU之寄存器

      CPU的日常操作就是从内存取指令,解码,执行周而复始一直到整个程序结束。但是CPU处理指令花费的时间比他从内存中取指令的速度要快的多,所有CPU内部都有一些用来保存关键变量和临时数据的寄存器,CPU中的某些指令集提供一些指令,将一个数据从内存调入CPU或者从寄存器存入内存,cpu其他的指令集可以把来自寄存器、内存的操作数据组合,或者用两者产生一个结果,比如将两个字相加并把结果存在寄存器或内存中。

      寄存器的分类

      1.通用寄存器

      用来保存变量以及组合或者上述的产生的临时结果。

      2.程序计数器

      同时跑多个程序,保存将要取出下一条指令的内存地址。上一次没干完的状态保留,下一次直接调用这个状态。

      3.堆栈指针

      它指向内存中当前栈的顶端。该栈包含已经进入但是还没有退出的每个过程中的一个框架。在一个过程的堆栈框架中保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量。

      4.程序状态字计数器

      控制工作状态,这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。在系统调用和I/O中,PSW非常重要,CPU指令集与内核数据来了,包括操作硬件的指令集都让系统软件使用,而硬件指令集不能让程序使用。内核态一切都开放,用户态会被CPU限制。应用程序需要操作硬件时,需要通过系统软件的内核态来回切换。应用程序必须使用操作系统提供的系统调用功能,切换时应用程序使用系统调用,系统调用调用操作系统,把TRAP指令状态改变。一般就是软件不停的在用户态与内核态之间切换时,由于时效性所以数据的状态是由程序状态字计数器来保存的。

      寄存器的维护

      操作系统必须知晓所有的寄存器。在时间多路复用的CPU中,操作系统会经常中止正在运行的某个程序并启动(或再次启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。

      从别处扣了一张计算机启动运行流程图:

    2.Linux的发行版本

        Linux发展到现在已经有几百种发行版本。Linux的内核源代码和linux的应用程序都可以自由获得,因此很多公司组织开发了属于自己的Linux发行版。目前有三大主流发行版本,分别是slackware,debain,Redhat。在主流发行版本基础之上,还有这很多常见的二次发行版本和三次发行版本(界面等更优化),比如slackware(最古老的linux版本)的二次发行版本中的suse和三次发行版本opensuse,sles(企业级发行版)。debain(更原汁原味非常遵循GNU规范的版本)的二次发行版乌班图三次发行版本mint,Redhat,rhel(企业版),fedora(桌面版,现在被fedora社区开发研究)。

        这些发行版本内核上基本没区别。不过有的内核是优化过的,比如适合平板的内核,它集成了相当多触摸屏的驱动,其它没有优化的内核要自己安装触摸屏的驱动。 每个发行版本,不光是图形终端不同。 还有安全方面,文件打包方面,还有源方面。

        注:按软件包管理系统的不同,分为Redhat的rmp包管理系统和Ubuntu的基于DPKG包管理系统。使用前者的发行版包括SLES、Fedora、openSUSE、centos、RHEL等,包文件以rpm为扩展名;使用后者的包括Ubuntu系列,Debian系列等,包文件以deb为扩展名。

     Red Hat Enterprise Linux:因为它是所有Linux/UNIX系统中最容易安装,同时也是应用最广的一种Linux操作系统。而Linux操作系统多数是用作服务器的,由于使用Linux的成本十分低廉,因此目前许多Internet服务器都是使用Linux操作系统。

     操作系统的特点:多用户(在同一时刻可以有多个用户同时使用linux操作系统而且他们互不干扰)和多任务(任何一个用户在同一时间可以在linux操作系统上运行多个程序)

    3.Linux的哲学思想

        1、一切皆文件

        一切皆文件是Linux(Unix)的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待,可以说在linux中一切看到的都可以当做是文件。

        2.自由开源

        可以自由使用(增删改),自由学习交流,自由发行

     这意味着:

         1. 你有自由以任何目的来运行该程序。
            2. 你有修改程序满足自己需求的自由。
            3. 你有权利重新发布副件,既可以白送也可以收取一定费用。
            4.你有权利发布该程序修改过的版本,从而让其他人得益于你的改进。

        3.单一程序

        每个程序都只完成一个简单的任务,所以完成一个复杂的任务则需要多个程序组成

        4.尽量避免与用户交互

        使用脚本来完成各种自动化任务

        5.使用文本保存配置信息

        既方便读又方便修改,是一个很棒的方式。

    4.linux系统上,命令使用格式

        linux命令的语法通用格式为:

        command [options] [arguments]

        命令:提示shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交内核分配资源然后运行。简单来说就是告诉操作系统要执行什么。

        命令类型有两种:

       1. 内置命令:由shell程序自带的命令,通过某命令形式提供。

        2.外部命令:独立的可执行程序文件,当前系统的某文件系统路径下有此可执行程序文件。(使用which或whereis查看文件位置)

        注:我们可以使用type [conmmand]来查看命令类型。

        options:可选的,选项是用来调整使用或者关闭命令的某个或某些功能。也就是命令执行的方式。

        选项有两中表现形式:

       1. 短选项:例如-c,-d,-r,多个短选项是可以合并的

        2.长选项:例如--help,不能合并

        arguments:命令的作用对象,即命令生效对象,想命令提供数据,有些命令的对象可以用多个,使用空格分开

    5.Linux基础命令

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

      shell程序是独特的程序,负责解析用户提供的命令;
      环境变量:
      PATH:从哪些路径中查找用户键入的命令字符串所对应的命令文件;

    [root@localhost ~]# echo "$PATH"
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

      查找次序:自左而右;

      查看命令类型:
      type COMMAND

    [root@localhost ~]# type ls
    ls 是 `ls --color=auto' 的别名
    [root@localhost ~]# type cat
    cat 是 /usr/bin/cat

    短选项:-C, 例如-l, -d
      注意:有些命令的选项没有-;
      如果同一命令同时使用多个短选项,多数可合并:-l -d = -ld
      长选项:--word, 例如--help, --human-readable
      注意:长选项不能合并;不同的命令的参数;有些命令可同时带多个参数,多个之间以空白字符分隔;例如:ls -ld /var /etc 。

        1.ifconfig,用来查看IP地址,MAC地址,收发包和丢包数目和错误包的个数等。

    [root@localhost ~]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.0.128  netmask 255.255.255.0  broadcast 192.168.0.255
            inet6 fe80::bc24:411:5420:a7b1  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:83:57:6c  txqueuelen 1000  (Ethernet)
            RX packets 209231  bytes 192665288 (183.7 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 89907  bytes 13673732 (13.0 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1  (Local Loopback)
            RX packets 461  bytes 32970 (32.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 461  bytes 32970 (32.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        2.echo,用来回显命令

    [root@localhost ~]# echo 'hello world'
    hello world
    

        3.tty,显示当前终端的文件名  

    [root@localhost ~]# tty
    /dev/pts/0
    

        4.startx, 开启图形化界面,最小化安装时无法打开图形化界面

        5.export,设置和显示环境变量,单独使用export可以查看当前系统下的环境变量 

       export [-fnp][变量名称]=[变量设置值]

        -f  代表[变量名称]中为函数名称。 
     -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 
     -p  列出所有的shell赋予程序的环境变量。
    在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。
     6.pwd,显示当前位置。

    [root@localhost ~]# pwd
    /root
    

        7.history,显示执行命令的历史信息,用户在登录系统时,会读取历史文件记录下的命令:~/.bash_history

     [root@localhost ~]# history 
        7  cd /opt
        8  ls
        9  su egon
       10  vim /etc/passwd
       11  vim /etc/group
       12  vim /opt/a.txt
       13  id egon
        ...
        1001  ifconfig
        1002  echo 'hello world'
        1003  tty
        1004  export
        1005  pwd
        1006  history 
    

      history的选项:

        -c:清除历史信息

        -n:显示最近的n行

        -a:将命令历史信息写到history_file文件中,默认会写到~/.bash_history下

        -r:读取histor_file的内容到当前的history

        -w:将目前的history内容写到history_file中

        -d:删除指定行的命令历史

        !编号:再次执行某一行的命令

        !!:执行上一条命令

      关于history,每次登陆用户时会读取隐藏文件.bash_history(即之前版本的命令的记录)。

    #~此时为root用户的家目录
    [root@localhost ~]# ls -a
    .  ..  anaconda-ks.cfg  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc

      history命令为当前的用户操作的命令历史(本次操作的命令暂存在内存中,使用-a可直接写入.bash_history文件中)。

    [root@localhost ~]# ls -a
    .  ..  anaconda-ks.cfg  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc
    。。。

       常用扩展为adc。

        8.shutdown,关机命令

        -c:将shutdown的命令取消,取消关机

        -H:停止设备

        -P:关闭电源

        -r:重启设备

        -h:将系统关机

        -k:只送出信息,但是不关机

        --no-wall:关机但是不送出任何信息

        注:poweroff(关闭电源),reboot(重启系统)

        9.hwclock,clock,显示或设定硬件时间

        -s, --hctosys:以硬件为准,把系统调整为与硬件时间相同;
        -w, --systohc:以系统为准,把硬件时间调整为与系统时钟相同;
        10.date,显示或者设定当前时间。
        date [OPTION] [+FORMAT]  Format是时间显示格式设定。
        查看时间
    [root@localhost ~]# date
    Thu Jul 13 12:53:16 EDT 2017
    

        设定时间:date 月日时分年。

    [root@localhost ~]# date 071400562017.30
    Fri Jul 14 00:56:30 EDT 2017
    

      11.whoami

      列出目前登陆Linux系统所使用的用户名

    [root@localhost ~]# whoami
    root
    

      12.who

      列出目前哪些用户在系统上工作。who命令的输出结果:显示当前登录的所有用户,以及当前的日期和时间。

    [root@localhost ~]# who
    root     tty1         2017-06-04 02:29
    root     pts/0        2017-08-28 02:05 (192.168.0.1)
    root     pts/1        2017-08-28 02:21 (192.168.0.1)
    root     pts/2        2017-09-01 03:15 (192.168.0.1)
    

      13.cal

      显示某月的日历。

    [root@localhost ~]# cal
       September 2017   
    Su Mo Tu We Th Fr Sa
                    1  2
     3  4  5  6  7  8  9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    

      如果具体要查看某一年的某个月可以使用命令为:cal 月 年

    [root@localhost ~]# cal 8 2017
         August 2017    
    Su Mo Tu We Th Fr Sa
           1  2  3  4  5
     6  7  8  9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
    

      14.clear

      快速清屏或者使用Ctrl+l

      15.su

      从当前的用户切换到另一个指定的其他用户。

    [root@localhost ~]# su - jeff
    Last login: Sun May 21 03:53:19 EDT 2017 on pts/0
    [jeff@localhost ~]$ su - root
    Password: 
    Last login: Fri Sep  1 03:25:59 EDT 2017 on pts/2

      16.ls

      -a,--all  显示目录下所有文件包括隐藏和.及..。

      -A 所有不包含.等。

      -l 显示元信息(长格式)

    [root@localhost ~]# ls -la
    总用量 32
    dr-xr-x---.  2 root root  151 3月  16 01:21 .
    dr-xr-xr-x. 17 root root  224 3月  15 19:32 ..
    -rw-------.  1 root root 1263 3月  15 19:32 anaconda-ks.cfg
    -rw-------.  1 root root  450 3月  15 22:48 .bash_history
    -rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
    -rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
    -rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
    -rw-r--r--.  1 root root  100 12月 29 2013 .cshrc
    -rw-------.  1 root root   42 3月  16 01:21 .lesshst
    -rw-r--r--.  1 root root  129 12月 29 2013 .tcshrc

      -h 人性化

    [root@localhost ~]# ls -lh
    总用量 4.0K
    -rw-------. 1 root root 1.3K 3月  15 19:32 anaconda-ks.cfg

      -d 显示文件自己的信息,而不显示文件里面的包含的信息

    [root@localhost ~]# ls -ld /etc
    drwxr-xr-x. 78 root root 8192 3月  15 22:49 /etc

      -r,--reverse 逆序排序显示

      17.stat获取文件元数据

    [root@localhost ~]# stat anaconda-ks.cfg 
      文件:"anaconda-ks.cfg"
      大小:1263          块:8          IO 块:4096   普通文件
    设备:fd00h/64768d    Inode:33574980    硬链接:1
    权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
    环境:system_u:object_r:admin_home_t:s0
    最近访问:2018-03-15 19:32:49.353046515 +0800
    最近更改:2018-03-15 19:32:49.356046516 +0800
    最近改动:2018-03-15 19:32:49.356046516 +0800
    创建时间:-

      18.cd:change directory
      cd [/PATH/TO/SOMEDIR]
      cd: 切换回家目录;
      注意:bash中, ~表示家目录;
      cd ~:切换回自己的家目录
      cd ~USERNAME:切换至指定用户的家目录;
      cd -:在上一次所在目录与当前目录之间来回切换;
      相关的环境变量
      $PWD:当前工作目录
      $OLDPWD:上一次的工作目录

    [root@izwz9bqngpatc008nw00e7z ~]# cd /etc/
    [root@izwz9bqngpatc008nw00e7z etc]# cd -
    /root
    [root@izwz9bqngpatc008nw00e7z ~]# cd -
    /etc
    [root@izwz9bqngpatc008nw00e7z etc]# echo $OLDPWD
    /root
    [root@izwz9bqngpatc008nw00e7z etc]# echo $OLDPWD
    /root
    [root@izwz9bqngpatc008nw00e7z etc]# echo $PWD
    /etc

      查看当前Linux版本并且关闭防火墙。

      查看当前Linux版本信息

    [root@localhost ~]# lsb_release -a
    LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
    Distributor ID:    CentOS
    Description:    CentOS Linux release 7.3.1611 (Core) 
    Release:    7.3.1611
    Codename:    Core

      没有lsb_release则需要yum安装

    确保防火墙处于关闭状态:
        ~]# iptables -L -n
    
    CentOS 7:
        ~]# systemctl disable firewalld.service
            ~]# systemctl stop firewalld.service
    CentOS 6~]# service iptables stop
            ~]# chkconfig iptables off

    basename与dirname

    [root@izwz9bqngpatc008nw00e7z ~]# basename /etc/sysconfig/network-scripts/ifcfg-lo 
    ifcfg-lo
    [root@izwz9bqngpatc008nw00e7z ~]# dirname /etc/sysconfig/network-scripts/ifcfg-lo 
    /etc/sysconfig/network-scripts

      通过file指令,我们得以辨识该文件的类型

    [root@localhost ~]# file install.log
    install.log: UTF-8 Unicode text
    
    [root@localhost ~]# file -b install.log      <== 不显示文件名称
    UTF-8 Unicode text
    
    [root@localhost ~]# file -i install.log      <== 显示MIME类别。
    install.log: text/plain; charset=utf-8
    
    [root@localhost ~]# file -b -i install.log
    text/plain; charset=utf-8

    6.命令帮助

        在linux中获取命令帮助的方式有:

        1.help command,一般内部命令可以使用help加命令可以获取命令帮助

        2.command --help,外部命令可以使用长选项--help来获取帮助

        3.info conmmand,获取命令的在线文档

        4.man[options][arguments],通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。

        -a:在所有的man帮助手册中搜索;

        -f:等价于whatis指令,显示给定关键字的简短描述信息;

        -P:指定内容时使用分页程序;

        -M:指定man手册搜索的路径。
        对于man的参数:数字指定从哪本man手册中搜索帮助(一般在man1到man8中); 关键字指定要搜索帮助的关键字。
        man的一般组成部分:

        (1)NAME:功能性说明

        (2)SYNOPSIS:语法格式

        (3)DESCRIPTION:描述信息

        (4)OPTION:选项

        (5)EXAMPLES:使用示例

        (6)AUTHOR:作者

        (7)BUGS:报告程序bug的方式

        (8)SEE ALSO:参考

      查看man文档时其实就是less,所以可以使用man less命令查看快捷操作,常用的快捷操作有:

      ctrl+f/F下一页,ctrl+b上一页,/字段 指定要搜索的字段,1G返回文档头部,G跳到文档底部。

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

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

    7.基础目录的命令法则和功用规定

        linux文件命名法则:

        1.文件名严格区分大小写

        2.文件可以使用除/以外任意字符

        3.文件名长度不能超过255字符

        4.以.开头的文件为隐藏文件

    在各种版本的linux发行版中,文件系统必要遵循FHS(Filesystem Hierarchy Standard,文件系统结构标准),它定义了一个发行版所必须有的文件目录和可选的文件目录

        linux发行版的命名法则及功用规定

         /bin:所有用户可用的基本命令程序文件(常用的可执行文件);

         /sbin:供系统管理使用的工具程序(系统的可执行文件);

         /boot:引导加载器必须用到的各静态文件:kernel,initramfs(initrd),grub等;

         /dev:存储特殊文件或设备文件:设备有两种类型:字符设备、块设备;

         /etc:系统程序的配置文件,只能为静态;

         /home:普通的家目录的集中位置,一般每个普通用户的家目录默认为此目录下与用户名同名的子目录:/home/jeff,家目录用来存放用户自己的文件或目录,root的家目录是/root;

         /lib:为系统启动或跟文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块等;

         /lib64:64位系统特有的存放64位共享库的路径;

         /media:便携式设备挂载点:cdrom,floppy等;

         /mnt:其它文件系统的临时挂载点,通常可移除式硬件会被挂载在/media或/mnt目录之下;

         /opt:附加应用程序的安装位置;可选路径;

         /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限;

         /usr:usr Hierarchy:全局共享的只读数据路径;

      绝对路径:必须以一个正斜线(/)开始。绝对路径包括从文件系统的根节点开始到要查找的对象(目录或文件)所必须遍历的每一个目录的名字,它是文件位置的完整路标,因此在任何情况下都可以使用绝对路径找到所需的文件。

      相对路径:不是以正斜线(/)开始,相对路径可以包含从当前目到要查找的对象(目录或文件)所必须遍历的每一个目录的名字。

  • 相关阅读:
    SQL Server 2008 R2——VC++ ADO 操作 多线程操作 代码结构
    SQL Server 2008 R2——VC++ ADO 操作 参数化查询
    SQL Server 2008 R2——VC++ ADO 操作 事务
    SQL Server 2008 R2——VC++ ADO 操作 存储过程
    SQL Server 2008 R2——开发资料搜集
    SQL Server 2008 R2——学习/练习/错误/总结/搜集
    CListCtrl中删除多个不连续的行
    C++基础——子类转父类转子类 (派生类转基类转派生类)
    魔改——MDI多视图模板Tab/标签页 初始化/操作控件
    魔改——MFC SDI程序 转换为 MDI程序
  • 原文地址:https://www.cnblogs.com/Jeffding/p/7143840.html
Copyright © 2020-2023  润新知