Linux 笔记_基础_1

Linux 笔记_基础_1


  • /bin

    • bin 是 Binaries(二进制文件)的缩写,这个目录存放着最经常使用的基本命令
    • 比如 ls 就是在 /bin/ls 目录
  • /boot

    • 这里存放的是启动 Linux 时使用的一些核心文件系统引导文件,包括一些连接文件以及镜像文件。
  • **/dev **

    • dev 是 Device(设备)的缩写,该目录存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /etc

    • etc 是 Etcetera(等等)的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home

    • 用户的主目录,在 Linux 中,每个用户都有一个自己的目录(称为用户目录),一般该目录名是以用户的账号命名的。
  • /lib

    • lib 是 Library(库)的缩写这个目录里存放着系统最基本的共享库文件,类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found

    • 这个目录一般情况下是空的,当系统非法关机后,可能会产生一些丢失、需要寻回的文件。
  • /media

    • 移动设备挂载点,linux 系统会自动识别一些设备,例如U盘、光盘等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt

    • 临时文件系统挂载点,用于临时挂载别的文件系统,比如将光盘挂载在 /mnt/ 上,然后进入该目录就可以查看光盘里的内容了。
  • /opt

    • 第三方应用程序,opt 是 optional(可选)的缩写,这是给主机额外安装软件所设置的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc

    • 内核与进程相关信息,proc 是 Processes(进程)的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

    • 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的 ping 命令,使别人无法 ping 你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

  • /root

    • 系统管理员 root 的用户目录
  • /sbin

    • s 就是 Super User 的意思,是 Superuser Binaries(超级用户的二进制文件)的缩写,这里存放的是系统管理员使用的系统管理程序,管理类的基本命令
  • /selinux

    • 这个目录是 Redhat/CentOS 所特有的目录,SELinux 是一套比较复杂的安全机制,这个目录存放 的是 SELinux 的相关文件。
  • /srv

    • 该目录存放一些系统运行一些服务用到的数据
  • /sys

    • 用于输出当前系统上硬件设备相关信息的虚拟文件系统
    • 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
      • sysfs 文件系统集成了下面3种文件系统的信息:
        • 针对进程信息的 proc 文件系统
        • 针对设备的 devfs 文件系统
        • 针对伪终端的 devpts 文件系统
      • 该文件系统是内核设备树的一个直观反映。
      • 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp

    • tmp 是 temporary(临时)的缩写这个目录用来存放一些临时文件
  • /usr

    • 共享的只读数据,usr 是 unix shared resources(共享资源)的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
    • /usr/bin
      • 系统用户使用的应用程序。
    • /usr/sbin
      • 超级用户使用的比较高级的管理程序和系统守护程序。
    • /usr/src
      • 内核源代码默认的放置目录。
  • /var

    • var 是 variable(变量)的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的文件放在这个目录下。包括各种日志文件。
    • mail 的预设放置也是在这里。
  • /run

    • 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
  • /bin,/sbin,/usr/bin,/usr/sbin,对比

    • /bin,/usr/bin,是给系统用户使用的指令(除root外的通用户),
    • 而 /sbin,/usr/sbin,则是给 root 使用的指令。


  • command --versioncommand -version
    • 查看命令的版本信息
  • command --help
    • 查看命令的帮助信息
  • man command
    • 查看命令的手册(manual)
    • 使用 man 时的操作键:
      • 空格键
        • 翻页
      • Enter键
        • 一次滚动一行
      • b
        • 向上滚动一屏
      • f
        • 向下滚动一屏
      • q
        • 退出
      • /word
        • 搜索word字符串
        • n
          • 搜索下一个
        • N
          • 搜索上一个


命令 英文 说明
pwd print working directory 查看当前所在文件夹
cd [目录名] change directory 切换文件夹
ls list 查看当前目录下的内容
touch [文件名] touch 如果文件不存在, 新建文件
mkdir [目录名] make directory 创建目录
rmdir [目录名] remove directory 删除目录
rm [文件名] remove 删除指定的文件名
cp copy 复制
mv move 移动(剪切)

