LINUX入门知识

LINUX入门知识

  • 计算机与操作系统简介
    • 计算机组成及其功能
    • 操作系统的功能
    • 完整的操作系统
    • 操作系统的接口有两类
    • API接口和ABI接口
    • CPU架构介绍
    • 学LINUX前必备知识冯诺依谩体系
  • LINUX及IT领域架构体系
  • LINUX的由来
  • LINUX的发行版本
  • 开源闭源协议
  • 安装LINUX
  • LINUX系统组成
    • 程序管理
    • 用户界面
    • 终端terminal
    • 远程连接
    • 命令行接口
    • 目录结构
  • LINUX哲学思想
  • 基础命令使用
    • 命令的语法通用格式
    • 命令的使用帮助
    • 几个基础命令
    • 常用命令
  • LINUX系统结构图
  • LINUX文件系统
  • LINUX系统上的文件类型
  • 基本命令
  • bash的基础特性
  • 目录管理类命令
  • 文件查看类命令
  • 文件管理工具
  • LINUX系统变量基础

计算机与操作系统简介

计算机组成及其功能

  • ENIARC:埃尼阿克,世界上第一台通用计算机,诞生于1946年美国宾夕法尼亚大学;
  • 冯诺依曼体系-计算机五大基础部件:运算器、控制器、存储器、输入设备、输出设备;

LINUX入门知识_第1张图片

  • CPU:运算器、控制器、内部存储器(寄存器、缓存);

  • 存储器:分主存储器(内存)和辅助存储器(外存);内存RAM(Random Access
    Memory),仅仅用于存放当前正在运行的程序和数据,断电后数据消失。外存,通常指磁盘、光盘等,能长期保存数据信息;

  • 输入设备:下指令,提供数据等(鼠标、键盘等);

  • 输出设备:输出数据加工后的结果(显示器等);

  • 最小存储单元Cell:1 Bytes=8 bits

  • 程序:
    指令 + 数据
    算法 + 数据结构

  • CPU寻址能力:
    32位CPU只能使用最多4G的内存,计算方法:
    232 = 210 * 210 * 210 * 22
    = 1024 * 1024 * 1024 * 4 = 4294967296(Bytes)
    = 1024 * 1024 * 4 = 4194304(KB)
    = 1024 * 4 = 4096(MB)
    = 4(GB)

  • 过程式编程语言:
    顺序执行:依次;
    循环执行:将整个循环体执行n次;
    选择执行:仅执行其中的一个分支;

操作系统的功能

驱动程序
进程管理
安全
网络功能
内存管理
文件系统

完整的操作系统

Kernel+Application
狭义上的OS: kernel
GNU/Linux

操作系统的接口有两类

GUI: Graphic User Interface
  GNome: c, gtk
  KDE: c++, qt
CLI: Command Line Interface
  bash
  zsh
  sh
  csh
  tcsh
  ksh

API接口和ABI接口

API:
 Application Program Interface
 程序员面对的编程接口
 POSIX: Portable Operating System
ABI:
 Application Binary Interface
 程序应用者面对运行程序的接口

CPU架构介绍

CPU架构:
    X86
    X64(amd64)
    m68000, m68k
    arm
    ultrasparc
    power
    powerpc, ppc
    MIPS
    alpha hp-ux
    …
移植:portable
cross compile: 交叉编译
  在x64机器上编译的程序,编译时可以指定编译后的程序是运行在什么机器上,如指定arm机器,那就编译成能在arm 机器上运行的汇编程序,然后再由汇编器编译成机器语言供机器运行。

学LINUX前必备知识冯诺依谩体系

  1. 总线(BUS)包括以下两种,为避免结构更复杂这两组总线是合并起来复用的,即可读数据也可读指令
    数据总线:CPU从内存读取数据的总线
    指令总线:CPU从内存读取指令的总线

  2. 前端总线:指CPU用来和内存交换数据的总线

  3. 带宽:

  4. 频率:单位时间内的变化量

  5. CPU主频

  6. CPU外频

  7. 微码:汇编语言

  8. 程序:就是能被CPU识别自动装入并能自动的运行起来

  9. CPU:运算器、控制器、寄存器

  10. 输入设备:穿孔纸带(8位,打孔表示1,不打孔表示0)

  11. 北桥:高速总线的连接设备,连接CPU和内存间的总线,用于CPU与内存进行数据传输

  12. 南桥:连接所有慢带设备(如键盘、鼠标等),汇总后统一连接到北桥

  13. 中断控制器: 用来随时接收外部设备的命令
    LINUX入门知识_第2张图片

  14. 批处理、脱机批处理

