开发笔记 —— Linux 下的基础指令

Linux 下的基础指令

    • 基本使用
      • 远程客户端
      • 注销&关机命令
        • 注销
        • 重启系统
        • 关闭系统
    • 文件系统指令
      • 文件和目录
      • 练习
      • 文件归档(tar)
    • 软件安装
      • 文件下载
        • 手动下载
        • 命令下载
      • 使用 TAR 解包并手动安装
      • rpm
      • yum
    • Vim 编辑器
      • 模式切换
      • 一般模式
          • 移动光标
        • 删除
        • 复制
      • 编辑模式
      • 命令模式
        • 查找
        • 替换
        • 其他
      • 练习
    • 用户和用户组管理
    • 权限管理
    • 网络指令
    • 远程访问
      • ssh & scp
      • Nginx
      • systemctl
      • 防火墙
      • nc
    • 磁盘相关指令
    • 重要指令

指令是 Linux 基础中最为核心的内容,Linux 中的所有操作基本上都是靠指令(或命令)来完成的。

基本使用

该节需要掌握远程客户端和开关机命令。

远程客户端

可以使用 ssh 命令、SecureCRT 或者 Xshell 进行远程连接,这里以 SecureCRT 为例。

  1. 点击左上方快速连接按钮

开发笔记 —— Linux 下的基础指令_第1张图片

  1. 在快速连接对话框中,输入CentOS 的 IP 地址,点击Connect 按钮。

开发笔记 —— Linux 下的基础指令_第2张图片

  1. 第一次连接的时候,会提示 New Host Key 的对话框,点击 Accept & Save

开发笔记 —— Linux 下的基础指令_第3张图片

  1. 输入用户名 root ,点击 OK 按钮。

开发笔记 —— Linux 下的基础指令_第4张图片

  1. 输入密码,点击 OK 按钮。

开发笔记 —— Linux 下的基础指令_第5张图片

  1. 出现如下界面,说明登录成功!

开发笔记 —— Linux 下的基础指令_第6张图片

注销&关机命令

注销

  • logout
[root@vm ~]# logout
  • 注销快捷键,Ctrl + D

在 CRT 中,注销后,按 Enter 键重新登录。

重启系统

  • reboot
[root@vm ~]# reboot

关闭系统

  • shutdown:关机命令

一分钟后关机

[root@vm ~]# shutdown

特定时间关机

[root@vm ~]# shutdown -h 13:30

取消关机

[root@vm ~]# shutdown -c

立即关机

[root@vm ~]# shutdown now
  • poweroff:关闭电源
[root@vm ~]# poweroff

文件系统指令

文件和目录

ls → 列出目录中的内容

ls -a 列出目录所有文件,包含以 . 开始的隐藏文件

[root@vm ~]# ls -a
.  ..  anaconda-ks.cfg  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc

ls -A 列出除 ... 的其它文件

[root@vm ~]# ls -A
anaconda-ks.cfg  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc

ls -l 以长格式形式列出目录下的非隐藏文件,可以直接使用 ll 代替

[root@vm ~]# ls -l
总用量 4
-rw-------. 1 root root 1225 118 11:12 anaconda-ks.cfg
[root@vm ~]# ll
总用量 4
-rw-------. 1 root root 1225 118 11:12 anaconda-ks.cfg

ls / 列出根目录下的非隐藏文件

[root@vm ~]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  • bin:是 Binaries 单词的缩写,这个目录存放着最经常使用的命令。
  • boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些链接文件以及镜像文件。
  • dev:是 Device 单词的缩写,该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • etc:是 Etcetera 单词的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • home:普通用户的主目录,在 Linux 中,每个普通用户都有一个自己的目录,类似 Windows 中的 C:\Users\
  • liblib64:是 Library 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。
  • media:系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • mnt:是 Mount 单词的缩写,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱、U盘等。
  • opt:是 Optional 的缩写,这是给主机额外安装软件所摆放的目录。
  • proc:是 Processes 的缩写,它是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件
  • root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
  • sbin:是 Super User Binaries 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • srv: 是 Server 单词的缩写,该目录存放一些服务启动之后需要提取的数据。
  • sys:是 System 单词的的缩写,该目录是系统文件目录。
  • tmp:是 Temporary 的缩写这个目录是用来存放一些临时文件的。
  • usr:是 Unix Shared Resources 的缩写,应用程序默认安装目录,类似于 windows 下的 C:\Program Files 目录。
  • var:是 Bariable 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。

ll / 以长格式形式列出根目录下的非隐藏文件

[root@vm ~]# ls /
[root@vm ~]# ll /
总用量 16
lrwxrwxrwx.   1 root root    7 118 11:09 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 118 11:28 boot
drwxr-xr-x.  20 root root 3220 118 15:30 dev
drwxr-xr-x.  74 root root 8192 118 15:30 etc
drwxr-xr-x.   2 root root    6 411 2018 home
lrwxrwxrwx.   1 root root    7 118 11:09 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 118 11:09 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 411 2018 media
drwxr-xr-x.   2 root root    6 411 2018 mnt
drwxr-xr-x.   2 root root    6 411 2018 opt
dr-xr-xr-x. 112 root root    0 118 15:30 proc
dr-xr-x---.   4 root root  137 118 17:33 root
drwxr-xr-x.  24 root root  720 118 15:30 run
lrwxrwxrwx.   1 root root    8 118 11:09 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 411 2018 srv
dr-xr-xr-x.  13 root root    0 118 15:30 sys
drwxrwxrwt.   8 root root  211 118 15:30 tmp
drwxr-xr-x.  13 root root  155 118 11:09 usr
drwxr-xr-x.  19 root root  267 118 11:27 var

这里是以长列表格式列出目录及文件的信息,就 etc 目录为例

drwxr-xr-x.  74 root root 8192 118 15:30 etc
  • 第一栏中的第一个字符 d 代表的是文件类型,其他的还包括:- 普通文件,d 目录,l 链接文件,p 管理文件,b 块设备文件,c 字符设备文件,s 套接字文件
  • 第一栏中,除第一个字符,剩下部分是权限位,也就是 rwxr-xr-x.,其中 r 代表w代表x代表执行-代表. 代表 SELinux 的安全标签。排除符号 .后,可将九个字符每三个分一组,第一组为该文件的所属人(Owner),第二组为该文件的所属组(Group),第三组为该文件的其他人(Other),即如下所示:
 rwx    r-x    r-x
