Linux里的基本知识

2023年 7月 19日 55.7k 0

1.操作系统是什么

是一组程序,由代码组成,用来执行任务,调度硬件,指挥硬件

程序:执行特定任务的一串代码,是静态的

linux当中命令的本质就是一个个的程序

2.Shell

2.1 Shell是什么

Linux系统中的还运行的一种特殊程序,在用户和内核之间充当“翻译官”,将人类的高级语言转化为二进制语言

image.png

用户使用应用程序发布指令,比如使用浏览器访问网页;

shell去通知操作系统需要进行什么样的操作(相当于解释层);

内核相当于操作系统去指挥硬件;

硬件才能工作,否则无法交互。

每打开一个交换界面都必须加载一个shell程序

centos7下Bash是Linuk系统中默认使用的shell程序,Bash是shell的一种

2.2 shell的内部命令与外部命令的区别

内部命令 外部命令
集成于shell解释器程序内部的一些特殊指令,也称为指令 Linux系统中能够完成特定功能的脚本文件或二进制程序
属于shell的一部分 属于shell解释器程序之外的命令
没有单独对应的系统文件 每个外部命令对应了系统中的一个文件
自动载入内存,可以直接使用 必须知道其对应了的文件位置,由shell加载后才能执行

hepl命令可以查看内部命令

[root@localhost opt]# help

可以使用type命令来区分内外部命令