LINUX及IT领域架构体系

Linux入门:
Linux系统管理:
Linux服务及安全管理:
  httpd, lamp, lnmp
  Cache: memcached, varnish
  DB: mysql (mariadb)
Linux Cluster:
  LB Cluster: Nginx, LVS
  HA Cluster: Keepalived
Linux Ops: ansible
Monitoring: zabbix
shell脚本编程
http:
  tomcat, lnmt, lamt, session replication cluster
  分布式存储系统:
    MogileFS, GlusterFS
  LB Cluster: haproxy
  HA Cluster: Corosync+Pacemaker, pcs/crmsh
  MySQL: HA Cluster、MHA、备份和恢复、MySQL Replaction、Read-Write splitting
  NoSQL: redis, mongodb, HBase
  运维工具:puppet [saltstack], cobbler
  虚拟化:
    Linux操作系统原理:虚拟化技术原理:
    kvm虚拟化应用详解:xen虚拟化:
    虚拟化网络:SDN
    OpenStack云栈
  Docker: 容器云:
  ELK Stack: ElasticSearch, Logstash, Kibana
  大数据:Hadoop v2, 并行存储及分析平台:
      HBase, Hive
      Storm, Spark
  系统优化:
  Python编程

RedHat:
  认证考试:
    RHCSA
    RHCE
    RHCA

学习阶段:
  教室学习:4个月;
  工作学习:8个月,14个月;

IT技术领域:
  研发:
    硬件:接口;
      CPU(运算器和控制器),内存,输入,输出
        冯 诺依曼
      机器语言:二进制语言,二进制数据
    软件:
      低级语言:汇编语言,汇编器
        写驱动;
      高级语言:编译器
        系统级:C, C++,
          操作系统,对性能要求较高的软件
        应用级:JAVA,Python, ruby
          应用程序:snsible, puppet, …

程序员写的程序代码:编程语言;
  应用:
    Linux运维:Linux生态圈中的各种应用程序的应用;
    shell脚本编程:让某些应用工作能自动完成;
    Python:专业编程语言;
      ansible, openstack

DevOps:
      Development
      Operations

LINUX的由来

  • 60年代未70年代初,3家公司联合:GE,MIT(麻省理工学院)人工智能实验室,AT&T(电话电报公司)(Bell实验室),研发可以让多个人一起做事情的,multics(69-71)迷失,GE和Bell退出,但Bell的工程师很依赖了这种了
  • 1974年 Unice -> Bell -> AT&T
  • 1976年 ken(Berkeley) BSD

LINUX的发行版本

GNU:
  源码: 编译成为二进制格式
      gcc, glibc, vi, linux
  发行版:数百种之多;
      Debian
        ubuntu
          mint
        knopix
      Slackware
        S.u.S.E
          SLES
          OpenSUSE
      RedHat:
        Redhat 9.0:
          RedHat Enterprise Linux: RHEL
            CentOS: Community ENTerprise OS
          Fedora Core: 6个月,
      Gentoo
      ArchLinux
  软件程序:版本号:
    major.minor.release
      Linux: 0.99, 2.2, 2.4, 2.6, 3.0, 4.0
        www.kernel.org
  发行版本也有自己的版本号:
    RHEL: 5.x, 6.x, 7.x
    Debian: 8.x
    OpenSuSE: 13.x

开源闭源协议

