• Linux基础


    Linux基础

    计算机系统

    • 硬件系统:主机,外部设备
    • 软件系统:系统软件,应用软件

    冯·诺依曼理论的要点

    1. 数字计算机的数制采用二进制,bit 位, byte 字节 1 byte =8 bit
    2. 计算机应该按照程序顺序执行
    3. 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成

    二进制和十进制转换

    2^0=1=1
    2^1=2=10
    2^3=8=1000
    2^4=16=10000
    2^5=32
    2^6=64
    2^7=128=10000000
    2^8=256=100000000
    2^9=512
    2^10=1024
    2^11=2048
    2^12=4096

    常见单位

    10的18次方 E
    10的15次方 P
    10的12次方 T 二进制 2^40
    10的 9次方 G 二进制 2^30
    10的 6次方 M 二进制 2^20
    10的 3次方 K 二进制 2^10=1024
    10的 2次方 百
    10的 1次方 十
    10的-1次方 分 d
    10的-2次方 厘 c
    10的-3次方 m
    10的-6次方 μ
    10的-9次方 n

    计算机划分(按规模)

    1. 超级计算机
    2. 大型计算机
    3. 小型计算机
    4. 微型计算机

    操作系统的演变

    1. 单用户系统
    2. 批处理系统
    3. 多道程序系统
    4. 分时系统
    5. 个人计算机
    6. 分布式计算机

    Linux的哲学思想

    • 一切都是一个文件(包括硬件)
    • 小型,单一用途的程序
    • 链接程序,共同完成复杂的任务
    • 避免令人困惑的用户界面
    • 配置数据存储在文本中

    用户类型

    root 用户

    • 一个特殊的管理帐户也被称为超级用户
    • root已接近完整的系统控制
    • 对系统损害几乎有无限的能力
    • 除非必要,不要登录为 root

    普通( 非特权 )用户

    • 权限有限
    • 造成损害的能力比较有限

    终端类型

    • 控制台终端: /dev/console
    • 串行终端:/dev/ttyS#
    • 虚拟终端:tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
    • 图形终端:startx, xwindows
      CentOS 6: Ctrl + Alt + F7
      CentOS 7: 在哪个终端启动,即位于哪个虚拟终端
    • 伪终端:pty:pseudo-tty , /dev/pts/# 如:SSH远程连接

    Linux基础命令

    显示提示符格式

    [root@localhost ~]#echo $PS1

    修改提示符格式

    PS1="[e[1;5;41;33m][u@h W]\$[e[0m]"
    PS1="[e[1;32m][[e[0m]	 [e[1;33m]u[e[36m]@h[e[1;31m] W[e[1;32m]][e[0m]\$"
    • e 控制符33
    • u 当前用户
    • h 主机名简称
    • H 主机名
    • w 当前工作目录
    • W 当前工作目录基名
    •  24小时时间格式
    • T 12小时时间格式
    • ! 命令历史数
    • # 开机后命令历史数

    执行命令

    在shell中可执行的命令有两类

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

      • help 内部命令列表

      • enable cmd 启用内部命令

    • enable –n cmd 禁用内部命令

      • enable –n 查看所有禁用的内部命令
    • 外部命令:在文件系统路径下有对应的可执行程序文件

    • 查看路径:

      • **which -a |--skip-alias **
      • whereis

    区别指定的命令是内部或外部命令

    • type COMMAND

    执行外部命令

    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 清除缓存

    命令别名

    alias

    • 定义别名NAME,其相当于执行命令VALUE

    • alias NAME='VALUE'

    • 在命令行中定义的别名,仅对当前shell进程有效

    • 如果想永久有效,要定义在配置文件中

      1. 仅对当前用户:~/.bashrc
      2. 对所有用户有效:/etc/bashrc
    • 编辑配置给出的新配置不会立即生效

    • bash进程重新读取配置文件

    • source /path/to/config_file

    • . /path/to/config_file

    撤销别名

    unalias [-a] name [name ...]

    • -a 取消所有别名

    如果别名同原命令同名,如果要执行原命令,可使用

    • ALIASNAME
    • "ALIASNAME"
    • 'ALIASNAME'
    • command ALIASNAME
    • /path/commmand #只适用于外部命令

    命令格式

    COMMAND [OPTTIONS...] [ARGUMENTS...]
    

    选项:用于启用或关闭命令的某个或某些功能

    • 短选项:UNIX 风格选项,-c 例如:-l, -h
    • 长选项:GNU风格选项,--word 例如:--all, --human
    • BSD风格选项: 一个字母,例如:a,使用相对较少

    参数:命令的作用对象,比如:文件名,用户名等

    注意:

    • 多个选项以及多参数和命令之间使用空白字符分隔
    • 取消和结束命令执行:Ctrl+c,Ctrl+d
    • 多个命令可以用 ";" 符号分开
    • 一个命令可以用分成多行

    常见命令

    查看硬件信息

    查看cpu

    [root@centos7 ~]# lscpu
    [root@centos7 ~]# cat /proccpuinfo

    查看内存

    [root@centos7 ~]# free
    [root@centos7 ~]# cat /proc/meminfo

    查看硬盘和分区

    [root@centos7 ~]# lsblk
    [root@centos7 ~]# cat /proc/partitions

    查看系统版本信息

    查看内核版本

    [root@centos7 ~]# uname -r #ubuntu系统一样

    查看操作系统发行版本

    [root@centos7 ~]# cat /etc/redhat-release
    [root@centos7 ~]# cat /etc/os-release
    [root@Ccentos8 ~]# lsb_release -a 
                            #centos7不可以用,centos8需要安装'redhat-lsb-core'
    root@ubuntu18:~# cat /etc/os-release
    root@ubuntu18:~# cat /etc/issue
    root@ubuntu18:~# lsb_release -a

    日期和时间

    Linux的两种时钟

    1. 系统时钟:由Linux内核通过CPU的工作频率进行的
    2. 硬件时钟:主板

    相关命令

    • date 显示和设置系统时间
    • date +%s
    • date -d @1509536033
    • hwclock,clock: 显示硬件时钟
    • -s, --hctosys 以硬件时钟为准,校正系统时钟
    • -w, --systohc 以系统时钟为准,校正硬件时钟
    • 时区:/etc/localtime
    • 显示日历:cal –y

    关机和重启

    关机

    • halt
    • poweroff

    重启

    • reboot
    • -f 强制,不调用shutdown
    • -p 切断电源

    关机或重启

    shutdown

    shutdown [OPTION]... [TIME] [MESSAGE]
    • -r = reboot

    • -h = halt

    • -c cancel TIME: 无指定,默认相当于+1(centos7)

      ​ now:立刻,相当于+0

      ​ +#:相对时间表示法,几分钟之后;例如+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]

    tmux命令

    • 新建指定名称会话:tmux new -s <session-name>
    • 查看当前所有会话:tmux ls ,tmus list-session;ctrl+b,s
    • 分离会话:tmux datach;ctrl+b,d
    • 接入会话:tmux attach -t <session-name>
    • 杀死会话:tmux kill-session -t <session-name>
    • 切换会话:tmux switch -t <session-name>
    • 列出所有快捷键:tmux list-keys
    • 列出所有命令及参数:tmux list-commands

    echo

    选项

    • -E (默认)不支持 解释功能
    • -n 不自动换行
    • -e 启用 字符的解释功能

    显示变量

    • echo "$VAR_NAME” 变量会替换,弱引用

    • echo '$VAR_NAME’ 变量不会替换,强引用

    • 启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出

      • a 发出警告声

      •  退格键

      • c 最后不加上换行符号

      • e escape,相当于33

      •  换行且光标移至行首

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

      •  插入tab

      •  插入字符

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

        echo -e '33[43;31;5mteste[0m'
      • xHH 插入HH(十六进制)所代表的ASCII数字(man 7 ascii)

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

      命令行扩展:****``  $****()

      把一个命令的输出打印给另一个命令的参数

      $(COMMAND) 或 `COMMAND`
      
      

      比较 “ ” ,‘ ’, ``三者区别

      [root@centos8 ~]#echo "echo $HOSTNAME"
      echo centos8.localdomain
      [root@centos8 ~]#echo 'echo $HOSTNAME'
      echo $HOSTNAME
      [root@centos8 ~]#echo `echo $HOSTNAME`
      centos8.localdomain
      
      结论:
      单引号:六亲不认,变量和命令都不识别,都当成了普通的字符串
      反向单引号:变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的
      命令继续
      双引号:不能识别命令,可以识别变量
      
      

      括号扩展:{ }

      {} 可以实现打印重复字符串的简化形式

      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键补全

      tab 键可以实现命令及路径等补全,提高输入效率,避免出错

      命令补全

      • 内部命令:
      • 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
      • 命令的子命令补全,需要安装 bash-completion

      注意:用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次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. 重复前一个命令使用上方向键,并回车执行
      2. 按 !! 并回车执行
      3. 输入 **!-1 **并回车执行
      4. 按 Ctrl+p 并回车执行
    • !:0 执行前一条命令(去除参数)

    • Ctrl + n 显示当前历史中的下一条命令,但不执行

    • Ctrl + j 执行当前命令

    • !n 执行history命令输出对应序号n的命令

    • !-n 执行history历史中倒数第n个命令

    • !string 重复前一个以“string”开头的命令

    • !?string 重复前一个包含string的命令

    • !string:p 仅打印命令历史,而不执行

    • !$:p 打印输出 !$ (上一条命令的最后一个参数)的内容

    • !*:p 打印输出 !*(上一条命令的所有参数)的内容

    • ^string 删除上一条命令中的第一个string

    • string1string2 将上一条命令中的第一个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个命令
      • n: 显示最近的n条历史
      • -a: 追加本次会话新执行的命令历史列表至历史文件
      • -r: 读历史文件附加到历史列表
      • -w: 保存历史列表到指定的历史文件
      • -n: 读历史文件中未读过的行到历史列表
      • -p: 展开历史参数成多行,但不存在历史列表中
      • -s: 展开历史参数成一行,附加在历史列表后

    命令历史相关环境变量

    • HISTSIZE:命令历史记录的条数

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

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

    • HISTTIMEFORMAT=“%F %T “ 显示时间

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

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

      • ignoredups 默认,忽略重复的命令,连续且相同为“重复”
      • ignorespace 忽略所有以空白开头的命令
      • ignoreboth 相当于ignoredups, ignorespace的组合
      • erasedups 删除重复命令

      持久保存变量

      以上变量可以 export 变量名="值" 形式存放在 /etc/profifile 或 ~/.bash_profifile

    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组合快捷键经常和其它软件冲突

    whatis

    • 显示命令的简短描述
    • 使用数据库
    • 刚安装后不可立即使用
    • makewhatis | mandb制作数据库
    • 使用示例:
    • whatis cal 或 man –f cal

    查看命令的帮助

    内部命令:

    • help COMMAND
    • man bash

    外部命令和软件:

    • COMMAND --help 或 COMMAND -h
    • 使用手册(manual) man COMMAND
    • 信息页 info COMMAND
    • 程序自身的帮助文档 README,INSTALL,ChangeLog
    • 程序官方文档 官方站点:Documentation
    • Google

    --help 或 -h 选项

    显示用法总结和参数列表,大多数命令使用,但并非所有的

    格式说明:

    • [] 表示可选项
    • CAPS或 <> 表示变化的数据
    • ... 表示一个列表
    • x |y| z 的意思是“ x 或 y 或 z ”
    • -abc的 意思是 -a -b –c
    • { } 表示分组

    man命令

    介绍

    • 提供命令帮助的文件
    • 手册页存放在/usr/share/man
    • 几乎每个命令都有man的“页面”
    • man页面分组为不同的“章节”
    • 统称为Linux手册
    • man命令的配置文件:/etc/man.config | man_db.conf
    • MANPATH /PATH/TO/SOMEWHERE: 指明man文件搜索位置
    • man -M /PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索COMMAND命令的手册页并显示
    • 中文man需安装包man-pages-zh-CN

    man 章节

    1. 用户命令
    2. 系统调用
    3. C库调用
    4. 设备文件及特殊文件
    5. 配置文件格式
    6. 游戏
    7. 杂项
    8. 管理类的命令
    9. Linux 内核API

    用法

    • 查看man手册页
      • man [章节] keyword
    • 列出所有帮助
      • man –a keyword
    • 搜索man手册
      • man -k keyword 列出所有匹配的页面
    • 打印man帮助文件的路径
      • man –w [章节] keyword

    快捷键

    • man命令的操作方法:使用less命令实现
      • space, ^v, ^f, ^F: 向文件尾翻屏
      • b, ^b: 向文件首部翻屏
      • d, ^d: 向文件尾部翻半屏
      • u, ^u: 向文件首部翻半屏
      • q: 退出
      • #:跳转至第#行
      • 1G: 回到文件首部
      • G:翻至文件尾部

    man 搜索

    • /KEYWORD: 以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写;
      • n: 下一个
      • N:上一个
    • ?KEYWORD: 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写;
      • n: 跟搜索命令同方向,下一个
      • N:跟搜索命令反方向,上一个
  • 相关阅读:
    张一鸣:平常心做非常事|字节跳动9周年演讲全文
    实验二:分词
    helm部署EFK收集应用日志,ingress-nginx日志解析。
    Terraform
    Windows 11 下载
    Kubernetes Pod中容器的Liveness、Readiness和Startup探针
    Kubernetes使用Keda进行弹性伸缩
    K8s 部署 Prometheus + Grafana
    CSDN & 博客园
    zipkin,pinpoint和skywalking对比
  • 原文地址:https://www.cnblogs.com/zhangty333/p/13695811.html
Copyright © 2020-2023  润新知