[root@localhost /]# type cd         
cd 是 shell 内嵌                       //内嵌代表内部命令
[root@test1 /]# type -a ls
ls 是 `ls --color=auto' 的别名        //别名代表外部命令        
ls 是 /usr/bin/ls                    //外部命令会有程序路径
      
[root@localhost /]# whereis ls       //whereis 可以查找命令具体的位置所在
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

[root@localhost ~]# type -a echo 
echo 是 shell 内嵌
echo 是 /usr/bin/echo

2.3命令执行的过程

  • 输入一个命令
  • 系统判断是内部还是外部
  • 如果是内部命令直接执行
  • 如果是外部命令,第一次先去规定好的路线中找文件,找到文件直接运行,找不到直接报错
  • 第二次运行这个命令时,外部命令先去hash表中找,如果有运行,如果没有直接报错
  • 2.4 hash缓存表

    [root@localhost ~]# hash                  //或者使用hash
    hash 缓存
    使用过一次  外部命令   我就会将这个外部命令  缓存在hash
    外部命令需要取找他的路径才能执行,  直接在缓存 调用 加快了速度
    内部 外部   hash 的优先级
    内部  hash  外部
    hash -d 加缓存里的命令 单独删除
    hash -r 删除所有
    

    3.命令行的格式和基本命令

    在 Linux 操作系统中,凡是在字符操作界面中输入能够完成特定操作和任务的字符串都 可以称为命令。

    • 严格来说,命令通常只代表实现某一类功能的程序的名称。

    格式:命令行 空格【选项】 空格 【参数】

    【 】:可以加也可以不加

    image.png

    解释命令字 选项 参数各自的意思及具体使用方法

  • 命令字 是整条命令中最关键的一部分 唯一确定
  • 选项 短格式选项:使用“-”符号引导 通常 一个字母 长格式选项:使用“--”符号引导 通常完整的单词
  • 参数 命令字的处理对象 可以是文件名、目录(路径)名或用户名等内容 个数可以是零到多个
  • 3.1命令编辑的辅助操作

    快捷键 功能
    Tab键 自动补齐(两次可以显示所有选项)
    反斜杠“” 强制换行或转义
    Ctrl+a 光标移动到最前
    Ctrl+e 光标移动到最后
    Ctrl+u 清空至行首不包括当前光标处的 字符
    Ctrl+l 清屏
    Ctrl+c 取消本次命令编辑
    ## 3.2help 获取命令帮助
    #内部命令查看帮助
    echo: echo [-neE] [参数 ...]
        将参数写到标准输出。
        
        在标准输出上显示 ARG 参数后跟一个换行。
        
        选项:
          -n	不要追加换行
          -e	启用下列反斜杠转义的解释
          -E	显式地抑制对于反斜杠转义的解释
        
        `echo' 对下列反斜杠字符进行转义:
          a	警告(响铃)
          b	退格
          c	抑制更多的输出
          e	转义字符
          f	格式提供
          n	换行
          r	回车
          t	横向制表符
          v	纵向制表符
          \	反斜杠
          nnn	以 NNN (八进制)为 ASCII 码的字符。 NNN 可以是
        	0到3个八进制数字
          xHH	以 HH (十六进制)为值的八比特字符。HH可以是
        	一个或两个十六进制数字
        
        退出状态:
        返回成功除非有写错误发生
    

    3.3 --help

    查看外部命令

    [root@localhost ~]# ls --help
    [root@localhost dev]# useradd --help
    

    3.3 man

    [root@localhost ~]# man man
    
     该清单是一组用冒号分隔的欲查找的手册清单。此选项将覆盖                MANSECT               环境变量。
                  有些指令或程序可能有一个以上的主题,它们位于不同的区段中。因此,要查看较后的区 段,你可以在此指定  man
                  查找区段的顺序。具体区段划分如下所示:
                  区段1:用户指令
                  区段2:系统调用
                  区段3:程序库调用
                  区段4:设备
                  区段5:文件格式     shadow passwd fstab
                  区段6:游戏
                  区段7:杂项
                  区段8:系统指令
                  区段9:内核内部指令
                  区段n:Tcl或Tk指令
    
    

    3.4目录查询操作

    3.4.1pwd (print work directory)

    [root@localhost ~]# pwd       //显示当前路径
    /root
    [root@localhost bin]# cd /bin
    [root@localhost bin]# ll /bin
    lrwxrwxrwx. 1 root root 7 8月   6 20:57 /bin -> usr/bin
    [root@localhost bin]# pwd -P
    /usr/bin
    #-P 显示真实路径
    快捷方式   不是文件真正的路径
    

    3.4.2 cd

    cd 目标位置change directory

    [root@localhost ~]# cd /etc/    传送到根目录下的etc文件
    [root@localhost etc]# 
    [root@localhost ~]# cd          传送到家目录
    [root@localhost ~]# 
    [root@localhost ~]# cd  ~       这也是传送到家目录
    [root@localhost ~]# 
    

    绝对路径:以根开头的文件路径

    相对路径:不以根开头的文件路径

    相对路径的表现形式:

    [root@localhost opt]#cat passwd
    #此处省略了路径
    [root@localhost opt]#cat ./passwd   “.”表示当前目录
    #查看当前路径下的passwd文件
    [root@localhost opt]#cd ./ky31/
    #切换到当前目录下的 ky31 文件夹
    [root@localhost ky31]#
    [root@localhost ky31]#cd ../../     “..”表示上一层目录
    #切换到上两层的目录
    [root@localhost /]#
    

    3.4.3 ls

    ls [选项] [文件或目录… ]

    • -l 已长格式显示文件和目录列表 ll=ls -l
    • -a 显示全部包括隐藏文件
    • -A 显示全部文件或隐藏文件,但不包括 . 和..
    • -d 仅列出目录本身,而不是列出目录内的文件数据
    • -h 友好显示文件大小(human,人性化)
    • -R 递归显示该目录及该目录的子目录下的所有内容
    [root@test1 ~]# ls -a 
    #显示所有 包括隐藏文件
    .                .cache     .ICEauthority         .viminfo.tmp  下载
    ..               .config    initial-setup-ks.cfg  .Xauthority   音乐
    anaconda-ks.cfg  .cshrc     .lesshst              公共          桌面
    .bash_history    .dbus      .local                模板
    .bash_logout     .esd_auth  mysql.sh              视频
    .bash_profile    hhh.cgg    .tcshrc               图片
    .bashrc          .history   .viminfo              文档
    ################################################
    [root@test1 ~]# ls -A 
    #显示所有 不包括. ..的隐藏文件
    anaconda-ks.cfg  .config    .ICEauthority         .viminfo      图片
    .bash_history    .cshrc     initial-setup-ks.cfg  .viminfo.tmp  文档
    .bash_logout     .dbus      .lesshst              .Xauthority   下载
    .bash_profile    .esd_auth  .local                公共          音乐
    .bashrc          hhh.cgg    mysql.sh              模板          桌面
    .cache           .history   .tcshrc               视频
    ########################################################
    [root@test1 ~]# ls -d   
    #只显示本目录
    .
    
    
    [root@test1 ~]# ls -d /etc
    ######################################################
    [root@test1 ~]# ls -lh   //加单位k友好显示
    

    颜色表示的文件类型:

    • 黑色数据文件 普通文件
    • 绿色 可执行文件
    • 黄色 块设备文件硬件设备(硬盘)
    • 红色 压缩包
    • 蓝色 文件夹
    • 天蓝色 连接文件(快捷方式)

    3.4.4 文件名称

    文件夹二级在根目录下

  • bin:普通用户二进制命令
  • etc:默认配置文件
  • lib:库
  • mnt:挂载点文件
  • opt:第三方软件
  • root:超级管理员的家目录
  • sbin:超级管理员使用的二进制命令
  • tmp:系统临时文件
  • var/log/:子文件 日志
  • boot:开机启动必须得一些文件
  • dev:硬件,硬盘
  • proc:进程(正在运行的程序)
  • 3.4.5 文件类型

    文件开头的第一个字符

  • — 普通文件
  • d 目录文件directory
  • l 符号链接文件link
  • b 块设备block 比如直接读1块 /dev 4k (512*8(扇区)=4096字节=4k)
  • c 字符设备character 一个字符一个字符读取 /dev/zero (/dev/null)
  • p 管道文件pipe 两个软件联系 A-管道文件-B A 写 B 读 单向的
  • s 套接字文件socket 可以双向的
  • 3.4.6 通配符

    去搭配ls使用,匹配文件名

    符号 效果
    匹配一个字符 f?.txt
    * 匹配所有非隐藏的字符无论多长多短,但不匹配 "." 开头的文件,即隐藏文件
    {1..10} 1到10
    {a..z} a b c ...z
    {A..Z} A B C .....Z
    [123]([此处括号里值代表一个字符]) 取其中之一有就显示没有也无所谓
    [a-z]单个小写字母 范围需要注意
    [0-9]单个数字 匹配数字范围(0123456789)
    转义符,表示原来的意思
    [[:lower:]] 小写字母表示 a-z
    [[:upper:]] 大写字母表示 A-Z
    [^zhou] 匹配列表中的所有字符以外的字符
    [[:digit:]] 任意数字,相当于0-9
    ### 3.5 alias (别名)
    alias 命令别名='命令'
    [root@localhost ~]# alias wa='cd ~'
    [root@localhost ~]# 
    

    unalias 别名命令 删除命令

    [root@localhost ~]# unalias wa
    [root@localhost ~]# 
    

    加别名命令 显示原始命令

    直接输入alias可以查看全部的别名命令

    [root@localhost ~]# alias
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    

    命令的优先级:绝对路径>别名>内部>hash>外部命令(先查找别名在查找内部命令,缓存最后外部)

    3.6 du (disk usage)

    查看当前所在文件夹占用了磁盘的多少单元块。默认1单元块为4K, 不满4K 按4k算。

    du [选项] [文件或目录… ]

    选项 说明
    -a 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录
    -h 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果
    -s(--summarize) 只统计所占用空间总的(Summary)大小,而不是统计每个子目录、文件的大小
    --max-depth=n (-d 1) 最大显示到第n层
    --exclude 不计入统计

    image.png

    image.png

    注意:a s无法同时使用

    3.7创建文件夹

    • 文件名最长255个字节
    • 包括路径在内文件名称最长4095
    • 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用。

    3.7.1 创建目录 mkdir (make directories)

    mkdir [选项] 目录位置及名称…

    image.png

    mkdir -p 递归创建 没有文件夹 会自动递归创建

    [root@localhost data]# mkdir -p aaa/bbb/cccc
    # 递归创建文件夹
    [root@localhost data]# ls
    a  aaa  b  c  d
    
    [root@localhost data]# tree
    .
    ├── a
    ├── aaa
    │   └── bbb
    │       └── cccc
    ├── b
    ├── c
    └── d
    
    
    mkdir  -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
    #一次建立多个文件
    

    3.7.2 touch

    • touch 新文件…(可为空) 文件名 不存在就是新建空文件
    • touch 当已有创建的文件时不会破坏已有文件,别为刷新文件创建时间

    每个文件有三个时间戳:

  • access time 访问时间,atime,读取文件内容
  • modify time 修改时间,mtime,改变文件内容(数据)
  • change time 改变时间,ctime,元数据发生改变(元数据 文件大小 权限 )
  • 创建文件1 2 3 并查看时间

    image.png

    再次创建已有文件就会刷新文件时间

    image.png

    3.8 硬连接与软连接

    硬连接: 可以将硬连接理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。硬连接文件与原始文件其实是用一文件,只不过名字不同而已。每添加一个硬连接,该文件的inode连接数就会增加1,而且只有当该文件的inode连接数为0时,才算彻底将它删除

    ln 源文件或目录… 链接文件或目标位置
    硬连接的特点:

    1.硬连接以文件副本形式存在,不占用实际空间。

    2.不允许给目录创建硬连接。

    3.硬连接只有在同一个文件系统中才能创建

    [root@localhost data]# mkdir  /data
    [root@localhost data]# cd /data
    [root@localhost data]# cp /etc/passwd /data/f1.txt
    [root@localhost data]# ls
    f1.txt
    [root@localhost data]# ln /data/f1.txt /data/f11.txt
    #建立硬连接
    #不能跨分区建立连接 无法对文件夹创建 
    

    软连接: 软连接仅仅包含所连接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行连接。

    ln -s 源文件或目录… 链接文件或目标位置

    软连接的特点:

    1.软连接以路径形式存在可以跨文件系统,硬连接不行

    2.软连接可以对一个不存在的文件名进行连接

    3.软连接可以对目录进行连接

    删除源文件无法访问,再新建同名文件后依然可以访问
    可以跨设备
    可以支持文件夹
    相对路径与绝对路径 建议绝对路径
    [root@localhost data]# ln -s f1.txt /opt/f1111.txt
    [root@localhost data]# ll /opt/
    总用量 8
    lrwxrwxrwx. 1 root root    6 8月  26 22:17 f1111.txt -> f1.txt
    -rw-r--r--. 3 root root   66 8月  26 21:45 f111.txt
    -rw-r--r--. 1 root root 2573 8月  26 11:55 passwd
    会认为f1111.txt 与f1.txt在同一目录
    

    3.9 CP

  • cp [选项]… 源文件 目标 相当改名复制 文件夹 文件相当于 改名字另存为
  • cp [选项]... 源文件... 文件夹 多个源文件只能复制到文件夹
  • 选项 说明
    -f 覆盖目标同名文件或目录时不进行提醒,直接强制复制
    -i 覆盖目标同名文件或目录时提醒用户确认
    -p 复制时保持源文件的权限、属主及时间标记等属性不变
    -r 复制目录时必须使用此选项,表示递归复制所有文件及子目录
    -a 完整保留所有的信息
    -v 可视化
    -u 相当于增备,差异备份(只对文件夹起作用)

    image.png

    3.10 mv 移动

    mv [选项] … 源文件或目录… 目标文件或目录 单个文件

    移动 或者改名

  • -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
  • -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
  • -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户
  • -v:显示文件或目录的移动过程
  • 3.11 rm 删除文件

    rm 【选项】 要删除的文件或目录

  • -f..强制
  • -i..交互
  • -r..递归(删除目录需要)
  • image.png

    3.12 find

    命令的特点:

  • 精准查找
  • 实时查找
  • 支持查找条件巨多
  • 格式: find 【查找范围】 【查找选项】 【查找具体条件】 【处理工作】

    查找路径:指定具体目标路径;不指定为默认为当前目录

    查找条件:可以对文件名、大小、类型、权限等标准进行查找;默认为找出指定路径下的所有文件

    处理动作:对符合条件的文件做操作,默认输出至屏幕(print)

    查找类型 关键字 说明
    按名称查找 -name 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 -iname "文件名称" 不区分大小写
    按文件大小查找 -size 根据目标文件的大小进行查找 一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 常用的容量单位包括 kB(注意 k 是小写)、MB、GB
    按文件属主查找 -user 根据文件是否属于目标用户进行查找
    按文件类型查找 -type 根据文件的类型进行查找 文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等
    按inode号 -inum 根据文件inode号查找
    按权限查找 -perm 按文件权限查找
    最大搜索目录深度 -maxdepth level 将你的文件已分级的形式查找
    最小搜索目录深度 -mindepth level 同上 find /etc -maxdepth 2 -mindepth 2
    #### 3.12.1 按名称查找

    image.png

    3.12.2 按文件大小

    -size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感
    #UNIT: #表示(#-1, #],如:6k 表示(5k,6k]
    -#UNIT #表示[0,#-1],如:-6k 表示[0,5k]
    +#UNIT #表示(#,∞),如:+6k 表示(6k,∞)
    

    image.png

    3.12.3 根据文件类型查找

    -type TYPE
    TYPE可以是以下形式:
    f: 普通文件
    d: 目录文件
    l: 符号链接文件
    s:套接字文件
    b: 块设备文件
    c: 字符设备文件
    p: 管道文件
    

    3.12.4 处理动作

    -print:默认的处理动作,显示至屏幕
    -ls:类似于对查找到的文件执行"ls -dils"命令格式输出
    -fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
    -delete:删除查找到的文件,慎用!
    -ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
    -exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令
    {}: 用于引用查找到的文件名称自身
    

    例子:

    #备份配置文件,添加.orig这个扩展名
    find  -name  ".conf"  -exec  cp {} {}.orig ;
    #提示删除存在时间超过3天以上的joe的临时文件
    find /tmp -ctime +3 -user joe -ok rm {} ;
    #在主目录中寻找可被其它用户写入的文件
    find ~ -perm -002  -exec chmod o-w {} ;
    #查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
    find /data –type f -perm 644  -name "*.sh" –exec chmod 755 {} ;
    
    #fls
    find /mnt/ -name "*.bak" -fls abc
    #将mnt  下  已bak结尾的文件     保存成abc
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论