Stallman: GNU
    闭源:
    开源:提供源代码
       开源协定:
        GPL: General Public License
           copyrigth, copyleft
           LGPL: Lesser GPL
           GPLv2, GPLv3
          FSF: Free
        BSD:
        Apache:
          ASF: Apache Software Foundation
      双线授权:
        Community: 循开源协定;
        Enterprise:
  stallman:
    自由含义:自由学习和修改;自由使用;自由分发;自由创建衍生版;
  开源协定:GPL, LGPL, BSD, Apache
  BSD:
      1. 如果二次发布的产品中包含源代码,则在源代码中必须带有原来的代码中的BSD协定;
      2. 如果二次发布的产品是二进制格式的库或程序,需要在发布的文档或版权声明中说明包含原来代码中的BSD协定;
      3. 不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广;
    开源是代码的共产主义运动;
  程序的组成部份:二进制程序文件、库文件、配置文件、帮助文件;
    二进制程序文件、库文件:可执行文件
      库文件:不能独立执行,只能被调用执行;
    配置文件、帮助文件:可被查看其内容的文件

安装LINUX

安装Linux:
  虚拟机:Linux
  计算机:CPU, 内存,IO
  虚拟化软件程序:
      vmware workstation
      virtualbox
  CentOS的镜像站点:
      http://mirrors.aliyun.com
      http://mirrors.163.com
      http://mirrors.sohu.com
  在教室安装的系统:
      Cobbler:
        硬盘大小:120G
        网卡:桥接
      管理员:root/mageedu
  ISO镜像:
      硬盘分区:留出一些空间,实在不成,可安装完成以后新增一块虚拟硬盘;
      CentOS6和CentOS7的区别还是有一点的;

LINUX系统组成

程序管理

程序的组成部份:
    二进制程序;
    配置文件;
    库文件;
    帮助文件;
  X, Y, Z
    
  程序包管理器:
    X:
      程序的组成文件打包成一个或有限几个文件;
      安装;
      卸载;
      查询;
      
  Debian: deb, apt-get
  RedHat: rpm, yum --> dnf
  S.u.S.E: rpm, zypper
  ArchLinux: port
  Gentoo:
  LFS: Linux From Scratch
  Kali:

用户界面

GUI:
  GNome
  KDE
CLI:
  bash, zsh, sh, csh, tcsh, ksh
  查看所用shell的类型:
    ~]# echo $SHELL

终端terminal

终端设备:terminal
    多任务、多用户
    物理终端:控制台:console
    虚拟终端:6个,tty
      Ctrl+Alt+F[1-6]
    图形终端:
      CentOS 6:
        Ctrl+Alt+F7
      CentOS 7:
        在哪个虚拟终端启动,即位于哪个虚拟终端;
    串行终端:ttys
    伪终端:pty

注意:在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互;
    查看终端设备:
      ~]# tty
    查看接口程序:
      ~]# echo $SHELL
    启动GUI:
      在某一虚拟终端接口运行命令:startx &

远程连接

ssh协议:secure shell;
  ~]# ss -tnl
    查看系统是否监听于tcp协议的22号端口;
  ~]# ip addr list
  或
  ~]# ifconfig
    查看IP地址
    
  确保防火墙处于关闭状态:
    ~]# iptables -L -n
    CentOS 7:
      ~]# systemctl disable firewalld.service
      ~]# systemctl stop firewalld.service
    CentOS 6:
      ~]# service iptables stop
      ~]# chkconfig iptables off

命令行接口

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

目录结构

思考:文件是什么?众多文件如何有效组织起来?
目录:路径映射;
文件:存储空间存储的一段流式数据,对数据可以做到按名存取;
文件系统:层次结构,有索引;
    /: 原初起点;
      倒置树状结构;
      /dev/pts/2;
        最左侧/: 表示根目录;
        其它的/: 表示路径分隔符
          Linux的路径分隔符是/
          Windows的路径分隔符是\
    文件的路径表示:
      绝对路径:从根目录开始表示的路径;
      相对路径:从当前位置开始表示出的路径;
    文件名使用法则:
      文件名严格区分大小写;
      目录也是文件,在同一路径下两个文件不能重名;
      支持除/符号外的所有字符作为文件名;
      文件名最长不能超过255字符;
      以.开头的文件件为隐藏文件;
        .: 当前目录;
        …: 当前目录的上一级目录;
          /etc/sysconfig/
            .: /etc/sysconfig
            …: /etc
    用户有家目录:home
      用户的起始目录,普通用户管理文件的位置;
    工作目录:
      /etc/sysconfig/network-scripts/ifcfg-eno16777736
        basename: 最右侧的文件或目录名;
        dirname: basename左侧的路径;
      命令:
        ~]# basename /etc/aa/bb/2.txt
          2.txt
        ~]# dirname /etc/aa/bb/2.txt
          /etc/aa/bb

