Linux常用命令

Shell

前言:启动某个程序:查找程序在硬盘上安装位置,然后将其加载到内存运行。真正能控制硬件(CPU,显示器,内存)的只有OS kernel。但由于安生,复杂等原因用户不能直接接触内核,则在user与kernel增加一层“代理”(UI与命令行程序)。来接收用户操作,简单处理后传给 kernel。

  1. Shell是一个命令行程序,连接user与Linux kernel,让user更高效用Linux kernel。运行一个命令,大部分情况下Shell都会调用内核暴露出来的接口。这就是在使用内核。
  2. Shell也支持编程。Shell也是一种脚本语言(Script),解释型语言的别称是脚本语言(Script)。

Linux版本

  1. 核心版本
  2. 发行版本

Shell与Bash

  • Shell

Shell 是用户与操作系统内核之间的接口,允许用户通过输入命令与系统交互。它可以是命令行界面(CLI)或图形用户界面(GUI),但通常指 CLI。Shell 接收用户输入的命令,解释并执行它们。

  • Bash

Bash(Bourne Again Shell)是 Shell 的一种,由 Brian Fox 为 GNU 项目开发。它基于 Bourne Shell(sh),增加了更多功能,如命令行编辑、命令历史、脚本编程等。Bash 是许多 Linux 发行版的默认 Shell。

区别

  • 定义:

Shell 是用户与操作系统交互的接口。

Bash 是 Shell 的一种实现。

  • 功能:

Shell 提供基本的命令解释和执行功能。

Bash 在 Shell 的基础上增加了更多高级功能,如命令行编辑、命令历史等。

  • 兼容性:

Shell 通常指 Bourne Shell(sh)。

Bash 兼容 sh,并扩展了更多功能。

  • 使用场景:

Shell 适用于基本的命令行操作。

Bash 更适合复杂的脚本编写和交互式使用。

Shell命令与Bash命令

  1. Shell 命令

Shell 命令 是指通过 Shell(命令行解释器)执行的命令。

Shell 是一个统称,包括多种不同的 Shell 实现,比如:

1
2
3
4
5
6
7
8
9
Bash(Bourne Again Shell)

sh(Bourne Shell)

zsh(Z Shell)

csh(C Shell)

fish(Friendly Interactive Shell)

无论你使用哪种 Shell,都可以执行一些基本的命令,比如 ls、cd、echo 等。这些命令是 Shell 通用的。

  1. Bash 命令

Bash 命令 是特指在 Bash Shell 中执行的命令。
Bash 是 Shell 的一种,因此 Bash 命令也是 Shell 命令的一部分。
Bash 支持一些额外的功能和语法,比如:

  • 命令行编辑(使用方向键修改命令)
  • 命令历史(通过 history 查看)
  • 更强大的脚本编程功能(如数组、条件判断、循环等):例如,${VAR:-default} 这种语法是 Bash 特有的,其他 Shell 可能不支持。
  1. 为什么容易混淆?

因为 Bash 是目前最常用的 Shell,很多人默认使用的就是 Bash,所以经常把“Shell 命令”和“Bash 命令”混为一谈。
如果你在 Linux 或 macOS 的终端中输入命令,大概率是在 Bash 中运行的,所以你会觉得“Shell 命令”和“Bash 命令”是一回事。

  1. 如何区分?

如果你在写脚本或执行命令时,使用的是 Bash 特有的功能(比如 [[ ]] 条件判断、${VAR} 变量扩展等),那么这些就是 Bash 命令。
如果你使用的是非常基础的命令(比如 ls、cd、echo),这些是 Shell 命令,几乎所有的 Shell 都支持。

  1. 总结

Shell 命令 是通用的,适用于所有 Shell。

Bash 命令 是 Shell 命令的一部分,特指 Bash 支持的命令和语法。

如果你不确定自己用的是哪种 Shell,可以运行以下命令查看:

1
$ echo $SHELL #如果显示 /bin/bash,说明你正在使用 Bash。

Shell界面

Linux系统提供的命令需要在shell环境下运行,需要从图形界面进入shell界面,即终端(konsole)

命令格式

  • bash命令的一般格式:命令名+选项+参数
  • 正常执行后返回0,否则返回非零值(通过命令$?)查看
  • 一行放不下,用反斜杠\来中继
  • 连续的空格会被解释为单个空格