Owner  Group  Other
  • 第二栏中的数字代表的是链接数,当表示目录时,代表该目录所具有的一级子目录的个数,. 和 … 分别代表本级和上级,这里的 74 指的是:在该目录下存在 72 个一级子目录
  • 第三栏代表该文件的所属者
  • 第四栏代表该文件的所属组
  • 第五栏代表该文件的大小,单位是字节
  • 第六栏代表的是该文件的创建时间
  • 第七栏代表的是该文件的名称

ll -h / 以长格式形式列出根目录下的非隐藏文件(大小采用好识别的方式)

[root@vm ~]# ll -h /
总用量 16K
lrwxrwxrwx.   1 root root    7 118 11:09 bin -> usr/bin
dr-xr-xr-x.   5 root root 4.0K 118 11:28 boot
drwxr-xr-x.  20 root root 3.2K 119 16:48 dev
drwxr-xr-x.  74 root root 8.0K 119 16:48 etc

cd → 切换当前目录至特定的目录

指令 解释
cd / 进入根目录
cd ~ 或者 cd 进入主目录
cd - 回到上次的目录
[root@vm ~]# cd /
[root@vm /]# cd 
[root@vm ~]# cd -
/
[root@vm /]# cd 
[root@vm ~]# 
  • 绝对路径:
    由根目录 / 写起,例如: /usr/share/doc 这个目录。
  • 相对路径
    不是由根目录 / 写起,一般是相对于当前目录而言,例如当前目录是 /usr/share/doc ,需要切换到 /usr/share/man 底下时,可以写成: cd ../man ,其中 ../ 就是相对当前目录而言的上级目录

pwd → 命令用于查看当前工作目录路径

[root@vm ~]# pwd
/root

mkdir → 命令用于创建文件夹

[root@vm ~]# mkdir src
[root@vm ~]# mkdir target
[root@vm ~]# ls
anaconda-ks.cfg  src  target
[root@vm ~]# mkdir -p src/main/java
[root@vm ~]# mkdir -p src/test/java
[root@vm ~]# mkdir -p src/main/resources

rmdir → 命令用于删除空文件夹

[root@vm ~]# rmdir target/
[root@vm ~]# ls
anaconda-ks.cfg  src
[root@vm ~]# rmdir src
rmdir: 删除 "src" 失败: 目录非空
[root@vm ~]# 

cp → 拷贝文件和目录

[root@vm ~]# mkdir target
[root@vm ~]# ls
anaconda-ks.cfg  src  target

[root@vm ~]# cp anaconda-ks.cfg target/
[root@vm ~]# ls target/
anaconda-ks.cfg

复制多个目录 cp -r

[root@vm ~]# cp -r src/test/ src/main/ target/
[root@vm ~]# ls target/
anaconda-ks.cfg  main  test

mv →

[root@vm ~]# ls
anaconda-ks.cfg  src  target
[root@vm ~]# mv anaconda-ks.cfg src/main/resources/
[root@vm ~]# ls
src  target
[root@vm ~]# ls src/main/resources/
anaconda-ks.cfg
[root@vm ~]# 

rm →

-r 表示是否递归删除,-f 表示是否执行强制删除,不经过询问。

[root@vm ~]# rm anaconda-ks.cfg 
rm:是否删除普通文件 "anaconda-ks.cfg"?yes
[root@vm ~]# ls
src  target
[root@vm ~]# mkdir -p a/b
[root@vm ~]# ls
a  anaconda-ks.cfg  src  target
[root@vm ~]# rm -r a
rm:是否进入目录"a"? yes
rm:是否删除目录 "a/b"?yes
rm:是否删除目录 "a"?yes
[root@vm ~]# rm -rf a
[root@vm ~]# ls
anaconda-ks.cfg  src  target
[root@vm ~]# 

rm -rf / 该该命令将会引发无法逆转的后果,请慎用!

touch → 创建空文件

[root@vm ~]# touch a.txt
[root@vm ~]# ls
anaconda-ks.cfg  a.txt  src  target

echo → 命令的功能是在显示器上显示一段文字

[root@vm ~]# echo hello
hello
[root@vm ~]# echo hello > a.txt
[root@vm ~]#

cat → 由第一行开始显示文件内容

[root@vm ~]# cat a.txt 
hello

输出重定向 > (覆写)和 >> (追加)

[root@vm ~]# echo hello > a.txt
[root@vm ~]# cat a.txt 
hello
[root@vm ~]# echo hello >> a.txt
[root@vm ~]# cat a.txt 
hello
hello
[root@vm ~]# echo hi > a.txt
[root@vm ~]# cat a.txt 
hi
[root@vm ~]# 

tac → 从最后一行开始显示

[root@vm ~]# echo centos7 >> a.txt       
[root@vm ~]# cat a.txt
hi
centos7
[root@vm ~]# tac a.txt
centos7
hi

nl → 查看文件内容并在左侧显示行号

[root@vm ~]# nl a.txt 
     1  hi
     2  centos7
[root@vm ~]# 

more → 分页的显示文件内容

[root@vm ~]# more anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
--More--(36%)

Enter键向下滚动一行,按 空格键向下翻一页,按 q 键退出

less → 分页的显示文件内容,可以前后翻页

[root@vm ~]# less anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media

Enter 键向下滚动一行,按 空格键向下翻一页,
PgUp 键向上翻动一页,按 PgDn 键向下翻动一页,按 q 键退出

head → 只看首十行

[root@vm ~]# head anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
[root@vm ~]# head -n 3 anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
[root@vm ~]# 

tail → 只看尾十行

[root@vm ~]# tail anaconda-ks.cfg 

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
[root@vm ~]# tail -n 4 anaconda-ks.cfg 
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
[root@vm ~]#

which → 查看命令手册

[root@vm ~]# which cd
/usr/bin/cd
[root@vm ~]# which cat
/usr/bin/cat
[root@vm ~]# 

man → 查看命令手册

[root@vm ~]# man cp
CP(1)                      User Commands              CP(1)

NAME
       cp - copy files and directories

SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE..

Manual page cp(1) line i (press h for help or q to quit)

练习

  1. 请在 root 的家目录创建名为 workspace 的目录
  2. 请在 root 的家目录创建多级目录 software/apache, software/java
  3. 使用长格式查询目录 /etc/yum.repos.d/ 下的文件信息,并将结果重定向到 workspace/repos
  4. 请将文件 /etc/yum.repos.d/CentOS-Base.repo 拷贝到 workspace 中,并重命名为c.repo
  5. 请尝试使用 head, tail 和输出重定向从 /root/workspace/c.repo 文件中得到第一段有效文本信息,并将结果保存到 workspace/base.repo 中,结果示例如下:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

