侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 674 篇文章
  • 累计创建 128 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

【学习笔记】Linux

GabrielxD
2022-02-08 / 0 评论 / 0 点赞 / 173 阅读 / 7,166 字
温馨提示:
本文最后更新于 2022-07-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Linux 介绍

简介

​ Linux (/ˈlɪnəks/) 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目 (C/C++/PHP/Python/Java/Go) 都会部署到 Linux/Unix 系统上。

Linux严格来说是单指操作系统的内核,因操作系统中包含了许多用户图形接口和其他实用工具。如今Linux常用来指基于Linux的完整操作系统,内核则改以Linux内核称之。

​ 通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本UbuntuLinux Mint)、Fedora(及其相关版本Red Hat Enterprise LinuxCentOS)和openSUSE等。

应用领域

服务器领域

​ Linux 在服务器领域的应用是最强的。
​ Linux 免费、稳定、高效等特点在这里得到了很好的体现,尤其在一些高端领域尤为广泛(C/C++/PHP/Python/Java/Go)。

嵌入式领域

​ Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高。
​ 主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域。以后在物联网中应用会更加广泛。

Linux 基础

Linux 发行版镜像下载

Linux Kernel Archives

CentOS

Index of /centos-vault/ | 清华大学开源软件镜像站

CentOS 7.6 : https://archive.kernel.org/centos-vault/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso4

CentOS 8.5 : https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso

目录结构

image-20220206083647173

  • /bin (/usr/bin, /usr/local/bin):
    bin 是 Binaries (二进制文件) 的缩写,这个目录存放着最经常使用的命令。

  • /boot :
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

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

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

  • /home :
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

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

  • /lost+found :
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

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

  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt :
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

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

  • /root :
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin (/usr/sbin, usr/local/sbin) :
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux :
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放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/local :
    这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序。

  • /usr/src :
    内核源代码默认的放置目录。

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

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

Vi / Vim

Vim Logo

介绍

​ 所有的 Unix Like 系统(如 linux)都会内建 Vi 文本编辑器,其他的文本编辑器则不一定会存在。

​ Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

使用

工作模式

基本上 vi/vim 共分为三种模式,分别是:

  • 命令模式(Command mode)
  • 输入模式(Insert mode)
  • 底线命令模式(Last line mode)

这三种模式的作用分别是:

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。

以下是常用的几个命令:

  • i : 切换到输入模式,以输入字符。
  • x : 删除当前光标所在处的字符。
  • : : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下 i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式下按下 i 就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合 : 输入字符
  • ENTER : 回车键,换行
  • BACK SPACE : 退格键,删除光标前一个字符
  • DEL : 删除键,删除光标后一个字符
  • 方向键 : 在文本中移动光标
  • HOME/END : 移动光标到行首/行尾
  • Page Up/Page Down : 上/下翻页
  • Insert : 切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC : 退出输入模式,切换到命令模式
底线命令模式

在命令模式下按下 :/ 就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有:

  • :q : 退出程序
  • :w : 保存文件
  • :wq : 保存退出
  • :q! : 不保存,强制退出
图示

image-20220206093939497

常用

命令模式下:
  • 拷贝当前行 : yy,拷贝当前向下5行 : 5yy
  • 粘贴 : p
  • 删除当前行 : dd,删除当前向下5行 : 5dd
底线命令模式下:
  • 查找某个单词 : 输入 /关键字Enter 开始查找,n 查找下一个
  • 设置文件行号 : 输入 :set nu
  • 取消文件行号 : 输入 :set nonu

image-20220206095255426

image-20220206150142017

image-20220206095349584

开机、重启

命令实例

  • shutdown : 默认参数 -h 1,1分钟后关机
    • -h now : 立即关机
    • -h 10 : 10分钟后关机
    • -r now : 立即重启
  • halt : 关机,作用同上
  • reboot : 重启
  • sync : 数据同步