简单命令

  1. who命令:显示用户名+终端名+注册时间
  2. echo命令:
1
2
3
4
5
$ echo i am chy

$ echo i am a good boy #多个空格按一格

$ echo 'i am a good boy'
  1. date命令:显示日期
  2. cal命令:显示日历
1
2
3
4
5
6
7
$ cal #显示当前月份

$ cal 10 #显示公元10年的月份

$ cal 2 2025 #不言而喻

$ cal Feb 2025 #更洋气
  1. clear命令:清屏
  2. passwd命令:修改密码

文件系统

  1. .是当前目录;..是当前目录的父目录;使用cd可以切换到家目录;最上层的目录称为根目录(root),用/表示。
  2. .开头的是隐藏文件;以-开头的是普通文件;以d开头的是目录文件;以l开头的是符号链接文件。
  3. Linux的四种文件类型
    • 普通文件
    • 目录文件
    • 设备文件
    • 符号链接文件

文件操作命令

文件显示命令

  1. cat命令:显示文件、连接两个或多个文件
1
2
3
4
5
$ cat f1 #显示f1内容

$ cat f1 f2 #同时显示f1与f2内容

$ cat f1 f2 > f3 #把文件f1与f2中的内容合并放到f3中

404

  1. more命令:每次显示一屏
1
2
3
$ more -dc f1 #-d 显示友好信息    -c 先清屏

$ more -c -10 f1 #每10行显示一次,显示前先清屏
  • space:显示下一屏
  • enter:显示下一行
  • B:上一屏
  • Q:退出
  1. less命令:同more命令
    增强处在于:
  • 使用切换行
  1. head命令:显示文件开头若干行(默认10)
1
$ head -5 f1 # 显示5行
  1. tail命令:显示末尾若干行(默认10)
1
2
3
$ tail +20 f1 # 从文件20行显示到最后

$ tail -c 10 f1 # 显示f1最后10个字符
  1. touch命令:修改指定文件标签或者创建一个空文件
1
$ touch f1 # 创建文件f1

匹配、排序、显示指定内容的命令

  1. grep命令:查找指定的词或者短语
1
2
3
4
5
6
7
$ grep -F hello f1 # 在f1中查找hello所在的‘行’。-F表明此时hello为单纯字符串

$ grep -r 'print' d1 # 以递归方式查询目录d1子目录下的所有文件

$ grep -E '[Mm]i || [Yy]j' f1 f2 # 此时字符串为正则表达式

$ grep -i 'main' f1 # 比较时不区分大小写
  1. sort命令:排序
  2. uniq命令:去重

查找和比较文件的命令

  1. comm命令:比较两个已经排好序的文件(逐行比较)
  • -123表示不显示第一列(仅在f1中出现的行)、第二列(仅在f2中出现的行)、第三列(在f1与f2中出现的行)
  1. diff命令:(不要求两个文件事先排好序)

  2. cmp命令:(发现差异会标出差异的位置)

1
2
3
$ cmp -b ex1 ex2
ex1 ex2 differ:byte 1,line 1 is 144 d 43 #
# 意思是第一行第一字节不同,ex1上是e,编码144,ex2上是#
  1. find:(在指定的目录下查找相应的文件)
1
$ find . -name "m*.c" #在当前目录下查找以m开头.c结尾的文件

复制、删除和移动文件的命令

  1. cp命令:
1
2
3
4
5
6
$ cp mfile /home/fox/exam1 # 将mfile复制到/home/fox下,并改名为exam1

$ cp -r /home/fox /home/cat # 将目录/home/fox下所有文件及其子目录复制到目录/home/cat中

$ cp -i /home/fox /home/cat # i是交互式的,覆盖前会提示

  1. rm命令:(删除)
1
2
3
$ rm -i test example # 交互式删除文件

$ rm -r * # 递归删除当前目录下除隐含文件外的所有文件和子目录
  1. mv命令:(对文件或者目录重命名,或者将文件从一个目录移动到另一目录中)
1
2
3
$ mv ex1 new1 # 改名字