显示当前所在目录的路径

  • -P 参数
    • 如果当前所在目录是一个 “链接” ,显示真实路径
    • 缺省,相当于使用了 -L 参数,显示逻辑路径

  • cd ..
    • 上一级目录
  • cd /
    • 根目录
  • cd ~
    • 用户目录
  • cd -
    • 后退至上一次所在目录
  • cd [目录名]
    • cd /tmp/test
      • 切换到 /tmp/test 目录
    • cd test
      • 切换到当前路径下的 test 目录
    • cd /test
      • 切换到根目录下的 test 目录
    • cd ~/test
      • 切换到用户目录下的 test 目录

  • ls -a
    • 列出所有
  • ls -A
    • 列出除了 ...以外的所有
  • ls -l
    • 显示详细信息,每个文件一行
    • 可简写为 ll
    • ll_and_ls.png
      Linux 基础 1(1.ll 与 ls)
  • ls -h
    • 搭配 -l 参数一起使用,单独使用无效
    • 以对人类(human)友好的方式显示大小信息(使用 K,M,G,T … 等单位)
  • ls -p
    • 目录后面添加 “/”,以示区别
  • 排序相关
    • ls -S
      • 按大小排序
    • ls -t
      • 按修改时间排序
    • ls -r
      • 反向排序
  • 常用组合
    • ls -AlphS
    • ls -Alpht
    • ls -AlphSr
    • ls -Alphtr
    • 助记:Alpha,阿尔法
  • ls -R
    • 递归显示子目录
    • 不可控制层数,不推荐使用,建议安装 tree 工具替代
  • ls -d */

  • 若文件已存在,则修改文件的最后访问时间
  • 若文件不存在,则创建文件
  • vi 或 nano ,也可以用于创建文件,区别在于:
    • 使用 vi 或 nano,是在保存文件的时候才创建文件,如果不执行保存,文件并不会创建
    • 使用 touch 命令,则立即创建文件
touch_vi_nano.png
Linux 基础 1(2.touch vi nano 创建文件)
  • mkdir test
    • 创建目录
  • mkdir -p test/test1
    • 递归方式,创建多级目录

  • mkdir test

    • 删除目录
    • -p 参数
      • 递归方式,删除多级目录
    • -v 参数
      • 显示删除过程
  • 只能删除空目录,基本不用,使用 rm 命令替代

  • rm 1.txt
    • 删除文件
  • rm -r test
    • 删除目录
    • -r 参数
      • 不管文件夹是否为空,删除文件夹时,必须使用 -r 参数
      • recursive(递归),递归方式删除目录,及目录下的所有内容
  • rm - rf *
    • 清空当前目录
    • -f 参数
      • force(强制),强制删除,忽略不存在的文件,不提示用户进行确认(直接删除)
  • 绝对要避雷的命令:rm -rf / ,这会删除整个系统

  • cp sourceFile targetFilecp sourceDirectory/sourceFile targetDirectory/targetFile
    • 复制文件
  • cp -r sourceDirectory targetDirectory
    • 递归方式,复制整个文件夹

  • mv sourceFile targetFile
    • 重命名
  • mv sourceDirectory/sourceFile targetDirectory/targetFile
    • 移动文件
  • mv -r sourceDirectory targetDirectory
    • 递归方式,移动整个文件夹


  • 打包
    • tar -cvf 打包名.tar 被打包的目录
    • tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3
      • -c 参数
        • create,创建打包文件
      • -v 参数
        • verbosely,详细地,输出过程
      • -f
        • 指定档案的文件名称,参数后面一定是 .tar 包名,所以必须放到最后
  • 解包
    • tar -xvf 打包名.tar
      • 解包到当前目录
      • -x 参数
        • extract,提取,解包
    • tar -xvf 打包名.tar -C 解包路径位置
      • 解包到指定目录
      • -C 参数
        • directory,解压到指定目录,
        • 注意:解压目录必须存在

  • tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录
    • 压缩文件
    • -z 参数
      • gz 包格式
  • tar -zxvf 打包文件.tar.gz
    • 解压缩文件
  • tar -zxvf 打包文件.tar.gz -C 目录
    • 解压缩到指定目录

由 bzip2 包提供的功能,安装:yum install bzip2 -y

  • tar -jcvf 打包压缩文件名.tar.bz2 被压缩的文件/目录
    • 压缩文件
    • -j 参数
      • bz2 包格式
  • tar -jxvf 打包文件.tar.bz2
    • 解压缩文件
  • tar -jxvf 打包文件.tar.bz2 -C 目录
    • 解压缩到指定目录


vi [文件]

老牌文本编辑器,基本上是所有 类Unix 系统的预设,(熟练使用的话)效率很高,但上手需要一定时间

这里只简单贴两张图,详细的请参考

vim-vi-workmodel.png
Linux 基础 1(3.vi vim 三种模式)
vi-vim-cheat-sheet-sch.gif
Linux 基础 1(4.vi vim 键盘图)

vim [文件]

可以说是 vi 的升级版,很多程序员拿来 coding