LINUX哲学思想

1、一切皆文件:
    把几乎所有资源抽象为文件形式:包括硬件设备,甚至通信接口等;  
    open(), read(), write(), close(), delete(), create()
    表现之一:硬件设备也通过文件表示:
      物理终端:/dev/console
      虚拟终端:/dev/tty# [1,6]
      串行终端:/dev/ttyS#
      伪终端:/dev/pts/#
2、由众多功能单一的程序组成,一个程序只做一件事,并且做好;
    组合小程序完成复杂任务;
3、尽量避免跟用户交互:
    目标:易于以编程的方式实现自动化任务;
4、使用文本文件保存配置信息;

基础命令使用

命令的语法通用格式

命令的语法通用格式:
  ~]# COMMAND OPTIONS ARGUMENTS
    发起-命令:请求内核将某个二进制文件运行为一个进程;
    程序 --> 进程
    静态 --> 动态(有生命周期)
  COMMAND
    命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件;
    多数系统程序文件都存放在:/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/lib64, /usr/local/lib64
      注:并非所有的命令都有一个在某目录与之对应的可执行程序文件;
    命令必须遵循特定格式规范:exe, msi, ELF(Linux)
      ~]# file /bin/ls
    命令分为两类:
      内置命令(builtin):由shell程序自带的命令;
      外部命令:独立的可执行程序文件,文件名即命令名;
    shell程序是独特的程序,负责解析用户提供的命令;
      环境变量:
        PATH: 从哪些路径中查找用户键入的命令字符串所对应的命令文件(查找次序自左向右);
        ~]# echo $PATH
    查看命令类型:
        type COMMAND
        
  OPTIONS:
      指定命令的运行特性;
      选项有两种表现形式:
        短选项:-C, 例如:-l -d
          注意:有些命令的选项没有
          如果同一命令同时使用多个短选项,多数可合并:-l -d = -ld
        长选项:–word, 例如:–help, --human --readable
          注意:长选项不能合并;
          
  ARGUMENTS:
    命令的作用对象,命令对什么生效;
    注意:不同命令的参数:有些命令可同时带多个对象,多个之间以空白字符分隔;
    例如:ls -ld /var /etc

命令的使用帮助

