Linux基础知识一:

1、Unix的变种:

      BSD:FreeBSD、OpenBSD、NetBSD;

      SystemI SystemII SystemIII SystemIV SystemV等。

2、GNU:GNU is Not Unix,一个发布自由软件的组织。

3、GPL:(General Public License)通用公共许可证,其特征如下:

        1】软件的源代码可以任意地被下载、修改和重新向外发布。

        2】遵循GPL约定的程序在修改后必须反馈给GNU组织,而且必须将它的任何改变都开源出来。

   GPL现有三个版本:GPL、GPLv2、GPLv3。

4、LGPL:比较松散的GPL,即不使用带GPL约定的软件的源代码,只是通过接口来调用库,该些软件可以不开源。

5、Linux的发行商:将Linux的内核和各种GNU的软件在通用的架构上编译好,可以直接运行。

      1】Slackware,比较老的。

      2】RedHat(商业组织)

           Fedora,社区维护的个人版。

           CentOS(Community ENTerprise Operation System),社区维护的企业版Linux操作系统。

      3】SUSE(Novell收购了,Novell为商业组织)

           OpenSUSE(开源的)

      4】Debian(社区版)

           Ubuntu

           Mint(基于Ubuntu的)

      5】Gentoo(源代码发行的版本)

      6】LFS:Linux From Scratch(从零构建Linux)

6、GCC:GNU C Complier,GNU组织的C语言编译器。