nano [文件]

nano 是一个轻量级的文本编辑器,日常改改配置文件,简单修改文档之类的完全够用

快捷键都显示在屏幕下侧,学习成本几近于零

但基本上各发行版都没有预装,需要手动安装,在成功安装之前,很多时候还是要使用 vi 来修改配置文件之类的,所以还是要学一下 vi 的基本使用

  • -b
    • 列出行号,空白行不标行号
  • -n
    • 列出行号,连同空白行也会有行号
  • -E
    • 在每行结尾显示 $
  • -T
    • 将 [tab] 以 ^I 显示出来
  • -v
    • 列出一些缺省状况不显示的特殊字符
  • -A
    • 相当于 -vET 的组合选项

一页一页地显示内容

  • -s 参数
    • 将多个空行压缩为一行
  • -NUM 参数
    • 指定每次滚动的行数,NUM直接替换为数字
  • +NUM 参数
    • 从文件第 NUM 行开始显示
  • +/STRING 参数
    • 从匹配到搜索字符串 STRING 的那一行开始显示
  • 使用中的快捷键
    • h
      • 查看帮助
      • 使用 “翻页、滚动” 快捷键,回到文档查看的页面
    • 空格 或 Ctrl+F
      • 向下翻一页
    • Ctrl+B
      • 后退一页
    • Enter 键
      • 向下滚动一行
    • =
      • 输出当前行的行号
    • q
      • 离开 more

类似 more ,但提供更多功能(与名字相反),其他参数、快捷键请参考帮助

  • [ pagedown ] 或 空格 或 fCtrl + FCtrl + V
    • 向下翻一页
  • [ pageup ] 或 bCtrl + B
    • 后退一页
  • /字符串
    • 向下搜寻『字符串』的功能
    • n
      • 向下查找
    • N
      • 向上查找

  • head [fileName]
    • 缺省查看前 10 行
  • head -n 3 [fileName]tail -3 [fileName]
    • 查看文件的前 3 行
  • head -v [fileName]
    • 在第一行显示文件的全路径名

  • tail [fileName]
    • 查看文件的末尾几行,缺省 10 行
  • tail -n 20 [fileName]tail -20 [fileName]
    • 查看文件末尾的指定行数
  • tail -f [fileName]tail -20f [fileName]
    • 查看该文件的末尾几行,并随着文件的增长而自动追加,可以用来看日志文件
    • Ctrl + C 退出
  • tail -v [fileName]
    • 在第一行显示文件的全路径名


find path [options]

  • 按文件名查找
    • find /etc -name yum.conf
      • 在 /etc 目录下查找 yum.conf 文件
    • find /etc -name 'yum'
      • 在 /etc 目录下查找文件名中含有字符串 “yum” 的文件
    • find . -name 'yum*'
      • 使用通配符*(0个或者任意多个),在当前目录下查找文件名以 “yum” 开头的文件
  • 按其他特征查找
    • find / -atime -2
      • Access Time,文件读取访问时间,查找最后48小时访问过的文件
    • find / -empty
      • 查找空的文件或者文件夹
    • find / -group susan
      • 查找属组为 susan 的文件
    • find / -mtime -1
      • modify time,修改时间,查找最近 24 小时内修改过的文件
    • find / -user susan
      • 查找属主为 susan 的文件
    • find / -size +10000c
      • 查找出大于 10000 字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
    • find / -size -1000k
      • 查找出小于 1000 KB的文件
  • 组合条件查找
    • find /tmp -size +10c -and -mtime +2
      • 查找 /tmp 目录下大于 10 字节并且最近修改时间超过 2 天的文件
    • find / -user root -or -user susan
      • 查找 /目录下 属于 root用户 或 susan用户 的文件
    • find /tmp ! -user susan
      • 查找 /tmp 目录中所有不属于 susan 用户的文件

grep 用于查找、过滤文件里符合条件的字符串

