zoukankan      html  css  js  c++  java
  • 2.Linux基础入门

    1.命令基本格式

    1.1命令提示符基本格式

    [root@centos8 ~]# 
    
    • root:表示当前用户

    • @:分隔符没有实际意义

    • centos8:主机名

    • ~:当前所在目录

    • #:命令提示符。#表示超级用户,$表示普通用户

    [root@centos8 ~]# su user
    [user@centos8 root]$ 
    

    1.2命令基本格式

    COMMAND [OPTIONS...] [ARGUMENTS...]
    
    • []:表示其中的内容是可选的

    • OPTIONS:命令的附加功能

      ​ 长选项:GUN风格,如--human

      ​ 短选项:UNIX 风格选项,如-l

      ​ BSD风格选项:一个字母,例如:a,使用相对较少

    • ARGUMENTS:命令的作用对象,如文件、用户等

    [root@centos8 home]# ll -h
    [root@centos8 home]# ll --human
    [root@centos8 home]# ps aux
    

    注意:多个命令可以用 ";" 符号分开,一个命令可以用\分成多行

    1.3命令的执行

    1.3.1 执行命令过程

    输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分 配资源 将其运行起来

    1.3.2 shell中可执行的两类命令

    • 内部命令:由shell自带的,而且通过某命令形式提供

    • 外部命令:在文件系统路径下有对应的可执行程序文件

    • 命令查找顺序依次为别名→内部命令→外部命令

    使用type可以判断命令类型

    [root@centos8 ~]# type -a bash
    bash is /usr/bin/bash
    [root@centos8 ~]# type echo
    echo is a shell builtin
    

    1.3.3 Hash缓存表

    系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的 路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不 存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率

    • hash -l 显示hash缓存及name
    • hash -p path name 将命令全路径path起别名为name
    • hash -d name 清除name缓存
    • hash -r 清除所有hash缓存
    • hash -t name 查看name缓存的路径
    [root@centos8 ~]# hash -l
    builtin hash -p /usr/bin/lscpu lscpu
    builtin hash -p /usr/bin/lsblk lsblk
    [root@centos8 ~]# hash -d lscpu
    [root@centos8 ~]# hash -l
    builtin hash -p /usr/bin/lsblk lsblk
    

    2.常见的命令

    2.1查看系统硬件信息

    2.1.1 查看cpu的信息

    lscpu

    cat /proc/cpuinfo

    [root@centos8 ~]# lscpu
    Architecture: x86_64
    CPU op-mode(s): 32-bit, 64-bit
    Byte Order: Little Endian
    CPU(s): 8
    On-line CPU(s) list: 0-7
    Thread(s) per core: 1 #每个core 有几个线程
    Core(s) per socket: 4 #每个槽位有4个core
    Socket(s): 2 #服务器面板上有2个cpu 槽位
    NUMA node(s): 2 #nodes的数量
    
    [root@centos8 ~]# cat /proc/cpuinfo
    

    2.1.2 查看内存大小

    free

    cat /proc/meminfo

    [root@centos8 ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1870836      202132      842644        1996      826060     1503060
    Swap:             0           0           0
    
    [root@centos8 ~]# cat /proc/meminfo 
    MemTotal:        1870836 kB
    MemFree:          842872 kB
    MemAvailable:    1503288 kB
    Buffers:            2104 kB
    Cached:           758672 kB
    SwapCached:            0 kB
    ...
    

    2.1.3 查看硬盘和分区情况

    lsblk

    [root@centos8 ~]# lsblk
    NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    vda    253:0    0  50G  0 disk 
    └─vda1 253:1    0  50G  0 part /
    

    2.2查看系统信息

    2.2.1 查看系统版本信息

    uname:查看系统内核版本

    [root@centos8 ~]# uname -r
    4.18.0-193.14.2.el8_2.x86_64
    

    cat /etc/redhat-release(查看系统发行版本)

    [root@centos8 ~]# cat /etc/redhat-release 
    CentOS Linux release 8.2.2004 (Core) 
    [root@centos8 ~]# cat /etc/os-release 
    NAME="CentOS Linux"
    VERSION="8 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="8"
    PLATFORM_ID="platform:el8"
    PRETTY_NAME="CentOS Linux 8 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:8"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-8"
    CENTOS_MANTISBT_PROJECT_VERSION="8"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="8"
    
    #ubuntu查看发行版本
    [root@ubuntu1804 ~]#cat /etc/os-release
    [root@ubuntu1804 ~]#cat /etc/issue
    [root@ubuntu1804 ~]#lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description: Ubuntu 18.04.1 LTS
    Release: 18.04
    Codename: bionic
    

    2.2.2设置主机名称

    hostname name(此方法临时生效)

    [root@centos8 ~]#hostname bj-yz-k8s-node1-100-10.lx
    

    主机名设置应当遵循一定的规范,如上格式为城市+区域+业务格式,生产中应根据公司实际业务进行设置

    2.3管理内部命令

    enable 管理内部命令

    • enable cmd 启用内部命令
    • enable –n cmd 禁用内部命令
    • enable –n 查看所有禁用的内部命令

    2.4日期和时间

    2.4.1 cal

    cal [options] [[[day] month] year]

    [root@centos8 ~]# cal 7 2019
          July 2019     
    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     
    

    2.4.2 date

    显示和设置系统日期和时间

    date

    date [OPTION]... [+FORMAT]

    date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]][.ss]]

    • -d, --date=STRING display time described by STRING, not 'now'

    • %F full date; same as %Y-%m-%d

    • %T time; same as %H:%M:%S

    • %u day of week (1..7); 1 is Monday

    [root@centos8 ~]# date
    Sat Nov 28 16:48:36 CST 2020
    #设置当前日期为2020-11-29
    [root@centos8 ~]# date 112922552020
    Sun Nov 29 22:55:00 CST 2020
    [root@centos8 ~]# date +%Y/%m/%d
    2020/11/28
    [root@centos8 ~]# touch `date +%F_%H-%M-%S`.log
    [root@centos8 ~]# ls
    2020-11-30_06-33-23.log  anaconda-ks.cfg  a.txt  
    #显示当前时间,格式:2016-06-18 10:20:30
    [root@centos8 ~]# date '+%F %T'
    2020-11-30 06:25:06
    #显示前天是星期几
    [root@centos8 ~]# date -d '-2 day' +%u
    5
    
    

    2.4.3 clock\hwclock

    显示硬件时间

    -s --hctosys 以硬件时钟为准,校正系统时钟

    -w --systohc 以系统时钟为准,校正硬件时钟

    2.5计算器

    bc

    [root@centos8 ~]# bc
    bc 1.07.1
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    1+11
    12
    #输出十进制,输入二进制
    obase=10
    ibase=2
    101
    5
    

    2.6关机和重启

    2.6.1命令

    halt:关机

    poweroff:关机

    shutdown:关机和重启

    shutdown [OPTIONS...] [TIME] [WALL...]
    -r: reboot
    -h: halt
    -c:cancel
    TIME:无指定,默认相当于+1(CentOS7)
    	now: 立刻,相当于+0
    	+#: 相对时间表示法,几分钟之后;例如 +3
    	hh:mm: 绝对时间表示,指明具体时间
    

    reboot:重启

    init 0:重启

    2.6.2正确关机方法

    资料同步sync

    执行关机或重启命令

    2.7用户登陆信息查看

    w:显示系统中所有登陆的用户及正在进行的操作

    [root@centos8 ~]# w
     17:14:30 up 15 days, 18:00,  1 user,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    110.152.182.41   13:44    1.00s  0.19s  0.00s w
    

    whoami: 显示当前登录有效用户

    [root@centos8 ~]# whoami
    root
    [root@centos8 ~]# who am i 
    root     pts/0        2020-11-29 02:39 (10.0.0.1)
    

    who: 系统当前所有的登录会话

    [root@centos8 ~]# who
    root     pts/0        2020-11-28 13:44 (110.152.182.41)
    

    2.8会话管理

    用户使用终端窗口与计算机进行交互的过程称为会话(session)

    会话的一个重要特点是,窗口与其中启动的进程是连在一起的。关闭窗口,会话内部的进程也随之结束,即使进程没有运行完

    我们使用终端复用器软件可以解决这个问题

    (1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。

    (2) 它可以让新窗口"接入"已经存在的会话。

    (3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。

    (4)它还支持窗口任意的垂直和水平拆分。

    2.8.1 screen

    系统最小化安装没有screen软件,需要自己安装,这里使用yum安装

    #centos8要使用于epel源
    yum -y install screen
    

    screen –S [SESSION]:创建一个会话

    screen –x [SESSION]:加入一个会话

    exit:退出并关闭会话

    Ctrl+a,d:脱离当前会话

    screen -ls:显示所有打开的会话

    screen -r [SESSION]:回复某个会话

    2.8.2 tmux(作为了解即可)

    [root@centos8 ~]# yum -y install screen
    [root@centos8 ~]# tmux
    

    Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。

    举例来说,帮助命令的快捷键是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就会显示帮助信息。

    然后,按下 ESC 键或q键,就可以退出帮助。

    新建会话

    第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。

    tmux new -s <session-name>
    类似于在命令行中执行tmux,所以在已经开启的会话中执行命令会报下面错误
    sessions should be nested with care, unset $TMUX to force
    

    tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话

    [root@centos8 ~]# tmux ls
    0: 1 windows (created Sun Nov 29 02:20:25 2020) [187x43] (attached)
    

    分离会话

    在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。

    [root@centos8 ~]# tmux detach
    

    接入会话

    [root@centos8 ~]# tmux attach -t 0
    

    结束会话

    [root@centos8 ~]#tmux kill-session -t <session-name>
    

    切换会话

    [root@centos8 ~]#tmux switch -t <session-name>
    

    窗格快捷键

    Ctrl+b %:划分左右两个窗格。
    Ctrl+b ":划分上下两个窗格。
    Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。
    Ctrl+b ;:光标切换到上一个窗格。
    Ctrl+b o:光标切换到下一个窗格。
    Ctrl+b {:当前窗格与上一个窗格交换位置。
    Ctrl+b }:当前窗格与下一个窗格交换位置。
    Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。
    Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。
    Ctrl+b x:关闭当前窗格。
    Ctrl+b !:将当前窗格拆分为一个独立窗口。
    Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。
    Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。
    Ctrl+b q:显示窗格编号
    

    窗口快捷键

    Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
    Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
    Ctrl+b n:切换到下一个窗口。
    Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
    Ctrl+b w:从列表中选择窗口
    Ctrl+b ,:窗口重命名
    

    2.9输出信息echo

    echo:display a line of text

    • -e:enable interpretation of backslash escapes(启用反斜杠转义功能)

    启用-e选项会将下面字符进行特殊处理,而不会输出字符本身

    • \a 发出警告声

    • \b 退格键

    • \c 最后不加上换行符号

    • \e escape,相当于\033

    • \n 换行且光标移至行首

    • \r 回车,即光标移至行首,但不换行

    • \t 插入tab

    • \ \插入\字符

    • \0nnn 插入nnn(八进制)所代表的ASCII字符

    • \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)

    [root@centos8 ~]# ls
    anaconda-ks.cfg
    [root@centos8 ~]# echo 123 > a.txt
    [root@centos8 ~]# ls
    anaconda-ks.cfg  a.txt
    [root@centos8 ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@centos8 ~]# echo -e '\a'
    

    2.10命令行扩展

    `` ,' ' , " ",$(),{}用法展示

    [root@centos8 ~]# echo "echo $HOSTNAME"
    echo centos8
    [root@centos8 ~]# echo 'echo $HOSTNAME'
    echo $HOSTNAME
    [root@centos8 ~]# echo `echo $HOSTNAME`
    centos8
    [root@centos8 ~]# echo $(echo $HOSTNAME)
    centos8
    [root@centos8 ~]# echo name{1,2,3}
    name1 name2 name3
    [root@centos8 ~]# echo {1..10}
    1 2 3 4 5 6 7 8 9 10
    [root@centos8 ~]# echo {1..20..2}
    1 3 5 7 9 11 13 15 17 19
    
    [root@centos8 ~]#ll `echo `date +%F`.txt`
    -bash: .txt: command not found
    ls: cannot access 'date': No such file or directory
    ls: cannot access '+%F': No such file or directory
    [root@centos8 ~]#ll $(echo $(date +%F).txt)
    -rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
    

    通过以上的命令实例我们不难得出下面结论

    • " ":能识别引号内变量
    • ' ':不能识别引号内的命令和变量,只会将内容当作字符串处理
    • ` `:既能识别变量也能识别命令
    • $():既能识别变量也能识别命令,效果基本与``相同,不过涉及到命令嵌套时需使用$()
    • {}:能将{}内部的字符串全部输出,并可以依次与外部字符串组合,从而简化打印

    2.11 Tab键

    2.11.1 补全命令

    • 补全内部及外部命令
    • 补全命令的子命令,需安装 bash-completion

    2.11.2 补全路径

    对用户输入的路径进行补全操作

    2.11.3补全规则

    唯一则直接补全(单击Tab),不唯一则列出所有相匹配的命令或者路径(双击Tab)

    2.12历史命令

    2.12.1 执行方式

    系统会将执行的命令保存在内存当中

    当用户正常退出时,会将内存中的历史命令放入~/.bash_history文件中

    再次登陆时系统会将~/.bash_history文件中的命令加载到内存当中,而此时新执行的命令又会保存在内存中,当用户正常退出时,系统会把新的命令保存至配置文件中

    2.12.2 命令选项

    history

    -c:清除内存中的所有历史命令

    -d offset:删除第offset条历史命令

    n:显示最近n条历史

    -a:将本次会话新执行的命令历史列表添加至历史文件

    -s:向历史命令列表中添加一条命令,但这条命令不真正的执行

    2.12.3 相关变量

    HISTSIZE:命令历史记录的条数

    HISTFILE:指定历史文件,默认为~/.bash_history

    HISTFILESIZE:命令历史文件记录历史的条数

    HISTTIMEFORMAT="%F %T whoami" 显示时间和用户

    HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史

    HISTCONTROL:控制命令历史的记录方式

    • ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”

    • ignorespace 忽略所有以空白开头的命令

    • ignoreboth 相当于ignoredups, ignorespace的组合

    • erasedups 删除重复命令

    变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile

    #要求在执行history命令的时候可以看见执行时间
    #这里我们配置在全局配置文件/etc/profile 当中
    [root@centos8 ~]# vim /etc/profile
        HOSTNAME=`/usr/bin/hostname 2>/dev/null`
        HISTSIZE=1000
        if [ "$HISTCONTROL" = "ignorespace" ] ; then
            export HISTCONTROL=ignoreboth
        else
            export HISTCONTROL=ignoredups
        fi
        HISTTIMEFORMAT="%F %T "
        export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTTIMEFORMAT
    [root@centos8 ~]# history 
        1  2020-11-29 21:56:41 hostname -I
        2  2020-11-29 21:56:41 hostname -i
        3  2020-11-29 21:56:41 free
    

    2.12.3 调用历史命令的快捷键

    #重复前一个命令
    !:0 执行前一条命令(去除参数)
    !n 执行history命令输出对应序号n的命令
    !-n 执行history历史中倒数第n个命令
    !string 重复前一个以“string”开头的命令
    1.13 bash的快捷键
    !?string 重复前一个包含string的命令
    ctrl-r来在命令历史中搜索命令
    (reverse-i-search)`’:
    Ctrl+g:从历史搜索模式退出
    
    #重复前一个命令的参数
    command !^ 利用上一个命令的第一个参数做command的参数
    command !$ 利用上一个命令的最后一个参数做command的参数
    command !* 利用上一个命令的全部参数做command的参数
    command !:n 利用上一个命令的第n个参数做command的参数
    command !n:^ 调用第n条命令的第一个参数
    command !n:$ 调用第n条命令的最后一个参数
    command !n:m 调用第n条命令的第m个参数
    command !n:* 调用第n条命令的所有参数
    command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
    command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
    command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n个参数
    command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数
    

    2.13bash的快捷键

    Ctrl + l 清屏,相当于clear命令
    Ctrl + c 终止命令
    Ctrl + z 挂起命令
    Ctrl + a 光标移到命令行首,相当于Home
    Ctrl + e 光标移到命令行尾,相当于End
    Ctrl + u 从光标处删除至命令行首
    Ctrl + k 从光标处删除至命令行尾
    Ctrl + Alt + F1-F7 切换终端
    Alt + r 删除当前整行
    

    在xshell中需对ALT键进行设置,不然会因为快捷键冲突导致无法使bash快捷键生效

    image-20201129170737133

    3获取帮助命令

    3.1whatis

    Usage: whatis [OPTION...] KEYWORD... 与man -f效果相同

    使用数据库来显示命令的简短描述

    如果系统刚安装则可能无法使用该命令,此时Centos7以上版本需执行mandb,Centos6之前版本需执行makewhatis

    [root@centos8 ~]# whatis whatis
    whatis (1)           - display one-line manual page descriptions
    

    3.2查看命令帮助

    3.2.1 内部命令

    help COMMAND

    man bash

    [root@centos8 ~]# type echo
    echo is a shell builtin
    [root@centos8 ~]# help echo
    echo: echo [-neE] [arg ...]
        Write arguments to the standard output.
    	...
    [root@centos8 ~]# man echo
    NAME
           echo - display a line of text
    
    SYNOPSIS
           echo [SHORT-OPTION]... [STRING]...
           echo LONG-OPTION
           ...
    

    3.2.2 外部命令

    COMMAND --help | -h

    man COMMAND

    [root@centos8 ~]# man date
    NAME
           date - print or set the system date and time
    
    SYNOPSIS
           date [OPTION]... [+FORMAT]	#[]表示内容是可选
           date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]	#|表示或者
    
    DESCRIPTION
           Display the current time in the given FORMAT, or set the system date.
    
           Mandatory arguments to long options are mandatory for short options too.
    
           -d, --date=STRING	#简写方式和完整写法
                  display time described by STRING, not 'now'
    

    3.2.2 man 命令

    提供命令帮助的文件,手册页存放在/usr/share/man

    [root@centos8 ~]# whatis vim
    vim (1)              - Vi IMproved, a programmer's text editor
    vim (5)              - Vi IMproved, a programmer's text editor
    

    上例中的1、5数字代表着man命令的章节,数字与代表内容关系如下

    • 1:使用者在shell环境中可以操作的指令
    • 2:系统可以调用的函数库
    • 3:函数和函数库
    • 4:设备文件及特殊文件
    • 5:配置文件
    • 6:游戏
    • 7:其他系统文档
    • 8:管理员可用的指令
    • 9:与内核相关的API
    #查看某个章节的内容
    [root@centos8 ~]# man 1 vim
    VIM(1)                       General Commands Manual                      VIM(1)
    
    NAME
           vim - Vi IMproved, a programmer's text editor
    
    SYNOPSIS
           vim [options] [file ..]
           vim [options] -
           vim [options] -t tag
           vim [options] -q [errorfile]
    
    

    man命令的快捷键

    • #:跳转至第#行

    • 1G: 回到文件首部

    • G:翻至文件尾部

    • /KEYWORD

      以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写

      n:下一个

      N:上一个

    • ?KEYWORD

      以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写

      n:跟搜索命令同方向,下一个

      N:跟搜索命令反方向,上一个

    • b:向前翻一页

    • d:向后翻一页

  • 相关阅读:
    hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
    基于Linux环境Tomcat-MySQL的server搭建
    C++中 pair 的使用方法
    UI 经常用法总结之--- UIWindow UIView (不断更新中)
    LeetCode题解 || Longest Substring Without Repeating Characters (O(n)算法)问题
    HDU 1874 畅通project续 (最短路径)
    android studio 导入第三方库的记录
    android创建桌面快捷键shortcut
    Eclipse:Cannot complete the install because of a conflicting dependency.问题解决
    js保留两位小数的解决的方法
  • 原文地址:https://www.cnblogs.com/bestvae/p/14058822.html
Copyright © 2011-2022 走看看