7、redhat不同版本支持的平台架构:(可以到官网上去查:http://www.redhat.com),操作系统的选择跟硬件平台密切相关。

   redhat 5.0不支持的平台架构:arm,mips,Ultrasparc。原因是:redhat考虑到各种平台的稳定性,不会支持所有的平台,但Linux实际上是支持很多种平台架构的。

   redhat 6.0支持的平台架构:amd、 x86、x86-64、power、System Z、S/390等;

   redhat 4.0和5.0支持的平台架构:amd、x86-64、x86、power、System Z、S/390、Itanium等;

8、linux的CLI接口:bash,ksh,csh,tcsh,zsh。

   linux的GUI接口:Gnome,KDE。

9、控制台:

        物理控制台:PC架构上,只能有一个物理控制台,物理控制台是实现虚拟控制台的基础。

        虚拟控制台:redhat上默认有6个虚拟控制台,通过ctrl+alt+F1-6实现不同虚拟控制台的切换。/dev/tty1-6

        图形控制台:非第一次启动使用ctrl+alt+F7;# startx &:首次启动图形控制台,该种情况指的是GUI的Gnome接口;KDE首次启动图形界面用:# startkde &。

        模拟控制台(终端):在图形界面下打开的终端或者通过远程连接工具(例如Xshell)连接上的终端叫做模拟终端。/dev/pts#

   可以通过命令:" # tty "来查看该终端是何种终端。如果出现“/dev/pts/#”则表示连接的终端是模拟终端;如果出现“/dev/tty1-6”则表示是虚拟终端。

10、屏幕:同一个终端可以有多个屏幕。

    # screen :启动屏幕不同的屏幕。

11、Linux的哲学思想:

      1】一切皆文件;

      2】linux中充满了很多体积小,目的单一的小程序组成;当需要完成复杂任务的时候,要组合某些小程序来共同完成。

      3】尽可能避免捕获用户接口,即任何命令在执行的时候,不再和用户进行交互。

      4】通过配置文件保存程序的配置信息,而且配置文件通常是纯文本文件。

12、linux的特征:

      1】linux严格区分大小写;

      2】Linux不以文件名后缀判断文件类型。

      3】Linux中以“.”开头的是隐藏文件。

13、工作目录:当前目录;

    主目录:属于用户自己的,也叫用户的家目录;

14、现在的操作系统大都建立在文件系统基础上。

15、文件路径:操作系统上文件的组织方式。

16、# pwd 查看当前工作目录;(print work directory)

    # cd 切换到用户的家目录;(change directory)

    # cd ~用户名:切换到其他用户名的家目录中;

    # cd - :上一个目录与当前目录的来回切换;

17、命令提示符:

        #:管理员的命令提示符;

        $:普通用户的命令提示符;

18、[用户@主机名称 当前目录] 例如:[root@station51 student]。可以通过修改PS1变量来改变形式。通过# man bash 来查看相关选项。

19、# echo $SHELL:显示当前的shell是哪个shell。

20、# command [options] [arguments]

      options:选项,用来定义或者修正命令的执行方式;一般来说,选项使用横线引导;选项有两种:短选项,通常只有一个字符,使用一个横线来引导;长选项,通常是一个完整意义的单词或者单词组合,使用两个横线来引导。

      arguments:参数,是命令的作用对象。当不带参数的时候,意味着命令有默认作用对象。

21、# \ls :当命令前面加“\”表示执行的是命名本身,并不是命令的别名。

22、FHS:Linux的文件层次标准。

       /bin:非管理类的可执行命令,普通用户和管理员都可以使用的命令。

       /sbin:管理类的可执行命令,通常只有管理员可以使用。(通常放在/bin和/sbin目录下的文件是Linux为了启动和正常运行需要用的可执行文件。)

       /lib:存放的是系统级别的库文件。

       /etc:大多数可执行文件的配置文件的存放位置。

           /etc/sysconfig:通常存放的是服务的额外配置文件及网络设备相关配置文件。

           /etc/init.d/:通常存放的是服务的管理脚本。

       /usr:系统的资源存放位置,相当于windows中的program files。

            /usr/bin、/usr/sbin、/usr/etc、/usr/lib

            /usr/local:通常用来安装第三方软件的路径。

                /usr/local/bin、/usr/local/sbin、/usr/local/etc、/usr/local/lib

            /usr/include:存放头文件的目录。头文件是把别人声明的函数包含进当前程序。

       /boot:引导文件存放的目录。kernel、bootloader(即grub)都存放在该目录下。

       /dev:设备文件存放的目录;

       /home/username:用户的家目录;

       /root:管理员的家目录;(如果一个用户没有家目录,则登录操作系统后是处在根目录下,则该用户的私有信息就无处保存。)

       lost+found:表示一个分区,任何格式化成功的目录下面都有该目录,存放的是系统突然断电时那些来不及保存的文件,当下次开机重启后,从该目录里面找回。

       /media,/mnt:系统默认使用的挂载点目录。对Linux而言,任何一个存储设备要想被访问到,必须挂载到某一个已存在的目录下。

          /media:通常挂载的是便携式的设备;

          /mnt:通常挂载的是固定存储设备;

       /misc:杂项文件存放位置;

       /opt:可选目录,但有些第三方软件把此目录当做默认安装位置。

       /proc:伪目录,目录中的文件是假的,通常放的是内核相关信息的映射。

       /sys:伪目录,目录中的文件是假的,通常放的是类似磁盘这样的存储设备或某些总线设备的驱动程序相关属性信息。

       /srv:某些服务运行中中间文件的存放位置。

       /tmp:临时文件目录。

       /var:系统运行中所产生的数据和那些经常发生变化的文件的存放位置;

           /var/log:日志文件的存放位置。

           /var/run:每一个服务的Pid文件的存放位置。

           /var/mail:用户尚未收取的邮件队列。

23、用户:权限的集合,每一个用户拥有一个uid。用户存放在/etc/passwd。

          1】管理员:root用户。其id号为0。

          2】系统用户:该用户不需要登录,它是为系统上不属于任何用户的进程运行所使用的。其id号为1-499。       

          3】普通用户:其id号>=500且小于等于65535。

    进程:每一个进程的运行总是以某一个用户的身份来运行的,即该进程拥有该用户的权限。

    安全上下文:系统的运行是通过n个相互协调运行的进程实现的。

    密码:验证用户身份的凭证。/etc/shadow

    组:组是权限的容器。可以将某一个权限应用在组中的每一个用户。每一个组有一个gid。组存放在/etc/group。

          1】私有组:只有用户一个。也叫某一个用户的基本组。

          2】系统组:系统用户的组。

          3】公共组:可以同时包含多个用户。

    组密码:组密码保存在/etc/gshadow。

24、/etc/passwd中记录的格式: account:passwd:UID:GID:GECOS:directory:shell

25、当前系统的可用shell存放在:/etc/shells。

26、添加一个用户:# useradd 用户名;当添加一个用户的时候,系统会将目录/etc/skel里面的文件直接复制到用户的家目录下面去。/etc/skel里面存放的是用户的基本环境设置文件。

    用户自己更改个人密码:# passwd;

    管理员给用户改密码:# passwd 用户名;

27、su - 用户名:表示完全切换到某一个用户的家目录里面。

28、useradd命令背后所执行的命令和步骤:

      1)在/etc/passwd里面添加一个用户;

      2)在/etc/shadow里面添加该用户的密码,密码通过# openssl passwd -1 -salt 八位的盐 获得;

      3) 在/etc/group里面添加该用户的基本组;

      4)将/etc/skel里面的文件复制到用户的家目录下面,并递归修改这些文件的属主和属组;