grep [options] 查找目标(一个文件或指定范围的文件)

  • 输出相关参数

    • -B<显示行数>--before-context=<显示行数>
      • : 除了显示匹配到的那一行之外,并显示该行之前,指定行数的内容。
    • -A<显示行数>--after-context=<显示行数>
      • 除了显示匹配到的那一行之外,并显示该行之后,指定行数的内容。
    • -c--count
      • 只输出匹配行的计数,不输出内容。
    • -n--line-number
      • 标示行号
    • 显示文件名与否
      • -h--no-filename
        • 不标示该行所属的文件名
        • 如果查找目标是一个文件,默认不显示
      • -H--with-filename
        • 标示该行所属的文件名
        • 如果查找目标是多个文件,默认显示
  • 查找条件相关参数

    • -i
      • 忽略大小写
    • -w--word-regexp
      • 整词匹配
    • -x--line-regexp
      • 整行匹配
    • -r
      • 递归查询目录中所有文件、子目录
    • -v
      • “反选” ,显示除了匹配到条件的行以外,其他所有行
    • -E--extended-regexp
      • 使用正则表达式进行查找
    • -f<规则文件>--file=<规则文件>
      • 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容
      • 规则样式可以是 “普通字符串” ,也可以是 “正则表达式”
      • 格式为每行一个规则样式
  • 示例

    • grep "192.168.0.1" *log

      • 从当前目录中所有文件名以 “log” 结尾的文件中,查找包含 “192.168.0.1” 字符串的行
    • grep -B3 -A5 "192.168.0.1" 2020-02-02.log

      • 在指定日志中查找包含 “192.168.0.1” 字符串的行,并显示其前面 3 行,后面 5 行
    • grep -n -E "[1][2-5]\:[0-5][0-9]\:[0-5][0-9]\s"Updated"" yum.log

      • 在 yum.log 文件中查找 12 点到 15 点之间 Updated 的记录


  • >
    • 输出重定向,覆盖模式
  • >>
    • 输出重定向,追加模式

将前一个命令的输出作为后一个命令的输入

示例

  • ls --help | less
    • 将 ls 的帮助文档,用 less 打开(实现翻页、查找等功能)
  • ls /var/log | grep 'log'
    • 列出 /var/log 目录的内容,用 grep 筛选出其文件名/目录名包含 ’log’ 的项

  • eXtended ARGuments,是给命令传递参数的一个过滤器,也是组合多个命令的一个工具
  • 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
  • 可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
  • xargs 默认的命令是 echo
    • 这意味着通过管道传递给 xargs 的输入将允许包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
  • 由于很多命令不支持 | 管道来传递参数,而 xargs 命令能解决此类需求

示例:

  • ls /var/log | xargs grep 'log'
    • 列出 /var/log 目录的内容,用 grep 筛选出其文件内容包含 ’log’ 行
    • 对比上方示例
      • 上方(没加 xargs )是将输出结果作为一个文本文件来对待,从结果中进行查找
      • 这里(加了 xargs )是将输出结果的每一行作为一个参数传递给 grep 来执行,grep 将每一项作为一个目标文件来查找其中的内容

其他示例:

  • find / -type f -name "*.log" | xargs grep "ERROR"
    • 从根目录开始查找所有扩展名为 .log 的文件,找出其中包含 “ERROR” 的行:
  • find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
    • 查找所有的 jpg 文件,并且压缩它们:
  • cat url-list.txt | xargs wget -c
    • 从一个 url-list 文件(每个url一行)中,使用wget下载所有链接
    • 将多个url作为wget的参数

参考

先后执行

ping 223.6.6.6 -c 10 >> 2.txt; ping 223.5.5.5 -c 10 >>2.txt

查看 2.txt,可以看到:后一条命令,在等前一条命令执行结束之后,再开始执行

  • 先后执行
  • 短路特性:
    • 只有前一条命令执行成功,后一条命令才执行
    • 只要有一条命令执行不成功,后面的命令都不执行
Snipaste_2021-07-09_16-42-45.png
Linux 基础 1(5. && 逻辑与拼接)
  • 先后执行
  • 短路特性:
    • 只有前一条命令执行不成功,后一条命令才执行
    • 只要有一条命令执行成功,后面全部命令都不执行
Snipaste_2021-07-09_16-50-00.png
Linux 基础 1(6. || 逻辑或拼接)


不同的 Linux 发行版采用不同的软件安装包

发行版系 包格式 包管理程序
Debian系(Ubuntu,Linux Mint) .deb apt
RedHat系(CentOS,Fedora) .rpm yum
OpenSUSE系 .rpm zypp
Arch系 .pacman pacman

Yellow dog Updater, Modified,方便的在线软件库,类似于苹果的 APPStore ,微软的 MicroSoft Store …

