Linux的哲学思想

 1;一切皆文件:

   把所有组资源统统抽象为文件形式;包括硬件设备,甚至通信接口等;open( ) ;read( );write( ); close( ); delete( ); create

 2; 有众多单一的程序组成  

组合小程序完成复杂任务    

 3;尽量避免跟用户交互;

目标:易于以编程的方式实现自动化任务  

 4; 使用文本文件保存配置信息;

完整的OS:

Kernel+Application 内核+应用

狭义上的OS: kernel

现在市面流行的linux全程GNU/Linux

  OS的接口类型主要有两种:

    GUI:Graphic User Interface 图形用户界面

       GNome:c, gtk  

   KDE: c++, qt

    CLI:Command Line Interface 命令行界面

      bash

zsh

sh

        ......   

操作系统的功能:

     驱动程序

     进程管理

     安全

     网络功能

     内存管理

     文件系统

     .......


API: Application Program Interface

   程序员面对的编程接口

  POSIX: Portable Operating System

ABI: Application Binary Interface

   程序应用者面对运行程序的接口

主流发行版 

    发行版是指由第三方将开源的kernel源码文件及GUN的开源Appliction源码文件编译成计算机可以执行的二进制文件并公开发行的版本。

    |-- Debian            

    |   |-- Knopix

    |   `-- Ubuntu  

    |       `-- mint

    |-- Redhat  

    |   |-- Fedora  

    |   `-- RHEL  

    |       `-- CentOS  

    `-- Slackware  

       `-- S.u.S.E

        |-- OpenSUSE

         `-- SLES

扩展:     

 RedHat:

 认证考试:

   RHCSA Red Hat Certified Engineer 红帽认证工程师

          RHCE 

   RHCA

各发行版本

Gentoo发行版

  Gentoo是一种Linux发行版。Gentoo有一个使用Python编写而成的软件包管理系统(Portage),能对BSD端口全面兼容,并对其进行管理。采用Portage软件包管理机制,是一种可以针对任何应用和需要而自动优化和定制的特殊的Linux发行版。

  Gentoo 最初由DanielRobbins(前StampedeLinux和FreeBSD的开发者之一)创建。由于开发者对FreeBSD的熟识,所以Gentoo拥有媲美FreeBSD的广受美誉的ports系统——portage。

  优点:高度的可定制性,完整的使用手册,媲美Ports的Portage系统,适合“臭美”的高手使用^^

  缺点:编译耗时多,安装缓慢

  软件包管理系统:Portage (SRC)

  openSUSE发行版

  SUSE是德国最著名的Linux发行版,在全世界范围中也享有较高的声誉。SUSE自主开发的软件包管理系统YaST也大受好评。SUSE于2003年年末被Novell收购。openSUSE是Novell 公司发行的企业级 Linux 产品的系统基础。openSUSE 成为 Linux黑客和应用软件开发者的首选平台。

  优点:专业,易用的YaST软件包管理系统

  缺点:FTP发布通常要比零售版晚1~3个月

  软件包管理系统:YaST (RPM), 第三方APT (RPM) 软件库(repository)

  Fedora发行版

  Fedora 项目是由 Red Hat 赞助,由开源社区与 Red Hat工程师合作开发的项目统称。由RedHat公司提供收费技术支持和更新的Red Hat EnterpriseLinux,以及由社区开发的免费的FedoraCore。Fedora Core1发布于2003年年末,而FC的定位便是桌面用户。

  优点:拥有数量庞大的用户,优秀的社区技术支持,许多创新

  缺点:免费版(Fedora Core)版本生命周期太短,多媒体支持不佳

  软件包管理系统:up2date (RPM), YUM (RPM)

  Slackware发行版

  Slackware由PatrickVolkerding创建于1992年。算起来应当是历史最悠久的Linux发行版。曾经Slackware非常的流行,但是当Linux越来越普及,用户的技术层面越来越广(更多的新手)后,Slackware渐渐的被新来的人们所遗忘。

  优点:非常稳定、安全,高度坚持UNIX的规范

  缺点:所有的配置均通过编辑文件来进行,自动硬件检测能力较差

  软件包管理系统:Slackware Package Management (TGZ)

  Debian发行版

  Debian 使用 Linux 核心(操作系统的最重要部份),但大部份的基本工具则来自 GNU计划,因此我们称为GNU/Linux。最早由Ian Murdock于1993年创建。Debian系统分为三个版本分支(branch):stable,testing 和 unstable。截至2005年5月,这三个版本分支分别对应的具体版本为:Woody, Sarge和Sid。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而Woody一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。

  优点:遵循GNU规范,100%免费,优秀的网络和社区资源,强大的apt-get

  缺点:安装相对不易,stable分支的软件极度过时

  软件包管理系统:APT (DEB)

Centos

  如果你通过一家网站主机托管公司来运营网站,那么你的网站服务器由CentOS Linux来运行的可能性很大。红帽企业级Linux(RHEL)的这种低成本克隆版并不是严格意义上的商用版,但是由于它基于RHEL,你可以充分利用它的商用支持功能。

  CentOS的全称是社区企业操作系统,它基本上是作为一个社区驱动的项目来运营的,使用RHEL代码,消除了红帽的所有商标,让Linux服务器操作系统可免费使用和发行。

2014年,红帽和CentOS宣布双方将展开合作,CentOS致力于消除面向社区创新的Fedora平台与商业部署的红帽企业级Linux平台之间的差距,任务重心发生了转变。

  CentOS会继续交付一款面向社区的操作系统,它的使命是帮助用户开发和采用开源技术,Linux服务器发行版比更注重创新的Fedora更加一致、更加保守。

与此同时,CentOS仍将免费,由社区领导的CentOS项目提供支持,而不是通过红帽提供支持。CentOS在2015年12月发布了CentOS 7.2,该版本源自红帽企业级Linux 7.2。


Stallman:

  自由含义:

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

软件程序:版本号;

  major.minor.release 主版本号.次版本号.发行版本号

  ~]# uname -r 查看内核版本号

发行版本也有自己的版本号:

  RHEL: 5.x, 6.x, 7.x

  Fedora 23

 Debian:8.x

  OpenSuSE: 13.x 


Linux基础:

  CPU架构:

x86        

x64 (amd64)

m68000, m68k   #摩托罗拉

arm

ultrasparc solaris

power aix

powerpc, ppc

MIPS

alpha hp-ux

...


linux授权方式

 双线授权:   

   Community:遵循开源协定;

   Enterprise:

程序的组成部分:

二进制程序;

配置文件;

库文件;

帮助文件;



安装虚拟机并安装操作系统:

  虚拟机选择vmware workstation  #推荐 

       virtualbox

  系统Centos 7.2

  具体安装方法就不在累述,网上有N多教程

在这里只强调网络模式,选择“桥接”即可。

  安装完成后即可登录

远程连接:

 ssh协议:secure shell

    ~]# ss -tnl

     查看系统是否监听于tcp协议的22号端口

    ~]# ip addr list 

    或 查看系统的IP地址

    ~]# ifconfig

   inet x.x.x.x

    确保防火墙处于关闭状态

   ~]# iptable -L -n

    ~]# iptables -L -n   

 查看当前防火墙运行的规则

   ~]# iptable -F   

  清理规则(仅对当前有效)

   (centOS 7版本)

     ~]# systemctl disable firewalld.service

       禁用防火墙

 ~]# systemctl stop firewalld.service 

  关闭防火墙

    (centOS 6版本)

 ~]# service iptable stop 

  停止服务

 ~]# chkconfig iptable off 

  防止以后自动启动,关闭防火墙

终端设备:terminal (键盘 显示器)

 多任务、多用户


 物理终端,控制台:console 

 虚拟终端: 默认6个    ~]#tty  命令可查看 

   切换快捷键: ctrl+Alt+F[1-6]


图形终端:

  CentOS 6 :

   Ctrl+Alt+F7

  CentOS 7:

   在哪一个终端启动,即位于哪个终端

  串行终端:  ttys

  伪终端  :  pty 

  远程或者 图形界面 console 的命令行模式

linux 的哲学思想之一:

  表现之一: 所有的硬件设备也通过文件来标识

物理终端: /dev/console  路径

虚拟终端: /dev/tty#     #[1-6]

串行终端: /dev/ttys#

伪终端  : /dev/pts/#

 PS:在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互

查看终端设备:

~]# tty

                  [root@192 ~]# tty

                  /dev/pts/1

查看接口程序:

~]# echo $SHELL   

                   [root@192 ~]# echo $SHELL

                  /bin/bas

启动GUI: 启动图形终端

在某一虚拟终端运行命令 startx & (第一次启动) &: 表示在后台运行


CLI 接口:

 命令行接口:

   [root@192 ~]#  xxx 

root : 当前登录的用户

192 :当前主机的主机名,非完整格式:此处完整应为192.168.1.100

 ~ :用户当前所在的目录(current directory) 也称为工作目录(working directory) 为相对路径

#  : 命令提示符;

  # : 代表管理员账号 root账号  拥有最高权限,能执行所有操作

  $ : 代表普通用户账号  非root 账号,不具有管理权限

 PS:生产环境建议使用非管理员账号登录,管理员权限太大,易造成误操作

需要管理操作时临时切换至管理员,操作完成即退回。

su - xx   #切换用户 

几个基础命令

 关机命令:

   CentOS 7:

        ~]# systemctl poweroff 

关机

  ~]# systemctl reboot

重启

       * : 

  ~]# poweroff 

  ~]# halt 

关机

  ~]# reboot


文件

 目录:路径映射

 文件:有边界的 在磁盘上的一段数据流,存储空间存储的一段流式数据

 对数据可以做到按名存取。

 文件系统:层级结构;   有索引。

     /: 原初起点。  根目录

     倒置树状结构

     /dev/pst/0

 最左侧/: 是根目录

 其余/: 为路径的分割符

         linux的路径分隔符是/

    windows 是\

 文件的路径表示

     绝对路径: 从根开始表示的路径

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

  文件名使用法则:

严格区分字符大小写:

目录也是文件,在同一个路径下,两个文件不能同名:

文件名支持使用除了 / 以外的任意字符:

     最长不能超过255 字符:



/etc/sysconfig/network-scripts/ifcf-eno16777736

basename: 最右侧为基名

dirname:   basename 左侧的路径


[root@192 ~]# basename /etc/sysconfig/network-scripts/ifcfg-eno16777736 

ifcfg-eno16777736

     查看基名

[root@192 ~]# dirname /etc/sysconfig/network-scripts/ifcfg-eno16777736

/etc/sysconfig/network-scripts

dirname 路径


命令:

  ~]# basename /PATH/TO/SOMEFILE

    SOMEFILE

  ~]# dirname /PATH/TO/SOMEFILE

    /PAHT/TO

 

程序的组成部分:

 二进制程序文件。库文件、配置文件、帮助文件

   二进制、库文件; 可执行文件

    库文件:不能独立执行,只能被调用时执行

    配置文件。帮助文件: 可被查看其内容的文件

Linux基础知识

  命令的通用格式

    # COMMAND OPTIONS ARGUMENTS   #命令 选项 参数

     

      COMMADN

  发起一个命令: 请求内核将某个二进制程序运行为一个进程

程序--> 进程

静态--> 动态 (有生命周期)


命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件

多数程序文件都存放在: /bin ,/sbin ,/usr/bin ,/usr/sbin ,/usr/local/bin ,/usr/local/sbin


普通命令:/bin, /usr/bin ,/usr/local/bin

管理命令 :/sbin /usr/sbin ,/usr/local/sbin

     共享库: /lib ,/lib64 ,/usr/lib ,/usr/lib64 ,/usr/local/lib ,/usr/local/lib64

 32bits的库: /lib ; /usr/lib ;/usr/local/lib

 64bits的库: /lib64 ; /usr/bin64 ; /usr/local/lib64


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

命令必须遵循特定格式规范: exe ,msi , ELF (Linux)

    ~]# file /bin/ls  

    file 查看文件的类型


命令分为两类:

  由shell 程序自带的命令: 内置命令(builtin)


  独立的可执行程序文件,文件名即命令名 :外部命令

    shell 程序是独特的程序,负责解析用户提供的命令:


环境变量:

   PATH : 从哪些路径中查找用户键入的命令字符串所对应的命令文件

   [root@192 ~]# echo $PATH

   /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

查看命令类型:

 type COMMAND 

[root@192 ~]# type type

type 是 shell 内嵌


OPTIONS :  选项

  指明命令的运行特性:


  选项有两种表现形式:

     短选线: -c , -l ,-d

  注意:有些命令的选项没有 -;

  如果同一命令同时使用多个短选项,多数可以合并; -l -d  = -ld;

长选项: --word .例如:  --help, --human

  长选项不能合并

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

ARGUMENTS : 参数

  命令的作用对象: 命令对什么生效   

  不同的命令参数,有些命令可以带多个参数,多个参数之间用空白字符分割。



获取命令的帮助:

  内部的命令:

    help COMMAND  #查看命令类型参考上文type命令


  外部命令:

   (1)命令自带的简要格式的使用帮助

 #COMMAND --help

  (2)使用手册:manual 

 路径:/usr/share/man

      

 # man COMMAND


  SECTION :

name : 命令的功能行说明

SYNOPTION :语法结构

DESCRIPTION:描述

OPTION:选项

EXAMPLES:使用示例

     AUTHR:作者

...


 SYNOPSIS:

[]:可选内容

<>: 必给内容

a|b|c:多选一

...:同类内容可出现多个



使用手册:gz 格式 压缩格式的文件,有章节之分:

   /usr/share/man

     man1. man2 ,man3....

       1; 用户命令。 管理员和普通用户命令

  2: 系统调用。 一般为开发人员使用

  3: C库调用

  4: 设备文件及特殊文件

  5: 文件格式:(配置文件格式)

  6: 游戏使用帮助

  7: 杂项

  8: 管理工具及守护进程  (主要为管理员)


  指定man 章节

    ~]# man CHAPTER COMMAND

     例:[root@192 ~]# man 5 passwd  # 查看第五章节下的passwd说明

 查看哪些章节下有该命令的说明:

~]# whatis COMMAND    

 例:[root@192 ~]# whatis passwd

sslpasswd (1ssl)     - compute password hashes

passwd (1)           - update user's authentication tokens

passwd (5)           - password file

 PS:其执行过程是查询数据库进行的(新安装软件后可能无法查询)

手动更新数据库:

   ~]#makewhatis 

man命令打开后的操作方法:

翻屏:

   空格键: 向文件尾部翻一屏

   B     : 向文件首部翻一屏

   CTRL+D: 向文件尾部翻半屏

   CTRL+U: 向文件首部翻半屏

   回车键: 向文件尾部翻一行

   K  :  向文件首部翻一行

   G   :  跳转至最后一行

#G    : 跳转至指定行

1G    : 跳转至首行

 文本搜索:

/keyword :从文件首部向文件尾部依次查找;不区分大小写

    ?keywoed :从文件尾部向文件首部依次查找

        n:与查找命令方向相反

  N:与查找命令方向相反

    退出:

  q:quit  退出

    选项:

 -M /PATH/TO/SOMEFILE : 到指定目录下查找命令手册并打开;


 ~]# man -M /usr/xx/xx


(3)info COMMAND

   获取命令的在线文档:

    (4)很多应用程序会自带帮助文档:/usr/share/doc/APP-VERSION

REDAME: 程序的相关信息

INSTALL: 安装帮助

CHANGELOG: 版本迭代时的改动信息:


(5)主流发行版本官方文档

  http://www.redhat.com/doc


(6)程序官方的文档:

  官方站点上的“Document”


 (7) 搜索引擎

常用命令:

pwd: printing working directory

显示工作目录


cd:change directory

cd [/PATH/TO/SOMEDIR]

cd: 切换回家目录;

注意:bash中, ~表示家目录;

cd ~:切换回自己的家目录

cd ~USERNAME:切换至指定用户的家目录;

cd -:在上一次所在目录与当前目录之间来回切换;

相关的环境变量

$PWD:当前工作目录

$OLDPWD:上一次的工作目录


.

..


ls: list, 列出指定目录下的内容

ls [OPTION]... [FILE]...


-a: 显示所有文件,包括隐藏文件;

-A:显示除.和..之外的所有文件;

-l: --long, 长格式列表,即显示文件的详细属性信息;

-rw-r--r--. 1 root   root     8957 10月 14 19:34 boot.log

-:文件类型,-, d, b, c, l, s, p

rw-r--r--

 rw-:文件属主的权限;

 r--:文件属组的权限;

 r--:其它用户(非属主、属组)的权限;

1:数字表示文件被硬链接的次数;

root:文件的属主;

root:文件的属组;

8957:数字表示文件的大小,单位是字节;

10月 14 19:34 :文件最近一次被修改的时间;

boot.log:文件名

-h, --human-readable:对文件大小单位换算;换算后结果可能会非精确值;

-d:查看目录自身而非其内部的文件列表;

-r: reverse, 逆序显示;

-R: recursive,递归显示;


cat:concatenate

文件文本查看工具;

cat /etc/fstab

cat /etc/passwd


cat [OPTION]... [FILE]...

-n:给显示的文本行编号;

-E: 显示行结束符$;


tac:

文件文本查看工具;

tac /etc/fstab

tac /etc/passwd


tac [OPTION]... [FILE]...

-n:给显示的文本行编号;

-E: 显示行结束符$;


file:查看文件内容类型;

file [FILE]...


echo:回显

echo [SHORT-OPTION]... [STRING]...

-n: 不进行换行;

-e:让转义符生效;

\n:换行

\t:制表符


STRING可以使用引号,单引号和双引号均可用;

单引号:强引用,变量引用不执行替换;

~]# echo '$SHELL'

双引号:弱引用,变量引用会被替换;

~]# echo "$SHELL"


注意:变量引用的正规符号

${name}


关机或重启命令:shutdown

shutdown [OPTIONS...] [TIME] [WALL...]

OPTIONS:

-h: halt

-r:reboot

-c:cancel


data : #查询或设置系统时钟

SYNOPSIS:date [OPTION]... [+FORMAT]


例:[root@192 ~]# date 022001011991.01

1991年 02月 20日 星期三 01:01:01 CST

     #FORMAT:格式符

%F 完整日期格式,等价于 %Y-%m-%d

%T 时间,等于%H:%M:%S

%Y  年份

%m  日期-月

%d  日期-日

%H  时间=小时

%M  时间-分 

%S  秒

%s: 从1970年1月1号(unix元年)0点0分0秒到命令执行那一刻经过的秒数;

...


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

                    月-天-小时-分-年.秒


hwclock: query or set the hardware clock (RTC)  #查询或设置硬件时钟

SYNOPSIS: hwclock [function] [option...]

            例:[root@192 ~]# date

  1991年 02月 20日 星期三 05:02:12 CST

  [root@192 ~]# hwclock -s      #以硬件时间为准,将系统时间调整与硬件时间相同

  [root@192 ~]# date

  2016年 12月 28日 星期三 01:12:29 CST


#显示或设定硬件时钟

 -s, --hctosys:以硬件为准,把系统调整为与硬件时间相同;

 -w, --systohc:以系统为准,把硬件时间调整为与系统时钟相同;