基础命令的理解与使用

文件分类

1
2
3
4
5
6
ls
-l # 详细信息ll
-a # 显示隐藏文件
-i 显示inode号码
-r 逆序显示文件
-t 按照文件创建时间显示
  • -

      1. 表示普通文件
      1. 数据文件、压缩包
      1. 媒体文件、图片、音频、视频
      1. 二进制目命令
  • d:目录directory

  • b:块设备block,/dev/sda1

  • c:字符设备char,例如/dev/zero(无穷的0)、/dev/null(黑洞)、/dev/urandom

    1
    2
    3
    4
    5
    6
    7
    8
    # 通过/dev/zero 生成一个10G文件
    dd if=/dev/zero of=10g.txt bs=1M count=10000 # 从/dev/zero输入内容输出到10g.txt文件,每次传1M,传10000次

    # dd
    # if inputfile 输入文件
    # of outputfile 输出文件
    # bs blocksize 每次读取多大
    # count 总共读取的次数
  • l:软链接link

  • p:命名管道pipe

  • s:套接字socket

文件的inode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~]# ll -i

34930686 -rw-r--r--. 1 root root 58 Sep 24 08:05 test


[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 478322 416 477906 1% /dev
tmpfs 482599 1 482598 1% /dev/shm
tmpfs 482599 1443 481156 1% /run
tmpfs 482599 16 482583 1% /sys/fs/cgroup
/dev/mapper/centos-root 8808448 130850 8677598 2% /
/dev/sda2 524288 17 524271 1% /boot
/dev/sda1 0 0 0 - /boot/efi
tmpfs 482599 9 482590 1% /run/user/42
tmpfs 482599 1 482598 1% /run/user/0

df -i(diskfree inode):查看文件系统的inode信息,可以看出每个文件系统inode数量是有限的,当inode用完时,硬盘将无法写入数据,所以要避免小文件数量过多。

eg:硬盘无法写入的原因也可能是inode号不够用了,又或者是磁盘空间不够用了

inode大致意思:linux系统采用分解式目录管理方法,文件名保存在目录中,文件(linux一切皆文件)的其他属性保存在inode中。要访问某个文件,先在文件目录中找到该文件的索引节点,在以索引节点号inode作为索引到inode表找到文件的其他信息,包括文件内容在外存的位置。

如下图是硬链接与软连接的inode区别

1
2
3
4
5
6
7
[root@localhost ~]# ll -ai *test*
33575008 lrwxrwxrwx 1 root root 4 Sep 27 03:54 lnstest -> test
34930686 -rw-r--r--. 2 root root 63 Sep 27 04:13 lntest
34930686 -rw-r--r--. 2 root root 63 Sep 27 04:13 test

inode号 文件权限 链接数 所有者 所有组 文件大小 创建日期 文件名及相关link信息
33574977 dr-xr-x---. 6 root root 4096 Sep 27 06:40 .

2

文件的重定向

:linux一切皆文件,都是在对文件操作,当然显示的终端界面也是,把它当做文件。

其中每个进程(运行中的命令)都有一张打开文件的文件描述符表:

  • 0:stdin标准输入

  • 1:stdout标准输出,不存在,创建文件

  • 2:stderr标准错误

每个进程(运行中的命令)的如图:
3

  • > : stdout标准输出重定向到输入文件,覆盖输入

    1
    echo test > myfile.txt # > echo进程的标准输出重定向到向myfile.txt文件的输入,默认标准输出是到终端
  • >>:stdout标准输出重定向到输入文件,追加输入

    1
    echo test >> myfile.txt # 在myfile.txt文件底行新一行追加
  • 2>:stderr标准错误重定向到输入文件,覆盖输入

    1
    find / -name test 2> /dev/null # 将这条命令的标准错误stderr重定向到/dev/null黑洞,也就是不到终端显示,只留正确stdout的输出
  • 2>:stderr标准错误重定向到输入文件,追加输入

    1
    find / -name test 2>> noMatchFile.txt # 正确的stdin的1保持输出到终端,stderr的2定向到noMatchFile.txt
  • &>:stdout和stderr都重定向文件,覆盖

    1
    find / -name test &> findAns.txt # 把目录的stdout、stderr匹配成功和不成功的信息都定向到findAns.txt文件
  • 2>&1:与&>作用一样

    1
    find / -name test > findAns.txt 2>&1
  • &>>:追加

  • | :将标准输入stdin重定向到stdout标准输出

    1
    cat test.txt | less # cat进程(运行的命令)读取test.txt的标准输出stdout重定向到less进程(运行的命令)标准输入stdin; (less test.txt从test.txt标准输入处理)
  • tee:为重定向内容开一个保存文件的路口,并正常输出,你可以加一个|又继续输入处理,如果为空,输出屏幕

    1
    echo test | tee myfile.txt # 将重定向输出test的内容另开一个路口以覆盖方式输入到myfile.txt并正常输出test到终端
  • tee -a:追加方式

    1
    echo test | tee -a myfile.txt # 将重定向输出test的内容另开一个路口以追加方式输入到myfile.txt并正常输出test到终端

    具体tee如下图

4

虚拟机与window主机文件交互

1
2
3
4
yum install -y lrzsz

rz # 打开计算机文件选择要传入虚拟机的文件
sz test # 将虚拟机test文件传出到window

软件安装管理方式

这里示例是centos,redhat是dnf,yum也是link的dnf

常用的三种方式

  • yum安装:yum install package
  • rpm安装:rpm -ivh package.rpm
  • 编译安装

关系

  • yum基于rpm构建,自动解决依赖关系,并从配置的软件仓库(repository)中下载所需包,支持从多个远程仓库
  • rpm (redhat package manager)直接操作单个.rpm软件包文件(管理本地),用于安装、查询、更新、卸载软件包,需要手动处理依赖

yum(dnf)

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
32
33
34
yum install 包名 # 下载并安装
yum remove 包名 # 卸载并删除

yum repolist # 查看默认仓库(开放使用的)
yum repolist all # 查看所有仓库(包括未使用的)

yum clean all # 清除仓库缓存,软件包的元数据,意思就是没必要每次安装软件都要从软件baseurl仓库搜索一遍,费时间,缓存数据到本地,检索可以从本地检索
yum makecache # 更新yum缓存

# 基于本地缓存的元数据进行搜索
yum search 关键词 # 搜索与关键词相关的包
yum search all 关键词 # 搜索与关键词相关的包,只要描述匹配就行

yum list 包名 # 列出软件包的信息,是否安装等,结合本地缓存的元数据和已安装的包信息,已下载会显示已下载

yum provides 路径 # 查找哪个包提供了指定的文件,同样依赖本地缓存的元数据,例如/var/www/html目录文件是那个包提供的

yum info 包名 # 查看软件包信息

yum list installed # 列出已下载的包

yum list available # 列出可安装的包

yum list kernel # 列出所有已安装和可用的内核

yum group list # 列出可用软件包组

yum group info 包组名 # 查看包组信息

yum group install 包组名 # 下载包组

yum history # 显示安装历史

yum history undo 数字 # 撤销安装历史操作

例:

1
2
3
4
5
6
yum search python # 本地缓存/var/cache/yum/
yum list policy* # 本地缓存/var/cache/yum/
yum provides /var/www/html # 本地缓存/var/cache/yum/
yum info wget # 本地缓存/var/cache/yum/
yum list installed # 从RPM数据库读取/var/lib/rpm
yum list available # 仓库缓存/var/cache/yum/

只下载rpm不安装

1
yum install --downloadonly vim --downloaddir=/root/

rpm

本地包管理,下载的软件包本地有rpm数据库管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
rpm -q # 查询软件包,名称-版本-架构

rpm -qi # 查询软件包详细信息,类yum info。本地

rpm -ql # 列出软件包安装的文件

rpm -qa # 列出所有已安装的软件包

rpm -qf 文件路径 # 确认该文件来自那个已下载的包,类yum provides。本地

rpm -qc 软件包 # 列出软件包的配置文件

rpm -qd 软件包 # 列出软件包的文档信息

rpm -q --scripts 软件包 # 软件包在安装、删除前后要执行的脚本命令操作

rpm -q --changelolog 软件包 # 列出软件包更改的日志信息

rpm -q -p rpm包 # 加个-p就是指定已有但未安装的软件包,其他参数雷同上面,就有 rpm -qlp rpm包

rpm -ivh rpm包 # 安装rpm包
  • i:-qi中的i是info,-ivh的i是install
  • q:query
  • f:file
  • i:info
  • l:list
  • c:configure
  • d:document
  • p:package
  • v:verbose
  • h:hash,50个#显示过程

提取rpm软件包内容

1
2
3
rpm2cpio 软件包 # 将rpm包转换为cpio归档文件输出

rpm2cpio mypack.rpm | cpio -idmv # 提取归档内容并在本地创建目录存放

cpio:

  • -i:从标准输入中提取文件
  • -d:从当前工作目录创建子目录
  • -m:保留文件修改时间
  • -v:显示详细过程
  • -t:列出归档内容