获取命令的使用帮助:
  内部命令:
    ~]# help COMMAND
  外部命令:
    (1) 命令自带简要格式的帮助
      ~]# COMMAND --help
    (2) 使用手册:manual
      位置:/usr/share/man
      ~]# man COMMAND
  
      SECTION:
        NAME: 功能性说明
        SYNOPSIS: 语法格式
        DESCRIPTION: 描述
        OPTIONS: 选项
        EXAMPLES: 使用示例
        AUTHOR: 作者
        BUGS: 报告程序bug的方式
        SEE ALSO: 参考
        …
      SYNOPSIS:
        []: 可选内容
        <>: 必须提供的内容
        a|b|c: 多选一
        …: 同类内容可出现多个
    使用手册:压缩格式的文件,有章节之分:
      /usr/share/man
        man1, man2, man3, man4, …
        1:用户命令;
        2:系统调用;
        3:C库调用;
        4:设备文件及特殊文件;
        5:文件格式:(配置文件格式)
        6:游戏使用帮助;
        7:杂项;
        8:管理工具及守护进程;
        
     ~]# man CHAPTER COMMAND
        注意:并非每个COMMAND在所有章节下都有手册;
          查看COMMAND在哪些章节下有手册:
            ~]# whatis COMMAND
            注意:其执行过程是查询数据库进行的;
               手动更新数据库:
                 ~]# makewhatis
                 
    man命令找开手册以后的操作方法:
      翻屏:
        空格键:向文件尾部翻一屏;
        b:向文件首部翻一屏;
        Ctrl+d: 向文件尾部翻半屏;
        Ctrl+u: 向文件首部翻半屏;
        回车:向文件尾部翻一行;
        k: 向文件首部翻一行;
        G: 跳转至最后一行;
        1G: 跳转至文件首部;
        #G: 跳转至指定行;
      文本搜索:
        /keyword: 从文件首部向文件尾部依次查找,不区分字符大小写;
        ?keyword: 从文件尾部向文件首部依次查找;
          n: 与查找命令方向相同;
          N: 与查找命令方向相反;
          
      退出:
        q: quit;
        
      选项:
        -M /PATH/TO/SOMEDIR: 到指定目录下查找命令手册并打开之;
        
      练习:获取useradd命令的用法
        (1) 添加用户gentoo;
          ~]# useradd gentoo
          ~]# id gentoo
        (2) 添加用户slackwark, 要求指定其所用的shell为/bin/tcsh;
          ~]# useradd -s /bin/tcsh slackwark
          ~]# id slackwark
          ~]# tail -1 /etc/passwd
    (3) info COMMAND
      获取命令在线文档
    (4) 很多应用程序会自带帮助文档: /usr/share/doc/APP-VERSION
      README: 程序的相关的信息;
      INSTALL: 安装帮助;
      CHANGES: 版本迭代时的帮助信息;
    (5) 主流发生版本官方文档
      http://www.readHat.com/doc
    (6) 程序官方文档
      官方站点上的"Document"
    (7) 搜索引擎
      google
        keyword filetype:pdf
        keyword site:domain.tld
        …

几个基础命令

tty: 查看当前的终端设备;
ifconfig或ip addr list: 查看活动接口的ip地址;
echo: 回显
ping: 探测网络的目标主机与当前主机之间的连通性;
Ctrl+c: 终止命令执行;
关机命令:
  CentOS 7:
    ~]# systemctl poweroff
    ~]# systemctl reboot
  *:
    ~]# poweroff
    ~]# halt
    ~]# reboot
which: 查看命令路径
  ~]# which ls

常用命令

工作目录:working directory
家目录:home
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 /etc/fstab /etc/passwd
  cat [OPTION]… [FILE]…
    -n: 给显示的文件行编号(若显示多个文件也是统一编号,没有按文件的行进行编号);
    -E: 显示行结束符;

tac
  文本文件查看工具(逆序显示文件内容)
    ~]# tac /etc/fstab
    ~]# tac /etc/passwd
    ~]# tac /etc/fstab /etc/passwd
  tac [OPTION]… [FILE]…
    -n: 给显示的文件行编号(若显示多个文件也是统一编号,没有按文件的行进行编号);
    -E: 显示行结束符;

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

echo: 回显
  echo [SHORT-OPTION]… [STRING]…
    -n: 不进行换行操作;
    -e: 让转义符生效;
      \n: 换行
      \t: 制表符
      \r: 回车符
      \b: 删除前一个字符
    STRING可以使用引号,单引号和双引号均可用;
      单引号:强引用,变量引用不执行替换;
        ~]# echo 'KaTeX parse error: Expected 'EOF', got '#' at position 44: …替换;         ~]#̲ echo "SHELL"
  注意:变量引用的正规符号
    ${name}

关机或重启命令:shutdown
  shutdown [OPTIONS…] [TIME] [WALL…]
    OPTIONS:
      -h: halt
      -p: poweroff
      -r: reboot
      -c: cancel
    TIME:
      now: 马上执行相关操作
      hh:mm: 指定时间执行相关操作
      +m: 指定分钟数后执行相关操作
    WALL:
      发信息给所有终端
      ~]# shutdown -r +10 ‘hello everyone’ -WALL