注意

  1. 不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据同步到磁盘中。
  2. 目前 shutdown / reboot / halt 等命令均已经在关机前进行了 sync

用户登录/注销

命令实例

  • su - 用户名 : 切换用户
  • logout : 注销当前用户

注意

  1. 登录时尽量少用 root 账号,因为其是系统管理员,拥有最高权限。为避免操作失误,可以利用普通用户登录,登录后再用 su - root 命令来切换为系统管理员身份。
  2. logout 注销命令在图形运行级别无效,在运行级别3下有效。

用户/用户组管理

用户管理

介绍

​ Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

添加用户

语法
  • useradd 选项 用户名
    • -d 目录 : 指定用户主目录,如果此目录不存在,则同时使用 -m 选项来创建主目录
    • -g 用户组 : 指定用户所属的用户组
实例
useradd -g gabxd -d /home/gab -m gabrielxd

此命令创建了一个用户gabrielxd,它属于gabxd用户组,其中-d和-m选项用来为登录名gabrielxd产生一个主目录 /home/gab(/home为默认的用户主目录所在的父目录)。

注意
  1. 若未指定主目录,用户创建成功后,会自动创建 /home/用户名 的家目录。

指定/修改密码

语法
  • passwd 选项 用户名
    • -d : 使账户无口令
注意
  1. 若未指定用户名,则默认更改当前登录的账户的口令。

删除用户

语法
  • userdel 选项 用户名
    • -r : 把用户的主目录一起删除

修改用户

语法
  • usermod 选项 用户名
    • 常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

查询用户

语法
  • id 用户名
注意
  1. 若未指定用户名,则默认查询当前用户信息。
  2. 当用户不存在时,返回无此用户。

查看当前用户/登录用户

语法
  • whoami / who am i

用户组管理

介绍

​ 类似于角色,系统可以对有共性/权限的多个用户进行统一的管理

新增组

语法
  • groupadd 用户组

删除组

语法
  • groupdel 用户组

修改组

语法
  • groupmod 选项 用户组
    • -n 新用户组 将用户组的名字改为新名字

用户/用户组相关文件

/etc/passwd

用户的配置文件,记录用户各种信息

每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell

