zoukankan      html  css  js  c++  java
  • linux之bash shell

    GNU bash

    ========================================================
    通常计算机硬件是由运算器、控制器、存储器、输入/输出设备等等这些物理设备共同组成的,而能够让机箱内各种硬件设备各司其职的东西就叫做系统内核。Linux系统的内核负责驱动硬件、管理活动和分配/管理硬件资源等等任务,如此说来系统内核对计算机正常稳定的运行来讲可真的是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于“系统调用接口”开发出的程序/服务来管理计算机,这样一层层环环相扣来满足咱们的日常工作需要。

    Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
    实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。

    我们可以使用SHELL实现对Linux系统的大部分管理例如:
    1. 文件管理
    2. 用户管理
    3. 权限管理
    4. 磁盘管理
    5. 软件管理
    6. 网络管理
    ......

    内容提要:
    Linux控制台使用
    系统与硬件
    bash shell提示符
    shell 语法
    bash 特性
    Linux获得帮助


    1 Linux控制台使用


    虚拟终端和控制台
    虚拟终端
    屏幕和键盘只是一个终端,可能不够用,又不想增加设备投入,就产生了虚拟终端。像gnome-terminal,urxvt,mlterm,xterm等等:
    是一个程序,职责是模拟终端设备,和虚拟终端的区别表面上在于它以 GUI 形式的窗口出现,内部则是程序结构和系统控制结构有所不同,但本质上差不多。

    控制台tty
    显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
    但有时专指CLI下的模拟终端设备的一个程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的区别。一般console有6个,tty1-6,CTRL+ALT+fn切换。

    控制台切换
    Linux 预设的情况下会提供六个Terminal 来让使用者登入, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。
    图形界面切换到字符界面终端: Ctrl+Alt+F2-6
    切换到图像界面 Alt+F1或按ctrl+alt+F1
    字符界面之间切换: [Alt] + [Fn]

    虚拟终端(pty、pts)
    如果我们远程telnet到主机时,需要一个终端交互。这就是虚拟终端pty(pseudo-tty)。而 pts/ptmx(pts/ptmx结合使用,进而实现pty)

    伪终端(/dev/pty/)这个是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。
    伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(或着在设备文件系统中分别是/dev/pty/m3和/dev/pty/s3)。


    已经打开的终端上开启新窗口、并列、切换、缩小、放大
    放大:ctrl+shift+"+"
    缩小 ctrl -
    新建一个独立窗口 ctrl+shift+n
    新建一个并列窗口 ctrl+shift+t

    2 系统与硬件

     

    2.1 Linux硬件资源管理


    1. 查看系统pci设备
    lspci 列出所有的pci设备,比如主板、声卡、显卡、网卡等。
    通过lspci -v 可以查看更详细信息。

    2. 查看cpu信息
    more /proc/cpuinfo

    3. 查看内存信息
    more /proc/meminfo
    free -m
    free -h

    4. 查看磁盘分区信息
    fdisk -l

     

    2.2 常见文件系统类型

    点击这里点击这里
    文件系统格式 备注
    msdos dos文件系统类型
    vfat 支持长文件名的DOS分区文件系统类型
    iso9660 光盘格式文件系统类型
    ext2/ext3/ext4 Linux文件系统类型
    xfs Linux下高性能的日志文件系统,RHEL7 默认文件系统类型



    3 bash shell提示符


    ===================
    [root@localhost ~]# echo $PS1
    [u@h W]$
    [root@localhost ~]# -->root用户提示符
    [test@localhostr ~]$ -->普通用户提示符

    PS1常用的参数含义如下:
    d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
    H :#完整的主机名称
    h :#仅取主机的第一个名字
    :#显示时间为24小时格式,如:HH:MM:SS
    T :#显示时间为12小时格式
    A :#显示时间为24小时格式:HH:MM
    u :#当前用户的账号名称
    v :#BASH的版本信息
    w :#完整的工作目录名称
    W :#利用basename取得工作目录名称,所以只会列出最后一个目录
    # :#下达的第几个命令
    $ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$

    [root@localhost ~]# date
    2012年 10月 24日 星期三 09:38:54 CST

    [root@localhost ~]# whoami
    root

    [root@localhost ~]# useradd jack
    [root@localhost ~]# passwd jack
    Changing password for user jack.
    New UNIX password:
    BAD PASSWORD: it is WAY too short
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.


    4 shell 语法


    =====================
    命令 选项 参数
    [root@localhost ~]# ls
    [root@localhost ~]# ls -a
    [root@localhost ~]# ls -a /home

    命令:整条shell命令的主体
    选项:会影响会微调命令的行为 //通常以 -, --
    - 短格式,比如-a -l 和 -al等价
    --长格式
    参数:命令作用的对象,一般情况下参数是文件或目录。

    5 bash基本特性


    系统的shell:cat /etc/shells
    当前系统默认的shell:echo $SHELL


    1. 自动补全<tab> //Tab只能补全命令和文件 RHEL6
    # ls /etc/sysconfig/network-scripts/
    # ls /etc/sysconfig/network-scripts/ifcfg-eth0
    # cat /etc/sysconfig/network-scripts/ifcfg-eth0
    # service network restart
    # service sshd restart
    # date -s 12:30

    2. 快捷键
    ^C 终止前台运行的程序 //ping 172.16.8.100
    ^D 退出 等价exit
    ^L 清屏
    ^A 光标移到命令行的最前端 //编辑命令
    ^E 光标移到命令行的后端 //编辑命令
    ^U 删除光标前所有字符 //编辑命令
    ^K 删除光标后所有字符 //编辑命令
    ^R 搜索历史命令,利用关键词
    Alt+. 引用上一个命令的最后一个参数,等价于!$,服务器端使用
    ESC, .引用上一个命令的最后一个参数,等价于!$
    # ls /etc/sysconfig/network-scripts/ifcfg-eth0
    # cat ESC .

    3. 历史命令
    # history
    a. 光标上下键
    b. ^R //搜索历史命令(输入一段某条命令的关键字:必须是连续的)
    c. !220 //执行历史命令中第220条命令
    !字符串 //搜索历史命令中最近一个以xxxx字符开头的命令,例如!ser
    !$ //引用上一个命令的最后一个参数
    示例1:
    [root@instructor ~]# ls /root /home
    [root@instructor ~]# cd !$
    cd /home

    示例2:
    [root@instructor ~]# ls /root /home
    [root@instructor ~]# touch !$/file1
    touch /home/file1

    示例3:
    [root@instructor ~]# service nfs restart
    [root@instructor ~]# ls
    [root@instructor ~]# date
    [root@instructor ~]# !se

    4. 命令别名
    # alias //查看系统当前的别名
    ll='ls -l --color=tty'
    # alias localhost='cat /etc/sysconfig/network-scripts/ifcfg-eth0' //建立别名(临时的,仅在当前Shell生效)
    # unalias localhost //取消localhost这个别名

    [root@localhost ~]# type -a ls
    ls is aliased to `ls --color=auto'
    ls is /bin/ls

    [root@localhost ~]# /bin/ls
    [root@localhost ~]# ls //别名优先
    [root@localhost ~]# ls //跳过别名

    [root@localhost ~]# cp -rf /etc /tmp
    [root@localhost ~]# cp -rf /etc /tmp
    [root@localhost ~]# cp -rf /etc /tmp

    永久别名:
    [root@localhost ~]# gedit /etc/bashrc //添加如下行
    alias localhost='cat /etc/sysconfig/network-scripts/ifcfg-eth0'


    6 Linux获得帮助


    如何判断一个命令是内部命令还是外部命令呢?
    type

    #help可以列出系统所有内部命令
    内部命令一般可以使用 help 命令,查看帮助
    1. 命令 --help
    # ls --help
    用法:ls [选项]... [文件]...

    ls 常见选项
    -a all,查看目录下的所有文件,包括隐藏文件
    -l 长列表显示
    -h human 以人性化方式显示出来
    -d 只列出目录名,不列出其他内容
    -t 按修改时间排序
    -S 按文件的Size排序
    -r 逆序排列reverse
    -i 显示文件的inode号(索引号)

    # date --help
    Usage: date [OPTION]... [+FORMAT]
    or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

    # date
    # date +%H
    # date +%F
    # date 0214080014
    # date 0214080014.00

    2. man 手册名 (针对命令帮助,针对配置文件帮助,针对函数帮助)

    [root@localhost ~]# man man
    MANUAL SECTIONS
    The standard sections of the manual include:

    1 User Commands

    2 System Calls

    3 C Library Functions

    4 Devices and Special Files

    5 File Formats and Conventions

    6 Games et. Al.

    7 Miscellanea

    8 System Administration tools and Deamons


    命令帮助: 章节1,章节8
    函数帮助: 章节2,章节3
    文件格式: 章节5

    一般情况是不需要使用章节号,例如:
    # man ls
    # man useradd
    # man setfacl (/EXAMPLES)

    技巧1:按章节查询
    /usr/bin/passwd 修改用户口令命令
    /etc/passwd 包含用户信息的配置文件

    # man -f passwd 列出所有章节中的passwd手册
    # man 1 passwd passwd命令的帮助
    # man 5 passwd 用户配置文件的帮助

    技巧2:在所有章节中查询
    # man -a passwd

    3. 官方手册
    http://docs.redhat.com Enterprise Linux (5/6/7)
    http://www.mysql.com docs

    4. baidu, google


    man搜索:
    / -a,从上往下,n向下继续搜索,N向上继续搜索
    ?-a,从下往上

    []可选项
    <>必选
    ...可以出现多次
    |多选一
    {}分组,无特殊意义
    MAN:
    NAME:命令名称及功能简要说明
    SYNOPSIS:用法说明,包括可用的选项
    DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
    OPTIONS:说明每一个选项意义
    FILES:此命令相关的配置文件
    BUGS:
    EXAMPLES:使用示例
    SEE ALSO:另外参照
    ==========================================================

    本节作业:

    1. 完成课堂中学习的所有内容

    2. 学习bash shell 命令的搜索顺序 hash aliase builtin $PATH keyword function

    3. mysql openstack docker zabbix





  • 相关阅读:
    每天干攻防,都不会写驱动了
    SSD 坏了
    据说英雄联盟要出新皮肤了
    随便写点什么,证明我还活着,VS2010出现的问题
    ida 符号路径设置
    搭建一个自己的SVN服务器
    nginx+keepalived互为主主高可用配置
    nginx+keepalived主从高可用配置
    Lnamp的高级网站架构+动静分离+反向代理
    Nginx+PHP(FastCGI)高性能服务器加载redis+memcache模块
  • 原文地址:https://www.cnblogs.com/anttech/p/10591478.html
Copyright © 2011-2022 走看看