日期的相关命令:
  Linux: 系统启动时从硬件读取日期和时间信息,读取完成后就不再与硬件相关联;
    系统时钟
    硬件时钟
  date: 系统时钟
    显示日期时间:date [OPTION]… [+FORMAT]
      FORMAT: 格式符
        %F: 显示年月日(2020-03-01)
        %T: 显示时分秒(10:17:44)
        %Y: 显示年份
        %m: 显示月份
        %d: 显示天数
        %H
        %M
        %S
        %s: 从1970年1月1号(unix元年)0点0分0秒到命令执行那一刻经过的秒数;
        …
    设定日期时间:date [MMDDhhmm[[CC]YY][.ss]]
      ~]# date 022813592019.59
  hwclock, clock: 硬件时钟
    显示或设定硬件时钟
      -s, --hctosys: 以硬件为准,把系统时间调整为与硬件时间相同;
      -w --systohc: 以系统为准,把硬件时间调整为与系统时间相同;
  cal: 日历
    cal [[month] year]
  课外作业:
    which, whereis, who, w

LINUX系统结构图

LINUX入门知识_第3张图片

LINUX文件系统

Linux: glibc

程序编译方式:
  动态链接
  静态编译

进程的类型:
  终端:硬件设备,关联一个用户接口
  与终端相关:通过终端启动
  与终端无关:操作系统引导启动过程当中自动启动

操作系统的组成:
  静态:kernel, application
  文件系统:层级结构

FSH:
  Filesystem Hierarchy Standard
    /bin: 所有用户可用的基本命令程序文件;
    /sbin: 供系统管理使用的工具程序;
    /boot: 引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等;
    /dev: 存储特殊文件或设备文件;
      设备有两种类型:字符设备(线性设备)、块设备(随机设备);
    /etc:系统程序的配置文件,只能为静态;
    /home:普通的家目录的集中目录;一般每个普通的家目录默认为此目录下与用户名同名的子目录,/home/USERNANE
    /root: 管理员的家目录;可选;
    /lib: 为系统启动或根文件上的应用程序(bin,sbin等)提供共享库,以及为内核提供内核模块;
      libc.so.: 动态链接的c库;
      ld
: 运行时链接器/加载器;
      modules: 用于存储内核模块的目录;
    /lib64: 64位系统特有的存放64共享库的路径;
    /media: 便携式设备挂载点,cdrom, floppy等;
    /mnt: 其它文件系统的临时挂载点;
    /opt: 附加应用程序的安装位置;可选路径;
    /srv: 当前主机为服务提供的数据;
    /tmp: 为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所有用户提供写入操作;有特殊权限;
    /usr: usr hierarchy, 全局共享的只读数据路径;
      bin,sbin
      lib,lib64
      include: C程序头文件;
      share: 命令手册页和自带文档等架构特有的文件的存储位置;
      local: 加一个层级目录;
      X11R6: X-Window程序的安装位置;
      src: 程序源码文件的存储位置;
    /usr/local: local hierarchy, 让系统管理员安装本地应用程序;也通常用于安装第三方应用程序;
/var: /var hierarchy,存储常发生变化的数据的目录;
cache Application cache information
local Variable state for /usr/local
lock Lock files
log Log files and directories
opt Variable data for /opt
Run Data relevant to running process
spool Application spool data
tmp Temporary files presserved between system reboots
/proc: 虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward,虚拟为net/ipv4/ip_forward,存储于/proc/sys,因此其完整路径为/proc/sys/net/ipv4/ip_forward;
/sys: sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理Linux设备提供一种统一模型的接口;

参考:https://www.ibm.com/developerworks/cn/linux/1-cn-sysfs/

LINUX系统上的文件类型

-: 常规文件;即f;
d: directory,目录文件;
b: block device,块设备文件,支持以“block”为单位进行随机访问;
c: character device,字符设备文件,支持以“character”为单位进行线性访问;
major number: 主设备号,用于标识设备类型,进而确定要加载的驱动程序;
minor number: 次设备号,用于标识同一类型中的不同设备;
8位二进制:0-255
l: symbolic link,符号链接文件;
p: pipe,命名管道;
s: socket,套接字文件;

基本命令

命令类型:
外部命令
shell内部命令