$ mv /home/doc/* . # 把/home/doc下的所有文件移到当前目录

文件内容统计命令

  1. wc命令
1
2
3
$ wc -clw f1 f2 # -c:字节数 -l:行数 -w:字数

$ wc f1 #同上

目录及其操作命令

绝对路径与相对路径

  1. 显示绝对路径
1
$ pwd
  1. 相对路径
    相对路径不唯一

创建和删除目录

  1. mkdir命令:
1
$ mkdir f1.txt # 在当前目录下创建f1.txt
  1. rmdir命令:
    注意:不能在子目录下删除父目录,或者在当前目录下删除当前目录。且被删目录应为空目录

改变工作目录和显示目录内容

  1. cd命令:
1
2
3
4
5
6
7
$ cd.. # 向上移动一级

$ cd../.. # 向上移动两级

$ cd # 切换到家目录

$ cd home/chen #切换到home/chen
  1. ls命令:(列出指定目录内容)
1
2
3
4
5
6
7
$ ls -F # 列出当前目录内容,并标出文件属性
# /,表示目录;*,表示可执行文件;@,表示符号链接文件;|,表示管道文件;=,表示socket文件

$ ls -C # 以多列形式列出目录的内容(实际上跟不加C一样)

$ ls -lai #长格式、所有文件(显示隐藏文件)、显示I节点号(每个文件或目录都有一个唯一的 inode 号,用于标识文件。
# Inode 号类似于文件的“身份证号”。)

链接文件的命令

  1. 硬链接
    创建的链接与原来的文件Inode号不变。

  2. 软链接
    创建的链接与原来的文件Inode号发生改变。

  3. ln命令:(用来创建链接)

1
2
3
$ ln a1.txt a1.txt.link # -F为硬链接,默认为硬链接

$ ln -s a2.txt a2.txt.link # -s为软链接

改变文件或者目录存取权限的命令

Linux中有四种用户:1-当前用户(user);2-当前用户的用户组(group);3-其他用户(others);4-超级管理员(root)。其次all代表所有用户
Linux中有三种权限:r-读;w-写;e-执行

  1. chmod命令
1
2
3
4
5
$ chmod a+x ex1 # 将文件ex1改为所有用户都有可执行权限

$ chmod u=rx,g=x,o= ex1 # 其他用户无权访问

$ chmod 0664 ex1 # 代表 0 111 111 100 -rwx-rwx-r--
  1. unmask命令:(设置新建文件的掩码,默认0022)
  • 新建文件的原始权限为:0666
  • 新建目录的原始权限为:0777
  1. 若设置掩码为:0022。则上述变为0666-0022=0644;0777-0022=0755
1
2
3
# 设置掩码默认值
$ umask
0022

改变用户组和文件主的命令

  1. chgrp
1
2
# -R:递归式,将/home/wc下的文件及其子文件的用户组改为chenshi
$ chgrp -R chenshi /home/wc
  1. chown
    同上,不过是改变用户主

联机帮助命令

  1. man
1
2
# date命令的用法
$ man date
  1. help

有关进程的命令

  1. ps
1
2
3
4
5
6
7
8
9
10
$ ps

PID TTY TIME CMD
2140 pts/0 00:00:00 bash
2159 pts/0 00:00:00 ps

# PID:进程ID号
# TTY:该进程建立时对应的终端(pts/0、pts/1、pts/2······)
# TIME:占用CPU的时间,有些命令虽然运行了很长时间,但真正使用CPU的时间往往很短
# CMD:执行进程的命令名。
  1. nice:修改进程优先级
  2. kill:杀死进程
1
$ kill 1999 # 1999为PID号码
  1. sleep:暂停进程
1
$ sleep 100 # 暂停100秒

文件的压缩与解压缩

  1. gzip:压缩文件(默认)/解压缩文件
1
2
3
4
5
6
7
8
9
$ cd /home/chen

$ gzip * # 将当前所有文件压缩

$ gzip -dv * # -d解压缩;-v显示详细信息

$ gzip -l # 列出每个压缩文件的信息,但不执行解压缩

$ gzip -v --fast * # -v显示压缩比;--fast实现快速解压
  1. unzip:对.zip文件解压缩
1
2
3
$ unzip hong.zip

$ unzip -v hong.zip # 显示有关压缩文件的信息,但不解压缩
  1. tar:归档
1
2
3
$ tar -cvf
$ tar -xvf
$ tar -cvzf

文本编辑

前言

  1. vi是文本编辑器;vim是vi improved
  2. 在UNIX/Linux系统中都存在vi
  3. Linux中输入vi其实就是启动了vim

vi的三种工作方式

命令方式

进入vi编辑器后,输入命令

  1. a(append):附加命令
  2. i(insert):插入命令

输入这些命令既由命令方式->输入方式

输入方式

按下输入的键来输入

按下esc由输入方式->命令方式

ex转义方式

:作为ex命令提示符,后跟命令,按下delete终止执行

进入与退出vi

进入vi

1
$ vi example.c

退出vi

  1. :wq:保存并退出
  2. :ZZ:当有改动时,才写入
  3. X:同2
  4. :q!:强制退出

命令模式下的命令

插入命令

  1. i命令:光标在哪,就在光标处的前一位置插入
  2. I命令:光标在哪,就在行首插入

附加命令

  1. a命令:光标在哪,就在光标处的后一位置插入
  2. A命令:光标在哪,就在行尾插入

打开命令(开辟新行)

  1. o:在当前行的下面新开一行
  2. O:在当前行的上面新开一行

命令模式下移动光标

  1. l;Space;:向右移动。
    3+l == 3+Space

  2. h;BackSpace;:向左移动

  3. k;:向上移动

  4. enter;;j:向下移动

命令模式下文本修改

  1. x;X:前者向左删除;后者向右删除
    用法:3x

  2. dd:删除整行

输入模式

光标的移动

  1. 方向键:移动光标
    注意:

    关于Linux下shell界面按上下左右方向键出现ABD的问题
    这个问题有两种可能,一种是由于当前用户使用的shell是/bin/sh的原因。在添加用户的时候没有添加用户的指定shell类型,因此默认
    为/bin/sh。
    可以用shell类型命令:echo $SHELL 查看当前用户的shell类型,如果是/bin/sh,使用:chsh -s /bin/bash username或者使用
    usermod -s /bin/bash username命令修改shell类型。
    另一种是当前用户的shell类型是/bin/bash但是还是会有这个问题,这时可以在终端输入:export TERM=linux。
    这个是因为ubuntu的版本的TERM的问题。

  2. BackSpace:回退到某一位置开始重做

输入文本

即输入你想输入的文本

ex转义模式

  1. 常用命令
1
2
3
4
5
6
7
8
9
10
11
$ :20   # 移动到第20行

$ :/this # 从当前行向后查找this

$ :?thils # 向前

$ : 15 , 100 d # 删除15-100行

$ : . , +5d #删除当前行和他后面的5行

$ g/s1/p # 打印全文中含有s1的行

Linux Shell程序设计

之前写的大多数命令,shell都作为命令解释程序出现,下面将介绍Shell程序设计语言(默认为Bash)。

Shell脚本的概述、建立与执行

概述

在第一行写上#!/bin/bash表明下面的脚本是用Bash编写的

建立

使用vi编辑器

三种执行方式

1
2
3
4
5
6
7
8
# 1
$ bash < ScriptName

# 2
$ bash ScriptName para1 para2 ···

# 3-将Shell脚本的权限设为可执行;然后输入它的名字就可执行它
$ ScriptName

显示与执行历史命令

显示

1
2
3
4
5
6
7
$ history
81 pwd
82 history
# 历史事件号越大,表明越是最近执行的命令

# 显示10条
$ history 10

执行

404

配置历史命令环境

1
2
3
4
5
6
7
8
chen12@ubuntu:~$ echo $HISTFILE
/home/chen12/.bash_history

# 解释:$+HISTFILE:是显示其值

$ $HISTSIZE = 600

# 解释:设置可存储600条命令

名称补全

名称补全可以补全命令与参数,但不能补全选项

别名

番外

职位

  1. 前端:Vue
  2. 后端:Spring Boot
  3. 测试:测试工具
  4. 售前:demo版本
  5. 运维与交付:对客户培训

工具

  1. finalshell:国产远程控制Linux软件

管道

  1. “|”是Linux管道命令操作符,简称管道符。使用此管道符“|”可以将两个命令分隔开,“|”左边命令的输出就会作为“|”右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

404