29、useradd -u 用户名:指定uid;

            -g 用户名: 指定gid,此前提是指定的组事先一定要存在;

            -c "string":注释说明,即GECOS的内容;

            -d PATH:指定用户的加目录,此前提是用户的家目录事先不存在;

            -s SHELL:指定shell;

            -G group1,group2,group3……指定用户的附加组;

            -M 不创建家目录;

            -m 必须要创建家目录;

            -r 添加该用户为系统用户,系统用户不需要家目录,在/home下面没有该用户。

    useradd 创建用户的默认值是在文件/etc/default/useradd里。

    /etc/default/useradd里面的内容:GROUP,HOME,INACTIVE,EXPIRE,SHELL,SKEL,CREATE_MAIL_SPOOL。

   useadd -D (修改/etc/defualt/useradd文件中的默认值,即GROUP,HOME,INACTIVE,EXPIRE,SHELL,SKEL,CREATE_MAIL_SPOOL的值。)

              -b:改用户的家目录起始位置;

              -e:改超时时间;

              -f:改非活动时间,非活动时间即密码过期多长时间用户账号将被禁用。

              -g:改初始化gid;

              -s:改默认shell类型。       

30、/etc/group中的记录的格式:  组名:组passwd(此处为密码占位符):GID:以此组作为附加组的用户名称列表。

    /var/spool/mail/:该目录里面保存的是有邮筒的用户名。

31、定义命令的别名:alias 别名="command" 

    撤销别名:unalias 别名;撤销别名。

32、脚本的执行:1)通过# chmod+x 脚本名 ,赋予脚本执行权限,再在脚本所在的目录执行命令# 脚本名 即可。

                2)通过 bash命令,即在脚本所在的目录执行# bash 脚本名 即可。

33、规范脚本的写法:

     1)#!/bin/bash

        #description:

        #author:

        #date:

        #version:

        #options:

     2)注意缩进和注释;

34、写完脚本后,使用命令# bash -n 脚本名,来测试脚本有无语法错误。

35、脚本的执行流程主要由三种:选择、循环和顺序。

    bash脚本中循环的方式通常有三种:for,while,until。

    for循环用于指定循环次数已知的循环。

    while和until都是通过条件来限制循环的次数。

    bash脚本中for循环的格式如下:

for 变量 in 列表; do

   statement1

   statement2

   …………

done

如何定义for循环中的列表?

    1)简单列出,一个一个的,以空格隔开;

    2){1..10},表示从1到10;

    3)`seq  1 10`

36、使用命令# wc -l 文件名,可以查看该文件总共有多少行,包括空白行。

37、seq 命令:用来显示一串排列好的数字;

1)eg:# seq 2 7

2)eg:# seq -f %02g 2 7  (-f:定义seq显示出来的数字的格式。)

 eg: # seq -f %5.2f 23.1 33.1

eg: # seq -f %4.2f 23.1 -2 13

3)eg:# seq -s"@" 2 10 (-s:定义seq显示出来的数字以什么作为分隔符。)

4)eg:# seq -w 2 10 (-w:定义seq显示出来的数字有相同的宽度。)

5)eg: # seq 2 2 10 (一次步进2个单位。)

38、ping命令:# ping -c1 -W1 IP地址,ping一个IP地址,且只ping一次,等待1s。