type COMMAND:
内部:builtin
外部:显示为命令文件路径;
注:命令可以有别名,别名可以与原名相同,此时原名被隐藏,此时如果要运行原命令,则使用\COMMAND;
命令别名:
获取所有可用别名的定义:
~]# alias
定义别名:
~]# alias NAME=’COMMAND’
注:仅对当前shell进程有效
撤消别名:
~]# unalias NAME
which命令:
which - shows the full path of (shell) commands
which [options] programname […]
–skip-alias: 忽略别名
whereis命令:
whereis - locate the binary,source,and manual page files for a command
whereis [options] name …
-b: 仅搜索二进制程序路径;
-m: 仅搜索使用手册文件路径;
who命令:
who - show who is logged on
who [option]…
-b: 系统此次启动的时间;
-r: 运行级别;
w命令:
增强版的who命令
w - show who is logged on and what they are doing.
tree命令:
tree [OPTIONS] [directory]
-L level:指定要显示的层级;

bash的基础特性

  • 命令历史:shell进程会在会话中保存此前用户提交执行过的命令
      ~]# history
        定制history的功能,可通过环境变量实理:
          HISTSIZE:shell进程可保留的命令历史条数;
          HISTFILE:持久保留命令历史的文件;
            .bash_history
          HISTFILESIZE:命令历史文件的大小;
      命令用法:
        history [-c] [-d 偏移量] [n]
        或 history -anrw [文件名]
        或 history -ps 参数 [参数…]
        
        -c: 清空命令历史;
        -d offset: 删除指定历史命令;
        -r: 从文件读取命令历史至历史列表中;
        -w: 把历史列表中的命令追加至历史文件中;
        history #: 显示最近的#条命令;
      调用命令历史列表中的命令:
        !#: 再一次执行历史列表中的第#条命令;
        !!: 再一次执行上一条命令;
        !STRING: 再一次执行命令历史列表中最近一次以STRING开头的命令;
          注意: 命令的重复执行有时候需要依赖于幂等性;
      调用上一条命令的最后一个参数:
        快捷键: ESC,.
        字符串: !$
      控制命令历史记录的方式:
        环境变量:HISTCONTROL
          ignoredups: 忽略重复的命令
          ignorespace: 忽略以空白字符开头的命令
          ignoreboth: 以上两者同时生效
        修改变量的值:
          NAME=’VALUE’
  • 命令补全:
      shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当作命令:
      命令查找机制:
        查找内部命令;
        根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;
      给定的打头字符串如果能唯一标识某命令程序文件,则直接补全;
    不能唯一标识某命令程序文件,再击一次tab键,会给出列表;
  • 路径补全:
      在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件:
      tab:
        如果能唯一标识,则直接补全;
        否则,再一次tab,给出列表;
  • 命令行展开:
      ~:自动展开为用户的家目录,或指定用户的家目录;
      {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
        例如:/tmp/{a,b}相当于 /tmp/a /tmp/b
  • 命令的执行状态结果:
      bash通过状态返回值来输出此结果:
        成功:0
        失败:1-255
      命令执行完成后,其状态返回值保存于bash的特殊变量 ? 中 ;     命 令 正 常 执 行 时 , 有 的 还 会 有 命 令 返 回 值 ;         根 据 命 令 及 其 功 能 不 同 , 结 果 各 不 相 同 ;     引 用 命 令 的 执 行 结 果 :         ?中;   命令正常执行时,有的还会有命令返回值;     根据命令及其功能不同,结果各不相同;   引用命令的执行结果:      ?            (COMMAND)
        或COMMAND
  • 引用:
      强引用:’’
      弱引用:””
      命令引用:`` 或 $()
  • 快捷键:
      Ctrl +a:跳转至命令行首;
      Ctrl +e:跳转至命令行尾;
      Ctrl +u:删除行首至光标所在处之间的所有字符;
      Ctrl +k:删除光标所在处至行尾的所有字符;
      Ctrl +l:清屏,相当于clear;

目录管理类命令

mkdir, rmdir
mkdir: make directories
  mkdir [OPTION]… DIRECTORY …
    -p: 自动按需创建父目录;
    -v: verbose, 显示详细过程;
    -m MODE: 直接给定权限;
    注:路径基名方为命令的作用对象;基名之前的路径必须得存在;

rmdir: remove empty directories
  rmdir [OPTION]… DIRECTORY …
    -p: 删除某目录后,如果父目录为空,则一并删除;
    -v: 显示过程;

问题1:如何创建 /tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
  mkdir -pv /tmp/x/{y1/{a,b},y2}
问题2:如何创建 a_c, a_d, b_c, b_d
  mkdir {a,b}_{c,d} -v
问题3:创建如下目录结构:
  /tmp/mysysroot/
    bin
    sbin
    etc
      sysconfig
        network-scripts
    usr
      bin
      sbin
      lib
      lib64
      local
        bin
        sbin
        etc
        lib
    var
      cache
      log
      run
  ~]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr{bin,sbin,lib,lib64,local/{bin,sbin,etc,lib}},var/{cache,log,run}}