因为方便,入选的软件都经过安全性、稳定性、兼容性的评估,一般而言,是安装软件的首选方案

  • 查找相关
    • yum list | grep [字符串]yum search [字符串]
      • 根据字符串查找软件包(获得准确的包名)
    • yum info [软件包名]
      • 查看软件包信息(确认是否为所需的软件包)
    • yum deplist [软件包名]
      • 查看软件包的依赖关系
  • 安装卸载
    • yum install -y [软件包名]
      • 安装指定的软件包
    • yum remove -y [软件包名]
      • 卸载指定的软件包
  • 升级相关
    • yum clean all
      • 清除 yum 缓存信息
    • yum makecache
      • 创建元数据缓存
    • yum update -y
      • 升级所有软件包
    • yum upgrade -y
      • 较少用
      • 升级所有软件包,并删除不再使用(依赖)的包

RPM 是 Red-Hat Package Manager(RPM软件包管理器)的缩写,现在已经被很多非红帽系的发行版采用

如果在官方 yum 库中没有提供该软件,或者提供的版本过低不能满足需求,那么,使用软件开发方提供的 rpm 包是另一个比较方便的安装软件的方法

  • 查询相关
    • rpm -qa | grep [软件包名]
      • 查询/验证全部已安装的 rpm 包,并从中筛选
      • -q,query,查询
      • -a,all,所有
    • rpm -qa | less
      • 查询/验证全部已安装的 rpm 包,并 less 查看结果
    • rpm -qi [软件包名]
      • 查询/验证指定的软件包
      • 相当于 -q --info(与安装时使用的 -i 不一样),用来显示包的详细信息
    • rpm -ql [软件包名]
      • 查询指定软件包的安装路径
      • -l,list,列出
    • rpm -qf [软件包的完整路径]
      • 从一个 rpm 包文件(或 gz 文件),读取/验证其 rpm 包信息
      • -f,file,文件
  • 安装卸载
    • rpm -ivh [软件包名]
      • 安装
      • -i,install,安装
      • -v,verbose,详细信息
      • -h,hash,配合 -v 一起使用,列出哈希标记
    • rpm -e [软件包名]
      • 卸载
      • -e,erase,擦除
    • rpm -ev --nodeps [软件包名]
      • --nodeps,不检查依赖

示例:下载 rpm 包,安装 sysstat 工具

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
rpm -qi sysstat

# 下载 rpm 包
mkdir ~/test
cd ~/test
wget https://buildlogs.centos.org/c7.2003.00.x86_64/sysstat/20200401043410/10.1.5-19.el7.x86_64/sysstat-10.1.5-19.el7.x86_64.rpm
ls

# 进行安装
rpm -ivh sysstat-10.1.5-19.el7.x86_64.rpm

rpm -qi sysstat

# 工具使用示例
pidstat -d 5

  • 有的时候,会遇到想用的软件, 官方 yum 库里没有,软件开发方也没有提供 rpm 包的情况。
    • 因为不同发行版使用不同的包,其次,Linux 环境下,绝大多数软件都是开源的,于是很多软件开发方都是直接提供源码,由用户自行编译安装(用户编译的时候可以自定义所需要的组件)。这是最开放、透明的方式(当然也是对新手最不友好的方式)。
  • 也有的时候,会遇到 yum 提供的版本太低,未能满足需求的情况。
    • CentOS 的定位是对标 RedHat ,供服务器使用,对入选软件的安全性、稳定性、兼容性要求比较高,测试周期比较长,所以经常存在版本较低的情况。

这时候,就需要使用编译安装了

以 git 作为示例,进行编译安装:

CentOS7 的官方 yum 库中的 git 是 1.8 版

1
2
3
4
yum install -y git

git --version
#显示	git version 1.8.3.1

卸载 yum 库安装的 git

1
2
3
4
yum remove -y git

git --version
#显示	-bash: /usr/bin/git: 没有那个文件或目录

下载 git 最新发布版

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 安装下载工具 wget
yum install -y wget

# 下载 git 最新发布版
mkdir ~/test
cd ~/test
wget https://github.com/git/git/archive/refs/tags/v2.32.0.tar.gz
ls
#显示	v2.32.0.tar.gz

# 解压,进入该目录
tar -zxvf v2.32.0.tar.gz
ls
#显示	git-2.32.0  v2.32.0.tar.gz
cd git-2.32.0
ls

进行编译安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装 autoconf ,configure 过程需要用到
yum install -y autoconf

# 安装 gcc ,多语言编译器,configure、编译、安装过程,都需要用到
yum install -y gcc

# 使用 autoconf 生成 configure 文件
autoconf

# 执行 configure
./configure

# 安装 zlib-devel ,编译、安装过程,需要用到的依赖
yum install -y zlib-devel

# 进行编译、安装
make && make install


git --version
#显示 git version 2.32.0

编译安装过程,可能会遇到很多依赖问题,需要逐个解决依赖,最后才能安装成功。

相关内容