欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

基础

程序员文章站 2022-04-24 18:12:16
Linux 组成 终端terminal 交互式接口 命令提示符 执行命令 执行外部命令 命令别名 命令格式 简单命令 date 显示日期和时间 d: 显示字符串所指的日期与时间。字符串前后必须加上双引号; s: 根据字符串来设置日期与时间。字符串前后必须加上双引号; u: 显示GMT; date d ......

Linux 组成

    Linux:kernel+rootfs+库+程序
        kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
        rootfs: 程序和glibc
        库:函数集合, function,  调用接口(头文件负责描述)
            过程调用:procedure ,无返回值
            函数调用:function
        程序:二进制执行文件
    
    内核设计流派:
        单内核(monolithic kernel) :Linux
            把所有功能集成于同一个程序
                [root@centos6 ~]#ls /boot/vmlinuz-2.6.32-696.el6.x86_64 
                /boot/vmlinuz-2.6.32-696.el6.x86_64
        微内核(micro kernel) :Windows, Solaris
            每种功能使用一个单独子系统实现
        

终端terminal

    设备终端
        键盘,鼠标显示器
    物理终端( /dev/console ) 
        控制台console
    虚拟终端(tty :teletypewriters,/dev/tty# ,#为[1-6])
        tty可有n 个,Ctrl+Alt+F[1-6]
    图形终端( /dev/tty7 )startx, xwindows
        CentOS 6: Ctrl + Alt + F7
        CentOS 7:  在哪个终端启动,即位于哪个虚拟终端
    串行终端( /dev/ttyS# ) 
        ttyS
    伪终端( pty :pseudo-tty, /dev/pts/# ) 
        pty, SSH 远程 连接
    查看当前的终端设备:tty

交互式接口

    交互式接口:启动终端后,在终端设备附加一个交互式应用程序
    GUI :Graphic User Interface
        X protocol, window manager, desktop
        Desktop:
            GNOME (C, 图形库gtk), 
            KDE (C++, 图形库qt)
            XFCE ( 轻量级桌面)
    CLI :Command Line Interface
        shell 程序:sh (bourn 史蒂夫· 伯恩),csh,tcsh
        ksh (korn),bash (bourn again shell),GPL,zsh

命令提示符

    命令提示符:prompt
        [root@localhost ~]#
        #  管理员
        $  普通用户
        
    显示提示符格式
        [root@localhost ~]#echo $PS1
        
    修改提示符格式
        PS1="\[\e[31m\][\u@\h \W]\\$\[\e[0m\]"
        \[\e[31m :开始位                                                    cat /etc/DIR_COLORS 查看颜色代码
        \[\e[0m:结束位
        \u  当前用户
        \h  主机名简称 
        \H  主机名
        \w  当前工作目录 
        \W  当前工作目录基名
        \t 24 小时时间格式 
        \T 12 小时时间格式
        \!  命令历史数 
        \#  开机后命令历史数
            PS1="\[\e[1;36m\][\[\e[35m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34m\]\W\[\e[36m\]]\[\e[31m\]\\$\[\e[0m\]"
            PS1="\[\e[1;36m\][\[\e[35m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34m\]\W\[\e[36m\]]\[\e[40;31;5m\]\\$\[\e[0m\]"
            PS1="\[\e[1;37m\][\[\e[35;4m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34;4m\]\W\e[0m\[\e[36m\]]\[\e[40;33;5m\]\\$\[\e[0m\]"
            echo -e '\033[1;43;31;5mmagedu\033[0m'
                \033 颜色启用
                43代表背景颜色
                31代表字的颜色
                5m代表什么效果
                
    如果想永久保存,可以在/etc/profile.d下建立env.sh来作为保存
        自己建立自己操作环境:/etc/profile.d/env.sh‘’
        

执行命令

    输入命令后回车
        提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来
    
    在shell 中可执行的命令有两类
        内部命令:由shell 自带的,而且通过某命令形式提供
            help  内部命令列表
            enable cmd  启用内部命令
            enable –n cmd  禁用内部命令
            enable –n  查看所有禁用的内部命令
        外部命令:在文件系统路径下有对应的可执行程序文件
            查看路径:
                    which --skip-alias ; 
                        whichh:查找并显示给定(外部)命令的绝对路径
                            -n<文件名长度>:  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名; 
                            -p<文件名长度>:  与-n参数相同,但此处的<文件名长度>包含了文件的路径;
                        
                    whereis
                        whereis:查找二进制程序、代码等相关文件路径
                            -b: 只查找二进制文件; 
                            -B <目录>:    只在设置的目录下查找二进制文件; 
                            -f: 不显示文件名前的路径名称; 
                            -m: 只查找说明文件; 
                            -M<目录>: 只在设置的目录下查找说明文件; 
                            -s: 只查找原始代码文件; 
                            -S<目录>  只在设置的目录下查找原始代码文件; 
                            -u: 查找不包含指定类型的文件。 
                        
    区别指定的命令是内部或外部命令
        type -a COMMAND
            type:显示指定命令的类型
                -t: 输出“file”、“alias”、“builtin”,分别表示给定的指令为“外部指令”、“命令别名”、“内部指令”; 
                -p: 如果给出的指令为外部指令,则显示其绝对路径; 
                -a: 在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
                

执行外部命令

    Hash 缓存表
        系统初始hash表为空,当外部命令执行时,默认会从PATH 路径下寻找该命令,找到后会将这条命令的路径记录到
        hash表中,当再次使用该命令时,shell解释器首先会查看hash表 ,存在将执行之,如果不存在,将会去PATH 路径下寻找 。利
        用hash 缓存表可大大提高命令的调用速率
        
    hash 常见用法
        hash    显示hash缓存
        hash –l     显示hash缓存,可作为输入使用
        hash –p path name   将命令全路径path起别名为name
        hash –t name    打印缓存中name 的路径
        hash –d name    清除name 缓存
        hash –r     清除缓存

命令别名

    ·显示当前shell进程所有可用的命令别名
        alias
    
    ·定义别名NAME,其相当于执行命令VALUE
        alias NAME='VALUE'
    
    ·在命令行中定义的别名,仅对当前shell 进程有效
    
    ·如果想永久有效,要定义在配置文件中
        仅对当前用户:~/.bashrc
        对所有用户有效:/etc/bashrc
    
    ·编辑配置给出的新配置不会立即生效。需要bash进程重新读取配置文件,也就是重新登录,或使用sourc or 。
    
    ·bash 进程重新读取配置文件
        source /path/to/config_file
        . /path/to/config_file
    
    ·撤消别名:unalias
        unalias [-a] name [name ...]
            -a  取消所有别名
        要想永久撤销也得在配置文件中删除
    
    ·如果别名同原命令同名,如果要执行原命令,可使用
        "\COMMAND"
        'COMMAND'
        /PATH/COMMAND  

命令格式

    ·COMMAND [OPTIONS...] [ARGUMENTS...]
        选项:用于启用或关闭命令的某个或某些功能
        短选项:-c 例如:-l, -h
        长选项:--word  例如:--all, --human-readable
        参数:命令的作用对象,比如文件名,用户名等
    
    ·注意:
        多个选项以及多参数和命令之间使用空白字符分隔
        取消和结束命令执行:Ctrl+c ,Ctrl+d
        多个命令可以用; 符号分开
        一个命令可以用\分成多行

简单命令

    date  显示日期和时间
        -d<字符串>:    显示字符串所指的日期与时间。字符串前后必须加上双引号; 
        -s<字符串>:    根据字符串来设置日期与时间。字符串前后必须加上双引号; 
        -u: 显示GMT; 
        
        date -d"tomorrow" +"%F %H:%M:%S"
        date -d"1 day ago" +"%F %H:%M:%S"
        date -d"1 day " +"%F %H:%M:%S
        第一个数字可以是负数,负数表示将来时间,正数表示前面已经过去的时间,第二个参数minute、hour、day、month、week。
            %Y      year
            %m      month (01..12)
            %d      day of month (e.g., 01)
            %F      full date; same as %Y-%m-%d
            %H      hour (00..23)
            %M       minute (00..59)
            %S      second (00..60)
            
    修改时间:
        date + 月日小时分年.秒 或指定日期形式
        
        ntpdate 172.18.0.1(服务器地址)
            ntpdate - set the date and time via NTP
            ntpdate [ -46bBdqsuv ] [ -a key ] [ -e authdelay ] [ -k keyfile ] 
                    [ -o version ] [ -p samples ] [ -t timeout ] [ -U user_name ] server [ ... ]
            
    Linux的两种时钟
        系统时钟:由Linux 内核通过CPU 的工作频率进行的,date
        硬件时钟:主板上的
    
    hwclock ,clock:  显示硬件时钟
                -s, --hctosys   以硬件时钟为准,校正系统时钟
                -w, --systohc   以系统时钟为准 , 校正硬件时钟
                --set --date=<日期与时间>:设定硬件时钟;
                --test:仅测试程序,而不会实际更改硬件时钟;
                --utc:若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作;
    
    时区:/etc/localtime
        (centos 7)
        timedatectl set-timezone +时区  更改时区
            
    cal 显示日历
        cal :显示当前日历或指定日期的日历
            -l: 显示单月输出; 
            -3: 显示临近三个月的日历; 
            -s: 将星期日作为月的第一天; 
            -m: 将星期一作为月的第一天; 
            -j: 显示“julian”日期; 
            -y: 显示当前年的日历
        
    关机:halt, poweroff
    
    重启:reboot
        -f:  强制,不调用shutdown
        -p:  切断电源
    
    关机或重启:shutdown
        shutdown [OPTION]... TIME [MESSAGE]
            -r: reboot
            -h: halt
            -c :cancel
            TIME:无指定,默认相当于 +1
            now:  立刻, 相当于+0
            +m:  相对时间表示法,几分钟之后;例如 +3
            hh:mm:  绝对时间表示,指明具体时间
    
    用户登录信息查看命令:
        whoami:  显示当前登录有效用户
        who:  系统当前所有的登录会话
        w:  系统当前所有的登录会话及所做的操作
    
    screen 命令:
        创建新screen 会话
            screen –S [SESSION]
        加入screen 会话
            screen –x [SESSION]
        退出并关闭screen 会话
            exit
        剥离当前screen 会话
            Ctrl+a,d
        显示所有已经打开的screen 会话
            screen -ls
        恢复某screen 会话
            screen -r [SESSION]
    
    echo 命令
        功 能:显示字符
        语 法: echo [-neE][ 字符串]
        说 明: echo 会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,  并在最后加上换行号
        选项:
            -E (默认)不支持 \  解释功能
            -n   不自动换行
            -e   启用 \  字符的解释功能
        
        显示变量
            echo "$VAR_NAME“  变量会替换,弱引用 
            echo '$VAR_NAME‘  变量不会替换,强引用 
                ``最聪明
                “” 中间
                ‘’最傻
        启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
            \a      发出警告声  alarm
            \b      退格键  backspace
            \c      最后不加上换行符号 
            \e      escape character 跳过字符
            \f  form feed  换页
            \n      回车换行,换行且光标移至行首 new line
            \r      回车,即光标移至行首,但不换行 
            \t      插入tab
            \\      插入\ 字符
            \0nnn   插入nnn (八进制)所代表的ASCII 字符
            \xHH    插入HH (十六进制)所代表的ASCII字符
                echo -e '\033[43;31;5mmagedu\033[0m'
                    \033 颜色启用
                    43代表背景颜色
                    31代表字的颜色
                    5m代表什么效果

命令行扩展、被括起来的集合

    命令扩展:$( )  或 ``
        把一个命令的输出打印给另一个命令的参数
        echo "This system's name is $(hostname ) "
        echo "i am `whoami ` "
    
    括号扩展:{ }
        打印重复字符串的简化形式
        echo file{1,3,5}
            file1 file3 file5
        rm -f file{1,3,5}
        echo {1..10}
        echo {a..z}
        echo {000..20..2}

tab键

    命令补全
        内部命令:
        外部命令:bash 根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
        用户给定的字符串只有一条唯一对应的命令,直接补全否则,再次Tab 会给出列表
        
    路径补全
        把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名,如果唯一:则直接补全否则:再次Tab 给出列表

双击Tab键

    command 2Tab    所有子命令或文件补全
    string2Tab  以string 开头命令
    /2Tab   显示所有根目录下一级目录,包括隐藏目录
    ./2Tab  当前目录下子目录,包括隐藏目录
    *2Tab   当前目录下子目录,不包括隐藏目录
    ~2Tab   所有用户列表
    $2Tab   所有变量
    @2Tab /etc/hosts 记录 (centos7 不支持)
    =2Tab 相当于ls –A (centos7 不支持)

命令行历史

    ·保存你输入的命令历史。可以用它来重复执行命令
    
    ·登录shell时,会读取命令历史文件中记录下的命令~/.bash_history
    
    ·登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中
    
    ·重复前一个命令,有4 种方法
        重复前一个命令 使用上方向键,并回车执行
        按 !!  并回车执行
        输入 !-1  并回车执行
        按 Ctrl+p  并回车执行
    
    ·使用up (向上)和down(向下)键来上下浏览从前输入的命令
        !:0     执行前一条命令(去除参数)
        Ctrl + n    显示当前历史中的下一条命令,但不执行
        Ctrl + j    执行当前命令
        !n      执行history 命令输出对应序号n的命令
        !-n     执行history 历史中倒数第n个命令
        !string     重复前一个以“string ”开头的命令
        !?string    重复前一个包含string 的命令
        !string:p   仅打印命令历史,而不执行
        !$:p    打印输出上一条命令的最后一个参数的内容
        !*:p    打印输出上一条命令的所有参数的内容
        ^string     删除上一条命令中的第一个string
        ^string1^string2    将上一条命令中的第一个string1 替换为string2
        !:gs/string1/string2    将上一条命令中所有的string1 都替换为 string2
        ctrl +r     来在命令历史中搜索命令
        Ctrl  +g    从历史搜索模式退出
        
        
    ·要重新调用前一个命令中最后一个参数:
        !$ 表示
        Esc, . (点击Esc击 键后松开,然后点击 .  键)
        Alt+ . (按住Alt击 键的同时点击 .  键)

调用历史参数

        command !^ :    利用上一个命令的第一个参数做cmd的参数
        command !$ :    利用上一个命令的最后一个参数做cmd的参数
        command !* :    利用上一个命令的全部参数做cmd的参数
        command !:n  :      利用上一个命令的第n个参数做cmd的参数
        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开头的命令,并获取它的所有参数
    
    ·命令history
        history [-c] [-d offset] [n]
        history -anrw [filename]
        history -ps arg [arg...]
            -c:     清空命令历史
            -d offset:      删除历史中指定的第offset个命令,也就是history列表中的数值
            n:      显示最近的n条历史
            -a:     追加本次会话新执行的命令历史列表至历史文件,add
            -n:     读历史文件中未读过的行到历史列表 
            -r:     读历史文件附加到历史列表
            -w:     保存历史列表到指定的历史文件,默认为历史文件.bash_history
            -p:     展开历史参数成多行,但不存在历史列表中
            -s:     展开历史参数成一行,附加在历史列表后
            
    ·清除已经做过的敏感历史命令
            [root@centos7 ~]#rm -rf /
            rm: it is dangerous to operate recursively on ‘/’
            rm: use --no-preserve-root to override this failsafe
            [root@centos7 ~]#history -w
            [root@centos7 ~]#rm -rf .bash_history 
            [root@centos7 ~]#history -c

命令历史相关环境变量

    ·存放在 /etc/profile 或  ~/.bash_profile  
    
    ·export  变量名="值"     这个只是暂时能用,如果退出所在终端,则会还原。
        HISTSIZE :  命令历史记录的条数
        HISTFILE :  指定历史文件,默认为~/.bash_history
        HISTFILESIZE :  命令历史文件记录历史的条数
        HISTTIMEFORMAT=“%F %T “     显示时间
        HISTIGNORE=“str1:str2*:… “  忽略str1 命令,str2 开头的历史
    
    ·控制命令历史的记录方式:
        环境变量:HISTCONTROL
            ignoredups  默认,忽略重复的命令,连续且相同为“重复”
            ignorespace     忽略所有以空白开头的命令
            ignoreboth  相当于ignoredups, ignorespace 的组合
            erasedups    删除重复命令

bash 的快捷键

    Ctrl + l    清屏,相当于clear 命令
    Ctrl + o    执行当前命令,并重新显示本命令
    Ctrl + s    阻止屏幕输出,锁定
    Ctrl + q    允许屏幕输出
    Ctrl + c    终止命令
    Ctrl + z    挂起命令
    Ctrl + a    光标移到命令行首,相当于Home
    Ctrl + e    光标移到命令行尾,相当于End
    Ctrl + f    光标向右移动一个字符
    Ctrl + b    光标向左移动一个字符
    Alt + f     光标向右移动一个单词尾
    Alt + b  光标向左移动一个单词首
    Ctrl + xx   光标在命令行首和光标之间移动
    Ctrl + u     从光标处删除至命令行首
    Ctrl + k     从光标处删除至命令行尾
    Alt + r     删除当前整行
    Ctrl + w    从光标处向左删除至单词首
    Alt + d     从光标处向右删除至单词尾
    Ctrl + d    删除光标处的一个字符
    Ctrl + h    删除光标前的一个字符
    Ctrl + y    将删除的字符粘贴至光标后
    Alt + c  从光标处开始向右更改为首字母大写的单词
    Alt + u     从光标处开始,将右边一个单词更改为大写
    Alt + l     从光标处开始,将右边一个单词更改为小写
    Ctrl + t    交换光标处和之前的字符位置
    Alt + t     交换光标处和之前的单词位置
    Alt + N     提示输入指定字符后,重复显示该字符N次 
    注意:Alt 组合快捷键经常和其它软件冲突

gnome-terminal

    应用程序-> 附件-> 终端
    支持多个“标签”shell 的图形化终端模拟器
        Ctrl-Shift-n 创建新窗口
        Ctrl-Shift-q  关闭当前窗口
        Ctrl-Shift-t 创建一个标签页
        Ctrl-Shift-w 关闭一 个标签页
        Ctrl-PaUp/PgUn  切换到下一个/ 前一个标签页
        Ctrl-Shift-c  复制选中的文本
        Ctrl-Shift-v  把文本粘帖到当前光标处