文件查看类命令

cat, tac, head, tail, more, less
分屏查看命令:more和less
more命令:
  more FILE
  特点:翻屏至文件尾部后自动退出;
less命令:
  less FILE
  man命令的实现形式就是less
head命令:
  查看命令的前n行:
  head [OPTIONS] FILE
    -n #
    -#
tail命令:
  查看命令的后n行:
  tail [OPTIONS] FILE
    -n #
    -#
    -f:查看文件尾部内容结束后不退出,跟随显示新增的行,可用于监控日志文件;
stat命令:
  stat - display file or file system status
  stat FILE…
  文件:两类数据
    元数据:metadata
    数据:data
  时间戳:
   access time: 2015-12-10 16:12:12.77633854 +0800
   modify time: 2015-12-10 16:12:12.77633854 +0800
   change time: 2015-12-10 16:12:12.77633854 +0800
touch命令:
touch - change file timestamps
touch [OPTION]… FILE…
-c: 指定的文件路径不存在时不予创建;
-a: 仅修改access time;
-m: 仅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]

文件管理工具

cp, mv, rm

cp命令:copy
  源文件;目标文件;
  单源复制:cp [OPTION]… [-T] SOURCE DEST
    如果DEST不存在,则事先创建此文件,并复制源文件的数据流至DEST中;
  如果DEST存在:
    DEST为非目录:覆盖目标文件;
    DEST为目录:先创建一个与源文件同名的文件,并复制其数据流;
    
  多源复制:cp [OPTION]… SOURCE… DIRECTORY
       cp [OPTION]… -t DIRECTORY SOURCE…
    如果DEST不存在:错误;
    如果DEST存在:
      如果DEST是非目录文件:错误;
      如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;
  常用选项:
    -i: 交互式复制,即覆盖之前提醒用户确认;
    -f: 强制覆盖目标文件;
    -r, -R: 递归复制目录;
    -d: 复制符号链接文件本身,而非其指向的源文件;
    -a: -dR --preserve=all, archive, 用于实现归档;
    --preserve=
      mode: 权限
      ownership: 属主和属组
      timestamps: 时间戳
      context: 安全标签
      xattr: 扩展属性
      links: 符号链接
      all: 上述所有属性

mv命令: move
  mv [OPTION]… [-T] SOURCE DEST
  mv [OPTION]… SOURCE… DIRECTORY
  mv [OPTION]… -t DIRECTORY SOURCE…
  常用选项:
    -i: 交互式;
    -f: force;

rm命令:remove
  rm [OPTION]… FILE…
  常用选项:
    -i: interactive
    -f: force
    -r: recursive
    删除目录:rm -rf /PATH/TO/DIR
      危险操作:rm -rf /*
  注意:建议所有不用的文件不要直接删除,而是移动至某个专用目录;(模拟回收站)

LINUX系统变量基础

变量:命名的内存空间
  变量类型:
    字符型:
    数值型:
      精确数值:
      近似数值:
    存储格式、数据范围、参与运算;
  
    课外作业:浮点数据如何存储?
  变量的赋值操作:
    name=tom

你可能感兴趣的:(Linux修行记,linux,服务器,centos,运维,ssh)