文件归档(tar)

tar 命令是 Linux 中常用的归档命令,可以将多个文件归档到一个文件中,也可以从归档文件中提取这些文件。

归档方式有哪些?

  • gzip 以 .gz 结尾,最常用的压缩方式
  • bzip2 以 .bz2 结尾,压缩能力更强(压缩后的文件更小),使用较多
  • compress 以 .Z 结尾,使用较少
  • zip 以 .zip 结尾,压缩能力较低,跨平台做的较好,使用较少
  • rar 以 .rar 结尾,压缩能力较低,使用较少

tar 命令的[选项] 参数

  • -c 建立打包文件
  • -f 指定打包文件名称,tar 命令必须要有该选项
  • -t 查看打包文件中包含的文件名
  • -r 增加文件到打包文件中
  • -v 显示过程
  • -x 解包
  • -z 通过 gzip 过滤归档
  • -Z 通过 compress 过滤归档
  • -C 该选项用于解压缩,若要解压到指定目录,可通过该选项指定

tar -cf 压缩多个文件,一般地,文件名建议以 .tar 结尾

[root@vm ~]# tar -cf archive.tar a.txt anaconda-ks.cfg 
[root@vm ~]# ls
anaconda-ks.cfg  archive.tar  a.txt  src  target

tar -tf 查看压缩包里的文件

[root@vm ~]# tar -tf archive.tar 
a.txt
anaconda-ks.cfg

tar -rf 向压缩包里追加文件

[root@vm ~]# tar -rf archive.tar target/
[root@vm ~]# tar -tf archive.tar
a.txt
anaconda-ks.cfg
target/
target/main/
[root@vm ~]# tar -rf archive.tar src/
[root@vm ~]# tar -tf archive.tar 
a.txt
anaconda-ks.cfg
target/
target/main/
src/
src/main/
src/main/java/
src/main/resources/
src/main/resources/anaconda-ks.cfg
src/test/
src/test/java/

tar -xf 将压缩包进行解压缩

[root@vm ~]# rm -rf a.txt anaconda-ks.cfg src/ target/
[root@vm ~]# ls
archive.tar
[root@vm ~]# tar -xf archive.tar 
[root@vm ~]# ls
anaconda-ks.cfg  archive.tar  a.txt  src  target
[root@vm ~]# 

tar -zcvf 将所有的文件压缩为 gzip 格式的压缩包,一般地,文件名建议以 .tar.gz.gz 结尾

[root@vm ~]# tar -zcvf archive.tar.gz *
anaconda-ks.cfg
archive.tar
a.txt
src/
src/main/
src/main/java/
src/main/resources/
src/main/resources/anaconda-ks.cfg
src/test/
src/test/java/
target/
target/main/
[root@vm ~]# ls
anaconda-ks.cfg  archive.tar  archive.tar.gz  a.txt  src  target

tar -zxvf 将指定的文件按 gzip 的格式解压缩

[root@vm ~]# rm -rf anaconda-ks.cfg a.txt src/ target/
[root@vm ~]# ls
archive.tar  archive.tar.gz
[root@vm ~]# tar -zxvf archive.tar.gz 
anaconda-ks.cfg
archive.tar
a.txt
src/
src/main/
src/main/java/
src/main/resources/
src/main/resources/anaconda-ks.cfg
src/test/
src/test/java/
target/
target/main/
[root@vm ~]# ls
anaconda-ks.cfg  archive.tar  archive.tar.gz  a.txt  src  target

tar -C 将压缩文件解压缩到指定的目录下

[root@vm ~]# rm -rf anaconda-ks.cfg a.txt src/ target/
[root@vm ~]# mkdir workspace
[root@vm ~]# ls
archive.tar  archive.tar.gz  workspace
[root@vm ~]# tar -zxf archive.tar.gz -C workspace/
[root@vm ~]# ls workspace/
anaconda-ks.cfg  archive.tar  a.txt  src  target
[root@vm ~]# tar -ztf archive.tar.gz 
anaconda-ks.cfg
archive.tar
a.txt
src/
src/main/
src/main/java/
src/main/resources/
src/main/resources/anaconda-ks.cfg
src/test/
src/test/java/
target/
target/main/
[root@vm ~]# 

软件安装

文件下载

手动下载

  1. 先从 https://jdk.java.net/ 下载 jdk1.8 的安装文件。
  2. 点击 CRT 上的 FX 图标,启动 SecureFX 进行文件传输
    开发笔记 —— Linux 下的基础指令_第7张图片
  3. 将下载好的 jdk 文件拖拽到右侧 root 目录下
    开发笔记 —— Linux 下的基础指令_第8张图片

命令下载

curl -O 可用于下载某个文件

[root@vm ~]# rm -rf openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz
[root@vm ~]# curl -O https://download.java.net/openjdk/jdk8u42/ri/openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  166M  100  166M    0     0  5563k      0  0:00:30  0:00:30 --:--:-- 6754k

[root@vm ~]# ll -h
总用量 167M
-rw-r--r--. 1 root root  10K 119 17:12 archive.tar
-rw-r--r--. 1 root root 1.2K 119 17:19 archive.tar.gz
-rw-r--r--. 1 root root 167M 119 17:48 openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz
drwxr-xr-x. 2 root root    6 119 17:36 workspace

使用 TAR 解包并手动安装

  1. 将 jdk 的归档文件解压缩到特定目录下
[root@vm ~]# mkdir program
[root@vm ~]# tar -zxf openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz -C program/
[root@vm ~]# ls program/
java-se-8u42-ri
  1. 临时修改系统环境变量
[root@vm ~]# export PATH=$PATH:/root/program/java-se-8u42-ri/bin/
  1. 验证安装是否成功
[root@vm ~]# java -version
openjdk version "1.8.0_42"
OpenJDK Runtime Environment (build 1.8.0_42-b03)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
[root@vm ~]# 

rpm

rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序

rpm 命令的[选项] 参数

  • -q 执行查询或者验证包

  • -a 查询所有包

  • -e 擦除指定包

  • -i 安装指定包

  • -v 显示指令执行过程

  • -h 安装时列出标记

  • --nodeps 不验证包的相互关联性

  • --nopgp 不验证包的 GPG 的签名认证

  • 安装离线软件