实例
[root@GabCentOS7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
gluster:x:996:993:GlusterFS daemons:/run/gluster:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
unbound:x:994:989:Unbound DNS resolver:/etc/unbound:/sbin/nologin
chrony:x:993:988::/var/lib/chrony:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:992:986:User for geoclue:/var/lib/geoclue:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sssd:x:991:985:User for sssd:/:/sbin/nologin
setroubleshoot:x:990:984::/var/lib/setroubleshoot:/sbin/nologin
saned:x:989:983:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
gabrielxd:x:1000:1000:GabrielxD:/home/gabrielxd:/bin/bash

/etc/shadow

口令的配置文件

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

实例
[root@GabCentOS7 ~]# cat /etc/shadow
root:$6$9pAP9rtN$rcNkC4wJnu6MplSV.VJjCIDK2GP7TblH9fdZMQBBDa8CmapTmbthbyMoypNvz3FIUsm05G5N9NX0sZXWaKPY90:19024:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:19023::::::
dbus:!!:19023::::::
polkitd:!!:19023::::::
libstoragemgmt:!!:19023::::::
colord:!!:19023::::::
rpc:!!:19023:0:99999:7:::
gluster:!!:19023::::::
saslauth:!!:19023::::::
abrt:!!:19023::::::
rtkit:!!:19023::::::
pulse:!!:19023::::::
radvd:!!:19023::::::
unbound:!!:19023::::::
chrony:!!:19023::::::
rpcuser:!!:19023::::::
nfsnobody:!!:19023::::::
qemu:!!:19023::::::
tss:!!:19023::::::
usbmuxd:!!:19023::::::
geoclue:!!:19023::::::
ntp:!!:19023::::::
sssd:!!:19023::::::
setroubleshoot:!!:19023::::::
saned:!!:19023::::::
gdm:!!:19023::::::
gnome-initial-setup:!!:19023::::::
sshd:!!:19023::::::
avahi:!!:19023::::::
postfix:!!:19023::::::
tcpdump:!!:19023::::::

/etc/group

组的配置文件,记录 Linux 包含的组的信息

每行的含义:组名:口令:组标识号:组内用户列表

实例
[root@GabCentOS7 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
cgred:x:997:
printadmin:x:996:
libstoragemgmt:x:995:
colord:x:994:
rpc:x:32:
dip:x:40:
gluster:x:993:
ssh_keys:x:992:
saslauth:x:76:
abrt:x:173:
rtkit:x:172:
pulse-access:x:991:
pulse-rt:x:990:
pulse:x:171:
radvd:x:75:
unbound:x:989:
chrony:x:988:
rpcuser:x:29:
nfsnobody:x:65534:
kvm:x:36:qemu
qemu:x:107:
tss:x:59:
libvirt:x:987:
usbmuxd:x:113:
geoclue:x:986:
ntp:x:38:
sssd:x:985:
setroubleshoot:x:984:
saned:x:983:
gdm:x:42:
gnome-initial-setup:x:982:
sshd:x:74:
slocate:x:21:
avahi:x:70:
postdrop:x:90:
postfix:x:89:
tcpdump:x:72:
gabrielxd:x:1000:gabrielxd

运行级别

Linux 系统启动过程

介绍

Linux系统有7个运行级别(runlevel):

  • 0:系统停机状态,默认运行级别不能设为0,否则不能正常启动
  • 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 2:多用户状态(没有NFS)
  • 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 4:系统未使用,保留
  • 5:X11控制台,登陆后进入图形GUI模式
  • 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

常用运行级别是3和5,也可以指定默认运行级别。

切换运行级别

语法

  • init [0123456]
    • 0~6代表不同的运行级别

实例

关机

#init 0

CentOS 7 之后的运行级别

[root@GabCentOS7 ~]# cat /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#

译文

# 在使用systemd时,inittab不再被使用。
#
# 在这里添加配置不会对你的系统产生影响。
#
# Ctrl-Alt-Delete由/usr/lib/systemd/system/ctrl-alt-del.target处理。
#
# systemd 使用 "目标" 而不是运行级别。默认情况下,有两个主要目标:
#
# multi-user.target:类似于运行级别3
# graphical.target: 类似于运行级别5
#
# 要查看当前的默认目标,请运行:
# systemctl get-default
#
# 要设置默认目标,请运行:
# systemctl set-default TARGET.target
#

运行级别0的应用 : 找回 root 密码

1、启动系统,在该界面中按 e 进入编辑界面。

image-20220206111016738

2、在编辑界面找到以 “linux16” 开头所在的行,在该行最后输入: init=/bin/sh,然后直接按 Ctrl + x 快捷键进入单用户模式

image-20220206111326945

3、在命令行中输入: mount -o remount,rw / 并按下回车执行。

image-20220206111731937

4、之后使用 passwd 命令修改密码即可,提示 passwd… 即修改成功。

image-20220206111858008

5、修改完成后,输入: touch /.autorelabel 并执行,然后输入: exec /sbin/init 并执行,等待系统自动修改密码,完成后系统会自动重启,新的密码生效。

image-20220206112218124

image-20220206112238852

实用命令

帮助命令

man 命令

语法
  • man [命令或配置文件]

作用

获得帮助信息

实例
[root@GabCentOS7 ~]# man ls

image-20220206112942303

help 命令

基本语法
  • help 命令
作用

获得 shell 内置命令的帮助信息

实例
[root@GabCentOS7 ~]# help cd

image-20220206113120750

文件目录类

pwd 命令

语法
  • pwd
作用

显示当前工作目录的绝对路径(Print Working Directory)。

ls 命令

语法
  • ls [选项] [文件名...]
    • -a : 显示所有文件及目录 (. 开头的隐藏文件也会列出)
    • -l : 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
作用

显示指定目录下的内容(List Files)。

cd 命令

语法
  • cd [目录]
作用

切换到指定目录(Change Directory)。

实例

cd ~ / cd : 回到当前用户的 home 目录

cd .. : 回到上一级目录

mkdir 命令

语法
  • mkdir [选项] [目录]
    • -p : 确保目录名称存在,不存在的就建一个
作用

创建目录(Make Directory)。

rmdir 命令

语法
  • rmdir [选项] [目录]
    • -p : 当子目录被删除后使它也成为空目录的话,则顺便一并删除
作用

删除空的目录(Remove Directory)。

touch 命令

语法
  • touch [选项] [文件]
    • -a : 改变档案的读取时间记录
    • -m : 改变档案的修改时间记录
作用

修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件

cp 命令

语法
  • cp [选项] [源文件/目录] [目标目录]
    • -r : 递归赋值整个文件夹
    • -f : 覆盖已经存在的目标文件而不给出提示
作用

复制文件或目录(Copy File)。

实例

将当前目录 test/ 下的所有文件覆盖复制到新目录 /home/newtest 下,不提示:

# cp -r -f test/ /home/newtest

# \cp -r test/ /home/newtest

rm 命令

语法
  • rm [选项] [文件/目录]
    • -i : 删除前逐一询问确认。
    • -f : 删除且不做任何提示(在同时给定了 -f-i 选项时,列在最后的生效)。
    • -r : 将目录及以下内容递归删除。
作用

删除文件或者目录(Remove)。

实例

删除文件可以直接使用 rm 命令,若删除目录则必须配合选项 -r,例如:

[root@GabCentOS7 ~]# rm test.txt
rm:是否删除普通空文件 "test.txt"?y
[root@GabCentOS7 ~]# rm test
rm: 无法删除"test": 是一个目录
[root@GabCentOS7 ~]# rm -r test
rm:是否删除目录 "test"?y

删除当前目录下的所有文件及目录:

# rm -r *

文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。

mv 命令

语法
  • mv [选项] [源文件/目录] [目标文件/目录]
    • -f : 覆盖已经存在的目标文件而不给出提示
    • -b : 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份
作用

为文件或目录改名、或将文件或目录移入其它位置(Move)。

实例

将文件 aaa 改名为 bbb

# mv aaa bbb

将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs

# mv info/ logs

/home/gabrielxd 下的所有文件和目录移到当前目录下:

# mv /home/gabrielxd/* .

cat 命令

语法
  • cat [选项] [文件]
    • -n : 由 1 开始对所有输出的行数编号
    • -b : 和 -n 相似,只不过对于空白行不编号
作用

连接文件并打印到标准输出设备上(Concatenate)。

实例:

输出 textfile 文件带行号,并使用管道命令 more

# cat -n textfile | more

textfile1 的文档内容加上行号后输入 textfile2 这个文档里:

# cat -n textfile1 > textfile2

textfile1textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:

# cat -b textfile1 textfile2 >> textfile3

more 命令

语法
  • more [选项] [文件]
    • -num : 一次显示的行数
    • -d : 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
作用

cat 类似,不过会以一页一页的形式显示,更方便使用者逐页阅读。

实例

逐页显示 textfile 文档内容,并显示提示:

# more -d textfile
常用操作命令
操作 说明
Space 向下翻一页
Enter 向下n行,默认为1行
q 退出 more
Ctrl + F 向下滚动一屏
Ctrl + B 返回上一屏
= 输出当前行行号
:f 输出文件名和当前行的行号
v 调用 vi 编辑器

less 命令

语法
  • less [选项] [文件]
    • -e : 当文件显示结束后,自动离开
    • -m : 显示类似more命令的百分比
    • -N : 显示每行的行号
作用

more 类似,但比 more 更加强大,支持显示各种终端。less 在显示文件内容时,并不是一次性将整个文件加载后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高效率,支持翻页、搜索、向上翻页和向下翻页。

实例

逐页显示 textfile 文档内容,并显示行号,显示预览百分比:

# less -m -N textfile
常用操作命令
操作 说明
Page Up 向上翻一页
Space / Page Down 向下翻一页
y / k 向前滚动一行
Enter / j 向后滚动一行
q 退出 less
/关键字 向下搜索关键字
?关键字 向上搜索关键字
n 向上查找(配合? / 使用)
N 向下查找(配合? / 使用)

echo 命令

语法
  • echo [选项] [输出内容]
    • -n : 不输出行尾的换行符
    • -e : 允许对加反斜线转义的字符进行解释
作用

输出内容到控制台。

实例

输出三行 “helloworld”:

# echo -e "helloworld\nhelloworld\nhelloworld"
helloworld
helloworld
helloworld

输出系统变量

# echo $PATH

head 命令

语法
  • head [选项] [文件]
    • -n <行数> : 显示文件的头部 n 行内容
    • -v : 显示文件名
作用

查看文件的开头部分的内容。

实例

显示 textfile 前 15 行:

# head -n 15 textfile

tail 命令

语法
  • tail [选项] [文件]
    • -n <行数> : 显示文件的尾部 n 行内容
    • -f : 当文件增长时输出后续添加的数据
作用

查看文件的末尾部分的内容。

实例

显示 textfile 后 15 行:

# tail -n 15 textfile

实时监控 textfile ,文件有变化时输出:

终端2

[root@GabCentOS7 ~]# tail -f textfile



终端1

[root@GabCentOS7 ~]# echo "hello" >> textfile

终端2

[root@GabCentOS7 ~]# tail -f textfile

hello


终端1

[root@GabCentOS7 ~]# tail -f textfile
[root@GabCentOS7 ~]# echo "helloworld" >> textfile

终端2

[root@GabCentOS7 ~]# tail -f textfile

hello
helloworld


终端1

[root@GabCentOS7 ~]# tail -f textfile
[root@GabCentOS7 ~]# echo "helloworld" >> textfile
[root@GabCentOS7 ~]# echo "cover test" > textfile

终端2

[root@GabCentOS7 ~]# tail -f textfile

hello
helloworld
tail: textfile:文件已截断
cover test

Shell 输入/输出重定向

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
实例

将当前目录列表写入 list.txt 中:

# ls -l > list.txt

将当前目录所有内容列表追加到 list.txt 中:

# ls -l >> list.txt

textfile 的内容覆盖 textfile2

# cat textfile > textfile2

把 “helloworld” 追加到 textfile 中:

# echo "helloworld" >> textfile

ln 命令

语法
  • ln [选项] [源文件/目录] [目标文件/目录]
    • -s : 软链接(符号链接)
作用

为某一个文件在另外一个位置建立一个同步的链接(Link)。

实例

/home 目录下创建一个软链接 myroot 连接到 /root 目录:

ln -s /root /home/myroot

history 命令

语法
  • history [选项]
作用

显示已执行的历史命令列表。

实例

显示所有历史命令:

# history

显示最近10个历史命令:

# history 10

执行历史编号为5的指令

!5

时间日期类

date 命令

语法
  • date [选项]
    • -s 时间字符串 : 将系统时间设为时间字符串中所设定的时间
作用

显示或设定系统的日期与时间。

实例

显示当前年份:

# date +%Y
2022

显示当前时间(格式化):

# date "+%Y-%m-%d %H:%M:%S"
2022-02-08 15:47:28

设置系统时间为 2022-02-22 22:22:22

# date -s "2022-02-22 22:22:22"	

cal 命令

语法
  • cal [选项] [月份] [年份]
    • -m : 显示星期一作为一周的第一天(缺省为星期日)
    • -y : 显示当前年份的日历
作用

显示日历(calendar)。

实例

显示当前日历(星期一作为一周的第一天):

# cal -m

显示2022年日历

# cal 2022
0

评论区