这里以著名的 net-tools 工具为例。

  1. 到 阿里云开发者社区(https://developer.aliyun.com/packageSearch) 去下载该工具的 rpm 包。这里直接附上下载链接地址:https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
  2. 使用 curl -O 下载对应的安装包
[root@vm ~]# curl -O https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  305k  100  305k    0     0  1658k      0 --:--:-- --:--:-- --:--:-- 1652k
[root@vm ~]# ls
archive.tar     net-tools-2.0-0.25.20131004git.el7.x86_64.rpm  program
archive.tar.gz  openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz  workspace
[root@vm ~]# 
  1. 执行安装
[root@vm ~]# rpm -ivh net-tools-2.0-0.25.20131004git.el7.x86_64.rpm 
警告:net-tools-2.0-0.25.20131004git.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:net-tools-2.0-0.25.20131004git.el################################# [100%]
  • 卸载软件
[root@vm ~]# rpm -e net-tools
  • 查询安装信息
[root@vm ~]# rpm -q net-tools
未安装软件包 net-tools
  • 安装在线软件
[root@vm ~]# rpm -ivh https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
[1] 1952
获取https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.fa4c2f701gJQYu
警告:/var/tmp/rpm-tmp.ppMGgB: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:net-tools-2.0-0.25.20131004git.el################################# [100%]

[1]+  完成                  rpm -ivh https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm?spm=a2c6h.13651111.0.0.fa4c2f701gJQYu
[root@vm ~]# 
[root@vm ~]# rpm -q net-tools
net-tools-2.0-0.25.20131004git.el7.x86_64

yum

yum( Yellowdog Updater Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum常用命令

  1. 列出所有可更新的软件清单命令:yum check-update

  2. 更新所有软件命令:yum update

  3. 仅安装指定的软件命令:yum install

  4. 仅更新指定的软件命令:yum update

  5. 列出所有可安裝的软件清单命令:yum list

  6. 删除软件包命令:yum remove

  7. 查找软件包命令:yum search

  8. 根据特征或文件查询软件包提供方:yum provides

  9. 清除所有缓存命令:yum clean all

  10. 建立新的缓存:yum makecache

在使用 yum 之前,为了方便软件包从国内镜像中下载,可以到 http://mirrors.163.com/.help/centos.html 下载网易的 yum 源,这里附上链接地址:http://mirrors.163.com/.help/CentOS7-Base-163.repo
然后将该文件放置到 /etc/yum.repos.d/ 目录下

[root@vm ~]# ls /etc/yum.repos.d/
CentOS7-Base-163.repo  CentOS-Debuginfo.repo  CentOS-Sources.repo
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      CentOS-x86_64-kernel.repo
[root@vm ~]# yum clean all
已加载插件:fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
正在清理软件源: base extras updates
Cleaning up list of fastest mirrors
[root@vm ~]# 
[root@vm ~]# 
[root@vm ~]# yum makecache
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Determining fastest mirrors
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.bfsu.edu.cn
base                                                             | 3.6 kB  00:00:00     
extras                                                           | 2.9 kB  00:00:00     
updates                                                          | 2.9 kB  00:00:00     
(1/10): base/7/x86_64/group_gz                                   | 153 kB  00:00:00     
(2/10): base/7/x86_64/primary_db                                 | 6.1 MB  00:00:00     
(3/10): base/7/x86_64/filelists_db                               | 7.2 MB  00:00:00     
(4/10): base/7/x86_64/other_db                                   | 2.6 MB  00:00:00     
(5/10): extras/7/x86_64/filelists_db                             | 276 kB  00:00:00     
(6/10): extras/7/x86_64/other_db                                 | 149 kB  00:00:00
(7/10): extras/7/x86_64/primary_db                               | 249 kB  00:00:00     
(8/10): updates/7/x86_64/filelists_db                            | 9.6 MB  00:00:00     
(9/10): updates/7/x86_64/other_db                                | 1.2 MB  00:00:00     
(10/10): updates/7/x86_64/primary_db                             |  17 MB  00:00:01     
元数据缓存已建立
[root@vm ~]# 
[root@vm ~]# 
[root@vm ~]# yum search ifconfig
已加载插件:fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.bfsu.edu.cn
==================================== 匹配:ifconfig ====================================
net-tools.x86_64 : Basic networking tools
[root@vm ~]# 
[root@vm ~]# yum search rz
已加载插件:fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.bfsu.edu.cn
=================================== N/S matched: rz ====================================
lrzsz.x86_64 : The lrz and lsz modem communications programs

  名称和简介匹配 only,使用“search all”试试。
[root@vm ~]# yum -y install lrzsz

Vim 编辑器

Vi 的改进版本,一个程序员文本编辑器,它主要有三种模式

模式切换

开发笔记 —— Linux 下的基础指令_第9张图片

一般模式

以vim打开一个文件就直接进入一般模式(默认模式)可以使用上下左右移动光标来移动光标,也可以使用删除字符来处理文件内容,也可以使用复制、粘贴来处理文件数据。

移动光标
指令 解释
[h]
[j]
[k]
[l]
[H] 光标移到当前屏幕最上方行的第一个字符
[M] 光标移到当前屏幕中间行的第一个字符
[L] 光标移动到当前屏幕最下方行第一个字符
[G] 移到此文件最后一行
n[G] 移到第n行
n[Enter] 光标下移n行
[Ctrl]+[f] 屏幕向下移动一页
[Ctrl]+[b] 屏幕向上移动一页
[0][Home] 移动光标所在行的行首
[$][End] 移到光标所在行的行尾

删除

指令 解释
[x] 向后删除一个字符
n[x] 向后删除n个字符(n为数字)
[X] 向前删除一个字符
[d][d] 删除光标所在行
n[d][d] 删除光标所在行以下n行(n为数字,包含当前行在内)
[d][1][G] 删除光标所在行到第一行所有数据
[d][G] 删除光标所在行到最后一行
[d][$] 删除光标所在处到同行最后一个字符
[d][0] 删除光标所在处到同行第一个字符

复制

指令 解释
[y][y] 复制光标所在行
n[y][y] 复制光标所在向下n行(n为数字)
[y][1][G] 复制光标所在行到第一行所有数据
[y][G] 复制光标所在行到最后一行所有数据
[y][$] 复制光标所在处到同行最后一个字符
[y][0] 复制光标所在处到同行第一个字符
[p] 小写字母 p,将已复制的数据粘贴到光标所在下一行
[P] 大写字母 p,将已复制的数据粘贴到光标所在上一行
[u] 小写字母 u,复原前一个操作(类似于windows中的ctrl+z)
[ctrl][r] 恢复上一次撤销的内容(类似于windows中的ctrl+y)

编辑模式

在一般模式中可以删除、复制、粘贴等,但无法编辑文件内容。按下i、I、o、O、a、A、r、R等任何一个字母后进入编辑模式。并在左下方出现INSERT或REPLACE。该模式下可以输入文件内容。按下返回一般模式。

指令 解释
[i] 从光标所在处插入
[I] 从所在行第一个非空白字符处插入
[a] 从光标所在下一个字符处插入
[A] 从光标所在行最后一个字符处插入
[o] 在光标所在处下一行插入新的一行
[O] 在光标所在处上一行插入新的一行
[s] 删除光标所在的字符并开始插入
[S] 删除光标所在行并开始插入
[r] 替换光标所在处字符一次
[R] 一直替换光标所在处文字直到按下Esc

命令模式

在一般模式当中,输入:/?三个字符中的任何一个按钮,就可以将光标移动到最下面那一行。在这个模式当中,可以提供查询、替换等功能。同时存盘、离开vi、显示行号等等命令都是在此模式进行。例如,:wq即可保存退出。

查找

指令 解释
/word 向下查找单词“word”
?word 向上查找单词“word”

替换

指令 解释
:s/word1/word2/g 在当前行将word1替换成word2
:%s/word1/word2/g 在当前文件将word1替换成word2
:n1,n2s/word1/word2/g 在n1到n2行查找word1替换成word2 (n1、n2为数字)
:1,$s/word1/word2/g 从第一行到最后一行查找word1替换成word2
:1,$s/word1/word2/gc 同上,在替换前confirm是否替换

其他

指令 解释
:set nu 显示行号
:set nonu 取消显示行号
:w 将文件存盘
:w [filename] 另存为filename
:r [filename] 读取filename指定文件中的内容到光标所在的行
:n1,n2 w [filename] 将n1到n2行另存为filename
:wq 保存后离开
:q! 不保存,强制离开
:wq! 强制保存退出
:! command 临时切换到命令行模式下执行command命令。

例如 :!ls /home 即可在vim当中查看/home下面以ls输出的文件信息。

案例:

  • 使用 vim 编辑 /etc/profile 来手动配置 java 的全局环境变量
[root@vm ~]# tar -zxf openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz -C /opt/
[root@vm ~]# vi /etc/profile
[root@vm ~]# source /etc/profile
[root@vm ~]# vi /etc/profile
[root@vm ~]# source /etc/profile
[root@vm ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/java-se-8u42-ri/bin:/root/bin
[root@vm ~]# java -version
openjdk version "1.8.0_42"
OpenJDK Runtime Environment (build 1.8.0_42-b03)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
[root@vm ~]# 

/etc/profile 文件新增如下:

export JAVA_HOME=/opt/java-se-8u42-ri
PATH=$PATH:$JAVA_HOME/bin
  • 使用 vim 编辑一个 Java 源程序
[root@vm ~]# mkdir src
[root@vm ~]# cd src
[root@vm src]# vi Hello.java 
[root@vm src]# javac Hello.java 
[root@vm src]# ls
Hello.class  Hello.java
[root@vm src]# java Hello
Hello World!
[root@vm src]#

练习

  1. 使用 yum 来安装 bash-completion
[root@vm ~]# yum -y install bash-completion
  1. 尝试安装 Node.js 环境,附上下载链接地址:https://nodejs.org/dist/latest-v16.x/node-v16.18.1-linux-x64.tar.gz
[root@vm ~]# tar -zxf node-v16.18.1-linux-x64.tar.gz -C /opt/
[root@vm ~]# vi /etc/profile
[root@vm ~]# source /etc/profile
[root@vm ~]# node -v
v16.18.1
[root@vm ~]# npm install -g cnpm --registry=https://registry.npm.taobao.org
[root@vm ~]# npm install -g cnpm --registry=https://registry.npm.taobao.org
npm WARN deprecated @npmcli/[email protected]: This functionality has been moved to @npmcli/fs

added 360 packages in 13s

11 packages are looking for funding
  run `npm fund` for details
[root@vm ~]# npm -v
8.19.2
[root@vm ~]# 

/etc/profile 文件新增如下:

PATH=$PATH:/opt/node-v16.18.1-linux-x64/bin
  1. 尝试安装 Maven 环境,附上下载链接地址:https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
[root@vm ~]# curl -O https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 9283k  100 9283k    0     0   869k      0  0:00:10  0:00:10 --:--:--  763k
[root@vm ~]# tar -zxf apache-maven-3.6.3-bin.tar.gz -C /opt/
[root@vm ~]# ls /opt/
apache-maven-3.6.3  java-se-8u42-ri  node-v16.18.1-linux-x64
[root@vm ~]# vi /etc/profile
[root@vm ~]# source /etc/profile
[root@vm ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /opt/apache-maven-3.6.3
Java version: 1.8.0_42, vendor: Oracle Corporation, runtime: /opt/java-se-8u42-ri/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
[root@vm ~]# 

/etc/profile 文件新增如下:

export MAVEN_HOME=/opt/apache-maven-3.6.3
PATH=$PATH:$MAVEN_HOME/bin

用户和用户组管理

id → 获取用户和用户组信息

[root@vm ~]# id
uid=0(root) gid=0(root)=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

useradd → 新增一个用户

[root@vm ~]# useradd nano
[root@vm ~]# ls /home/
nano
[root@vm ~]# id nano
uid=1001(nano) gid=1001(nano)=1001(nano)
[root@vm ~]#

-d:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。

[root@vm ~]# useradd -d /home/administrator -m admin
[root@vm ~]# id admin
uid=1002(admin) gid=1002(admin)=1002(admin)
[root@vm ~]# 

-g:指定用户的gid(一定要存在)
-G:指定用户的附加组(一定要存在)

[root@vm ~]# useradd master -g 1002
[root@vm ~]# id master
uid=1003(master) gid=1002(admin)=1002(admin)
[root@vm ~]# 
[root@vm ~]# useradd admin2022 -G admin
[root@vm ~]# id admin2022
uid=1004(admin2022) gid=1004(admin2022)=1004(admin2022),1002(admin)
[root@vm ~]# 

-u:指定用户的 uid

[root@vm ~]# useradd u1006 -u 1006
[root@vm ~]# id u1006
uid=1006(u1006) gid=1006(u1006)=1006(u1006)

-s:指定用户登录的 Shell

[root@vm ~]# useradd u1006 -u 1006
[root@vm ~]# id u1006
uid=1006(u1006) gid=1006(u1006)=1006(u1006)

-M:不创建用户的主目录

[root@vm ~]# useradd nohome -M
[root@vm ~]# id nohome
uid=1008(nohome) gid=1008(nohome)=1008(nohome)
[root@vm ~]# ls /home
admin2022  administrator  master  nano  nouser  u1006
[root@vm ~]# 

passwd → 为账户设置密码

[root@vm ~]# passwd nano
更改用户 nano 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@vm ~]#

--stdin 将上一个命令的输出作为密码输入,一般用于管道符后

[root@vm ~]# echo 123 | passwd --stdin admin2022
更改用户 admin2022 的密码 。
passwd:所有的身份验证令牌已经成功更新。

userdel → 删除账户

[root@vm ~]# userdel nohome
[root@vm ~]# userdel nouser
[root@vm ~]# ls /home/
admin2022  administrator  master  nano  nouser  u1006
[root@vm ~]# rm -rf /home/nouser/
[root@vm ~]# ls /home/
admin2022  administrator  master  nano  u1006

-r :删除用户的时候将其主目录一起删除

[root@vm ~]# userdel -r u1006
[root@vm ~]# ls /home/
admin2022  administrator  master  nano
[root@vm ~]# userdel nohome

usermod → 修改用户

[root@vm ~]# id admin2022
uid=1004(admin2022) gid=1004(admin2022)=1004(admin2022),1002(admin)
root@vm ~]# usermod -s /bin/false admin2022
[root@vm ~]# usermod -g 1002 admin2022
[root@vm ~]# id admin2022
uid=1004(admin2022) gid=1002(admin)=1002(admin)
[root@vm ~]# usermod -G admin2022 admin2022 
[root@vm ~]# id admin2022
uid=1004(admin2022) gid=1002(admin)=1002(admin),1004(admin2022)

groupadd → 新增组

[root@vm ~]# groupadd hr

groupdel → 删除组

[root@vm ~]# groupdel hr

与用户账号有关的系统文件

  • /etc/passwd:用户账户信息。文件格式内容如下
用户名:口令uid:gid:注释性描述:主目录:登录Shell
  • /etc/shadow:安全用户账户信息。
用户名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:

用户名:和 /etc/passwd 里的用户名保持一致
加密口令:加密之后的用户口令,如果为空,则对应用户没有口令,登录时不需要口令
最后一次修改时间:计算机元年到到用户最后一次修改口令时的天数,
最小时间间隔:指的是两次修改口令之间所需的最小天数
最大时间间隔:指的是口令保持有效的最大天数
警告时间:指的是从系统开始警告用户到用户密码正式失效之间的天数
不活动时间:指的是用户没有登录活动但账号仍能保持有效的最大天数
失效时间:字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

  • /etc/group:组账户信息。
组名:口令:组标识号:组内用户列表
  • /etc/gshadow:安全组账户信息。
组名:加密密码:组管理员:组附加用户列表

权限管理

su → 切换账号

[root@vm ~]# 

chown → 更改文件所有者和所属组

  • 更改所有者
[root@vm apache-maven-3.6.3]# ll bin/m2.conf
-rw-r--r--. 1 root root  228 117 2019 m2.conf
[root@vm apache-maven-3.6.3]# chown nano bin/m2.conf 
[root@vm apache-maven-3.6.3]# ll bin/m2.conf
-rw-r--r--. 1 nano root  228 117 2019 m2.conf
[root@vm apache-maven-3.6.3]#
  • 更改所有者和所属组
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-r--r--. 1 nano root 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# id master
uid=1003(master) gid=1002(admin)=1002(admin)
[root@vm apache-maven-3.6.3]# id desc
uid=1005(desc) gid=1006(desc)=1006(desc)
[root@vm apache-maven-3.6.3]# chown desc:admin bin/m2.conf 
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-r--r--. 1 desc admin 228 117 2019 bin/m2.conf
  • 更改所属组
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-r--r--. 1 desc admin 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# chown :nano bin/m2.conf 
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-r--r--. 1 desc nano 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# 
  • 递归更改所有者和所属组
[root@vm apache-maven-3.6.3]# ll -d
drwxr-xr-x. 6 root root 99 1111 00:48 .
[root@vm apache-maven-3.6.3]# ll
总用量 36
drwxr-xr-x. 2 root root    97 1111 00:48 bin
drwxr-xr-x. 2 root root    76 1111 00:48 boot
drwxr-xr-x. 3 root root    63 117 2019 conf
drwxr-xr-x. 4 root root  4096 1111 00:48 lib
-rw-r--r--. 1 root root 17504 117 2019 LICENSE
-rw-r--r--. 1 root root  5141 117 2019 NOTICE
-rw-r--r--. 1 root root  2612 117 2019 README.txt
[root@vm apache-maven-3.6.3]# chown -R nano:nano .
[root@vm apache-maven-3.6.3]# ll -d
drwxr-xr-x. 6 nano nano 99 1111 00:48 .
[root@vm apache-maven-3.6.3]# ll
总用量 36
drwxr-xr-x. 2 nano nano    97 1111 00:48 bin
drwxr-xr-x. 2 nano nano    76 1111 00:48 boot
drwxr-xr-x. 3 nano nano    63 117 2019 conf
drwxr-xr-x. 4 nano nano  4096 1111 00:48 lib
-rw-r--r--. 1 nano nano 17504 117 2019 LICENSE
-rw-r--r--. 1 nano nano  5141 117 2019 NOTICE
-rw-r--r--. 1 nano nano  2612 117 2019 README.txt
[root@vm apache-maven-3.6.3]#

chgrp → 更改所属组

  • 更改所属组
[root@vm apache-maven-3.6.3]# ll -d bin/
drwxr-xr-x. 2 nano nano    97 1111 00:48 bin
[root@vm apache-maven-3.6.3]# chgrp root bin/
[root@vm apache-maven-3.6.3]# ll -d bin/
drwxr-xr-x. 2 nano root 97 1111 00:48 bin/
  • 递归更改所属组
[root@vm apache-maven-3.6.3]# ll -d .
drwxr-xr-x. 6 nano nano 99 1111 00:48 .
[root@vm apache-maven-3.6.3]# ll
总用量 36
drwxr-xr-x. 2 nano root    97 1111 00:48 bin
drwxr-xr-x. 2 nano nano    76 1111 00:48 boot
drwxr-xr-x. 3 nano nano    63 117 2019 conf
drwxr-xr-x. 4 nano nano  4096 1111 00:48 lib
-rw-r--r--. 1 nano nano 17504 117 2019 LICENSE
-rw-r--r--. 1 nano nano  5141 117 2019 NOTICE
-rw-r--r--. 1 nano nano  2612 117 2019 README.txt
[root@vm apache-maven-3.6.3]#
[root@vm apache-maven-3.6.3]# chgrp -R root .
[root@vm apache-maven-3.6.3]# ll -d .
drwxr-xr-x. 6 nano root 99 1111 00:48 .
[root@vm apache-maven-3.6.3]# ll
总用量 36
drwxr-xr-x. 2 nano root    97 1111 00:48 bin
drwxr-xr-x. 2 nano root    76 1111 00:48 boot
drwxr-xr-x. 3 nano root    63 117 2019 conf
drwxr-xr-x. 4 nano root  4096 1111 00:48 lib
-rw-r--r--. 1 nano root 17504 117 2019 LICENSE
-rw-r--r--. 1 nano root  5141 117 2019 NOTICE
-rw-r--r--. 1 nano root  2612 117 2019 README.txt

chmod → 更改权限

  • 字母+操作符,语法格式:chmod [用户类型][操作符][权限字符] 文件或目录

用户类型:u - 所有者(user)、g - 所属组(group)、o - 其他人(other)、a - 所有人(all)
权限字符:r - 读(read)、w - 写(write)、x - 执行(execute)、- - 无
操作符:+ - 增加权限、- - 删除权限、= - 赋予权限

[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-r--r--. 1 nano root 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# chmod g+w bin/m2.conf 
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-rw-r--. 1 nano root 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# chmod u+x,o-r bin/m2.conf 
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rwxrw----. 1 nano root 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# chmod o+wx bin/m2.conf
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rwxrw--wx. 1 nano root 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# chmod a=--- bin/m2.conf
[root@vm apache-maven-3.6.3]# ll bin/m2.conf
----------. 1 nano root 228 117 2019 bin/m2.conf
  • 数字

三种权限字符有 8 中排列可能:

数值 权限
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx

所以,单独的权限字符和数字的关系是: r4w2x1-0

一般地,目录的默认权限是: rwxr-xr-x755 ,文件的默认权限是: rw-r--r--644

[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
----------. 1 nano root 228 117 2019 bin/m2.conf
[root@vm apache-maven-3.6.3]# chmod 644 bin/m2.conf 
[root@vm apache-maven-3.6.3]# ll bin/m2.conf 
-rw-r--r--. 1 nano root 228 117 2019 bin/m2.conf

需要注意的是,对于目录没有 r 权限,不能读取目录下的内容,即不能使用 ls,如果目录没有 x 权限,则不能 cd 到该目录

[root@vm apache-maven-3.6.3]# chmod o+r bin
[root@vm apache-maven-3.6.3]# cd bin
[root@vm bin]# chmod g-x,o-x ./*
[root@vm bin]# ll
总用量 32
-rw-r---w-. 1 nano root  228 1113 00:21 m2.conf
-rwxr--r--. 1 nano root 5741 117 2019 mvn
-rw-r--r--. 1 nano root 6349 117 2019 mvn.cmd
-rwxr--r--. 1 nano root 1485 117 2019 mvnDebug
-rw-r--r--. 1 nano root 1668 117 2019 mvnDebug.cmd
-rwxr--r--. 1 nano root 1532 117 2019 mvnyjp

setfacl →

  • -m:设置后续acl参数
  • -x:删除后续acl参数
  • -b:删除全部的acl参数
  • -k:删除默认的acl参数
  • -R:递归设置acl,包括子目录
  • -d:设置默认acl
[root@vm ~]# 

网络指令

网络命令:hostname、ifconfig、ip、ping

netstat、TIP 和 Socket

网络命令:hostnamectl、nmtui、nmcli

远程访问

ssh & scp

scp 进行远程文件传输,相当于 FX

在 window 中的 cmd 中使用 scp 进行文件传输文件到 Linux ,语法是:scp 源文件 账号@地址:目标位置

D:\>scp D:/wyl.bat root@192.168.12.150:/root/

在 window 中的 cmd 中使用 scp 将文件从 Linux 传输到 Window

D:\>scp root@192.168.12.150:/root/app.js D:/

hostname 查看当前主机的名称

[root@vm ~]# hostname
vm.c7

因为当前的主机名是 vm.c7 ,故而,使用 ssh 的时候,其地址可以是 192.168.12.150 也可以是 127.0.0.1,还可以是 vm.c7

hosts 文件

在 window 或者 Linux 中, hosts 文件用于本地解析域名,其作用跟 DNS 类似,即将特定的名称视作是某个 ip 地址的主机。

在 Linux 中,该文件的位置是 :/etc/hosts,在 window 中,该文件的位置在 C:\Windows\System32\drivers\etc\hosts

如果在 hosts 文件中配置了主机名和 IP 地址的映射关系,则能使得任意主机名被使用

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 vm.c7
127.0.0.1 wyl.com

如果在 vm.c7 已经配置了 ip 映射关系,则可以使用 ssh 登录该主机

[root@vm ~]# ssh [email protected]

在使用 ssh 第一次连接一个目标主机的时候,会询问是否确定继续,在 回答 yes 后,会将信息保存到 家目录/.ssh/kown_hosts 文件中。

ssh-keygen:生成远程连接的密钥对(公钥和私钥)

[root@vm ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:VmB919eW7YwrKiocqkd/XI8mzoXTfNv+ZsBp1E6xs6A [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|        o.     .+|
|       . .. . o.*|
|          .. o B.|
|         .  o * o|
|        S  + = + |
|  . .  =. E * +  |
| . + oo.+o.o o   |
|  o +.+o+.oo  o  |
|.o   +++ ...o+.  |
+----[SHA256]-----+
[root@vm ~]# 

ssh-copy-id:将公钥发送到目标主机

该指令的作用是将本机的公钥发送到目标主机的 家目录/.ssh/authorized_keys

[root@vm ~]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

[root@vm ~]# ssh [email protected]

在 Window 中免密登录到 Linux :

  • 在window 的 cmd 中,使用 ssh-keygen 命令在家目录生成公钥和私钥
  • 将公钥的内容追加到 Linux 的 家目录/.ssh/authorized_keys 文件中

Nginx

官网:https://nginx.org/

打开官方的文档:https://nginx.org/en/linux_packages.html#RHEL,安装文档大致如下

  1. 安装必备组件: yum-utils
yum -y install yum-utils
  1. 设置 yum 存储库,创建文件 /etc/yum.repos.d/nginx.repo,其内容如下:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  1. 安装 nginx
yum-config-manager --enable nginx-mainline
yum -y install nginx

systemctl

systemctl 是一个系统服务管理工具

  • systemctl start :启动服务
[root@vm ~]# systemctl start nginx
  • systemctl status :查看服务状态
[root@vm ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 六 2022-11-12 22:04:50 CST; 2s ago
     Docs: http://nginx.org/en/docs/
  Process: 1612 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 1613 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1613 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─1614 nginx: worker process

1112 22:04:50 vm.c7 systemd[1]: Starting nginx - high performance web server...
1112 22:04:50 vm.c7 systemd[1]: Can't open PID file /var/run/nginx.pid (yet?) after st...ory
1112 22:04:50 vm.c7 systemd[1]: Started nginx - high performance web server.
Hint: Some lines were ellipsized, use -l to show in full.
  • systemctl stop :停止服务
[root@vm ~]# systemctl stop nginx
  • systemctl enable :启用服务(开机自动启动)
[root@vm ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
  • systemctl disabled :禁用服务
[root@vm ~]# systemctl disable nginx
Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service.
[root@vm ~]# 

防火墙

firewall-cmd 是 firewalld 守护程序的命令行客户端。它提供接口以管理运行时和永久配置。

--add-port:开放的端口和协议,单独使用将会立即生效(重启将会失效)

--remove-port:移出已开放的端口和协议,单独使用将会立即生效(重启将会失效)

--permanent:为配置设置为永久有效,但不会立即生效,重启之后才会生效

--reload:重新加载配置,使得所有的配置立即生效

--list-ports :查看防火墙已经开放的端口的列表

[root@vm ~]# firewall-cmd --add-port=80/tcp --permanent
[root@vm ~]# firewall-cmd --reload
success
[root@vm ~]# firewall-cmd --list-ports 
80/tcp
[root@vm ~]# 

nc

提供套接字测试的工具,服务端提供端口的监听,客户端连接服务端,两边即可实现信息通信。

  • 如何安装 nc ?
[root@vm ~]# yum -y install nmap-ncat
  • 如何启动服务端?
[root@vm ~]# nc -l 6666
  • 如何连接服务端?
[root@vm ~]# nc 192.168.12.153 6666

磁盘相关指令

du 查看文件或目录占据的磁盘空间

-s : 只显示总和、 -h :人类可阅读的方式显示大小

[root@vm ~]# du -sh

df 查看磁盘剩余大小

[root@vm ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 898M     0  898M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M  9.6M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  2.6G   15G   15% /
/dev/sda1               1014M  150M  865M   15% /boot
tmpfs                    182M     0  182M    0% /run/user/0

free 查看磁盘剩余大小

[root@vm ~]# free -h

lsblk 查看块设备

[root@vm ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  973M  0 rom
[root@vm ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@vm ~]# ls /mnt/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@vm ~]#
[root@vm ~]# umount /dev/sr0 
[root@vm ~]# ls /mnt/
[root@vm ~]# eject

如果插入的设备是来自一块 Window 的NTFS 格式的移动设备

[root@vm ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   1 29.3G  0 disk 
├─sdb1            8:17   1 28.1G  0 part 
└─sdb2            8:18   1  448M  0 part
[root@vm ~]# mount /dev/sdb1 /mnt/
mount: 未知的文件系统类型“ntfs”

安装 ntfs-3g 以支持 ntfs 文件系统的移动磁盘

[root@vm ~]# rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/Packages/n/ntfs-3g-libs-2022.5.17-1.el7.x86_64.rpm
获取https://mirrors.aliyun.com/epel/7/x86_64/Packages/n/ntfs-3g-libs-2022.5.17-1.el7.x86_64.rpm
警告:/var/tmp/rpm-tmp.auNwfd: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:ntfs-3g-libs-2:2022.5.17-1.el7   ################################# [100%]
[root@vm ~]#
[root@vm ~]# rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/Packages/n/ntfs-3g-2022.5.17-1.el7.x86_64.rpm
获取https://mirrors.aliyun.com/epel/7/x86_64/Packages/n/ntfs-3g-2022.5.17-1.el7.x86_64.rpm
警告:/var/tmp/rpm-tmp.AGT0EA: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:ntfs-3g-2:2022.5.17-1.el7        ################################# [100%]
[root@vm ~]#
[root@vm ~]# mount /dev/sdb1 /mnt/

重要指令

wc

[root@vm ~]# echo 'hi, I`m Nano' >> out
[root@vm ~]# wc out 
 1  3 13 out

1 行,3个词,13 字节

cut 切割文件中的内容

  • -f : 提取指定的字段,cut 命令使用 Tab 作为默认的分隔符。

  • -d : Tab 是默认的分隔符,使用这一选项可以指定自己的分隔符。

[root@vm ~]# cut -d ':' -f1,3,5 /etc/passwd

date 查看当前时间

[root@vm ~]# date
20221114日 星期一 14:16:13 CST

find 查找文件

[root@vm ~]# find . -name *.vue
./my-project/node_modules/jest-serializer-vue/test/components/Child.vue
./my-project/node_modules/jest-serializer-vue/test/components/List.vue
./my-project/node_modules/jest-serializer-vue/test/components/ListSpaced.vue
./my-project/node_modules/jest-serializer-vue/test/components/Parent.vue
./my-project/src/App.vue
./my-project/src/components/HelloWorld.vue
[root@vm ~]# find . -name *.vue -exec cp {} ../src/ \;

-name :根据名称查找文件

-exec :将找到的文件依次执行 exec 后的命令,其文件名将会替换掉 {} 部分,要以 \; 结束。

crontab 定时任务

定时任务的执行需要 crond 服务处于持续运行状态,通过 systemctl 查看:

[root@vm ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2022-11-14 13:48:34 CST; 1h 13min ago
 Main PID: 687 (crond)
   CGroup: /system.slice/crond.service
           └─687 /usr/sbin/crond -n

1114 13:48:34 vm.c7 systemd[1]: Started Command Scheduler.
1114 13:48:34 vm.c7 crond[687]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 65% if used.)
1114 13:48:39 vm.c7 crond[687]: (CRON) INFO (running with inotify support)
[root@vm ~]# 

如果不记得该如何配置定时任务,则查看 /etc/crontab 文件即可

[root@vm ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

每隔一分钟执行一次命令的写法:

* * * * * date >> /root/out.log

你可能感兴趣的:(Linux,linux,服务器,运维)