shell是什么

Shell(壳) 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

常用指令

1. 目录操作

cd - 切换目录

  • 作用: 用于切换当前工作目录。
  • 用法: cd [目录路径]
  • 示例:
    1
    cd /path/to/directory

ls - 查看目录内容

  • 作用: 用于列出目录中的文件和子目录。
  • 用法: ls [选项] [目录]
  • 示例:
    1
    2
    3
    ls                  # 列出文件和目录
    ls -a # 列出所有文件,包括隐藏文件
    ls -lh # 以详细格式显示文件信息,包括大小和权限

cp - 拷贝文件或目录

  • 作用: 用于复制文件或目录。
  • 用法: cp [选项] 源文件 目标目录
  • 示例:
    1
    2
    cp file1 file2      # 复制文件
    cp -r dir1 dir2 # 复制目录及其内容

mv - 移动/重命名文件或目录

  • 作用: 用于移动文件或目录,也可用于重命名文件或目录。
  • 用法: mv [选项] 源文件 目标文件/目录
  • 示例:
    1
    2
    3
    mv file1 file2      # 移动/重命名文件
    mv dir1 dir2 # 移动/重命名目录
    mv file1 dir1 # 将文件移动到目录

mkdir - 创建目录

  • 作用: 用于创建新目录。
  • 用法: mkdir [目录名]
  • 示例:
    1
    mkdir new_directory

rmdir - 删除空目录

  • 作用: 用于删除空目录。
  • 用法: rmdir [目录名]
  • 示例:
    1
    rmdir empty_directory

2. 文件操作

touch - 创建空文件或更改时间戳

  • 作用: 用于创建新文件,也可用于更改文件的访问和修改时间戳。
  • 用法: touch [文件名]
  • 示例:
    1
    touch new_file

rm - 删除文件或目录

  • 作用: 用于删除文件或目录。
  • 用法: rm [选项] 文件/目录
  • 示例:
    1
    2
    rm file1            # 删除文件
    rm -r dir1 # 删除目录及其内容

链接文件(重点)

"链接文件"通常指的是操作系统中的符号链接(Symbolic Link)或硬链接(Hard Link)。这两者都是用于在文件系统中创建文件之间关联的机制,但它们之间有一些重要的区别。

  1. 软链接(Symbolic Link):
    • 符号链接是一个特殊类型的文件,它包含指向另一个文件或目录的路径。
    • 创建符号链接不需要访问原始文件或目录的权限,因为它只是一个路径引用。
    • 符号链接可以跨越文件系统边界,因为它们只是路径的引用。
    • 删除原始文件不会影响符号链接,但删除符号链接会导致链接失效。
  2. 硬链接(Hard Link):
    • 硬链接是一个文件系统中的多个目录项,指向相同的磁盘数据块。
    • 硬链接只能在同一文件系统中创建,因为它们共享相同的 inode(索引节点)。
    • 删除原始文件并不会立即影响硬链接,因为硬链接只是对相同数据块的引用。只有当所有硬链接和原始文件都被删除后,才会释放磁盘空间。
    • 硬链接与原始文件没有"源"或"目标"的概念,它们只是指向相同的数据块。

这些链接文件的使用可使文件系统更加灵活,提供了方便的管理和组织文件的方式。在命令行中,ln是用于创建链接文件的常见命令,具体的使用方式取决于操作系统。

3. 文件查看与编辑

cat - 查看文件内容

  • 作用: 用于在终端中查看文件的内容。
  • 用法: cat [文件名]
  • 示例:
    1
    cat filename

head - 显示文件头部内容

  • 作用: 用于显示文件的前几行(默认为前10行)。
  • 用法: head [文件名]
  • 示例:
    1
    2
    head filename		默认查看文件的后10行
    head -n 文件名 默认查看文件的指定前n行

tail - 显示文件尾部内容

  • 作用: 用于显示文件的后几行(默认为最后10行)。
  • 用法: tail [文件名]
  • 示例:
    1
    2
    tail filename		默认查看文件的后10行
    tail -n 文件名 默认查看文件的指定后n行

4. 用户和身份切换

whoami - 查看当前用户

  • 作用: 用于显示当前登录用户的用户名。
  • 用法: whoami
  • 示例:
    1
    whoami

su - 切换用户

  • 作用: 用于切换用户。
  • 用法: su [用户名]
  • 示例:
    1
    su username

passwd - 修改用户密码

  • 作用: 用于修改用户密码。
  • 用法: passwd
  • 示例:
    1
    passwd

5. 系统信息和进程管理

ps - 查看系统进程信息

  • 作用: 用于显示当前运行的进程信息。
  • 用法: ps [选项]
  • 示例:
    1
    ps aux

kill - 终止进程

  • 作用: 用于终止指定进程。
  • 用法: kill [进程ID]
  • 示例:
    1
    kill 1234

6. 权限管理

chmod - 修改文件权限(重点)

作用: 用于更改文件的权限。

  • 用法: chmod [权限] [文件名]
  • 示例:
    1
    chmod 755 filename

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

  • 作用: 用于更改文件的所有者和所属组。
  • 用法: chown [用户]:[组] [文件名]
  • 示例:
    1
    chown user:group filename

chgrp - 更改文件所属组

  • 作用: 用于更改文件的所属组。
  • 用法: chgrp [组] [文件名]
  • 示例:
    1
    chgrp group filename

7. 网络和下载

wget - 下载文件

  • 作用: 用于下载文件。
  • 用法: wget [URL]
  • 示例:
    1
    wget https://example.com/file.txt

8. 文本处理与搜索

echo - 打印字符串

  • 作用: 用于在终端中打印文本,类似printf
  • 用法: echo [字符串]
  • 示例:
    1
    2
    3
    4
    5
    echo "Hello, World!"
    echo '字符串'
    echo "字符串"
    echo -n 字符串 取消换行
    echo -e "字符串" 使转义字符有效

grep - 在文件中搜索文本(重点)

  • 作用: 用于在文件中搜索包含特定文本的行。

  • 用法: grep [模式] [文件名]

  • 示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    grep "pattern" filename

    grep 选项 "字符串" 文件
    -i 忽略大小写
    -n 显示行号
    -w 单词查找
    -R 递归查找字符串,可以跟目录
    eg: 查找/etc/passwd文件中存在字符串ubuntu的信息,并显示行号
    grep -n "ubuntu" /etc/passwd
    特殊查找:
    grep "^hello" 文件名 查找以hello开头的字符串
    grep "hello$" 文件名 查找以hello结尾的字符串
    grep "^hello$" 文件名 查找以hello开头,结尾的字符串,只有一个字符串hello


find - 在文件系统中查找文件

  • 作用: 用于在指定目录及其子目录中查找文件。
  • 用法: find [路径] -name [文件名]
  • 示例:
    1
    2
    3
    4
    5
    6
    7
    find /path/to/search -name "filename"
    find -name 文件名 默认在当前路径下查找指定文件

    find多和通配结合使用*,起到模糊查找
    find 查找的路径 -name f* 在指定路径下查找以f开头的所有文件
    find 查找的路径 -name f\*
    find 查找的路径 -name "f*"

cut - 从文本中提取部分内容(重要)

  • 作用: 用于从文本中提取指定列的内容,字符串剪切,截取
  • 用法: cut -d 分隔符 -f 截取的域 文件名
  • 示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    www.baidu.com.1111.222.ddd

    cut -d "." -f 2 file2 截取第2个域
    cut -d "." -f 2-5 file2 截取2到5个域之间的字符串
    cut -d "." -f 2,5 file2 截取第2个和第5个域

    eg:截取/etc/passwd文件中 以字符串ubuntu开头的内容,并获取bash这个字符串
    ubuntu:x:1000:1000:ubuntu,,,:/home/ubuntu:/bin/bash

    ubuntu@ubuntu:23111C高级$ grep "^ubuntu" /etc/passwd | cut -d "/" -f 5
    bash
    ubuntu@ubuntu:23111C高级$ grep "^ubuntu" /etc/passwd | cut -d ":" -f 7 | cut -d "/" -f 3
    bash

wc - 统计文件中的行数、字数和字符数

  • 作用: 用于统计文件的行数、字数和字符数。
  • 用法: wc [选项] [文件名]
  • 示例:
    1
    2
    3
    4
    5
    wc filename

    wc -l 文件名 只显示行号
    wc -w 文件名 只显示单词的个数
    wc -c 文件名 只显示字符的个数

9. 压缩和解压缩

tar - 打包和解压缩文件

  • 作用: 用于将文件打包成.tar文件,或解压缩.tar文件。
  • 用法: tar [选项] [目标文件] [文件列表]
  • 示例:
    1
    2
    tar -cvf archive.tar files
    tar -xvf archive.tar

zip - 压缩和解压缩文件

  • 作用: 用于将文件压缩成.zip文件,或解压缩.zip文件。
  • 用法: zip [选项] [目标文件] [文件列表]
  • 示例:
    1
    2
    zip archive.zip files
    unzip archive.zip

10. 管道和重定向

| - 管道符(重点)

  • 作用: 用于将命令的输出传递给另一个命令作为输入。
  • 用法: command1 | command2
  • 示例:
    1
    cat file.txt | grep "pattern"

>>> - 重定向操作符

  • 作用: 用于将命令的输出重定向到文件。

  • 用法:

    1
    2
    command > file      # 将输出覆盖到文件
    command >> file # 将输出追加到文件
  • 示例:

    1
    2
    echo "Hello" > greeting.txt 
    echo " World" >> greeting.txt

11. 其他

history - 查看命令历史

  • 作用: 用于显示最近执行的命令历史。
  • 用法: history
  • 示例:
    1
    history

file - 确定文件类型

  • 作用: 用于确定文件的类型,查看文件信息

  • 用法: file [文件名]

  • 示例:

    1
    file 文件名/目录名

通配符(重点)

i> * 匹配多个字符

  • 示例:
1
2
3
4
5
6
7
8
$ ls
f1 f2 f234 f24sd fabcd fas fase oneko_1.2.sakura.6-13_amd64.deb
$ ls f* 匹配以f开头的文件
f1 f2 f234 f24sd fabcd fas fase
$ ls f2* 匹配以f2开头的文件
f2 f234 f24sd
$ ls *d 匹配以d结尾的文件
f24sd fabcd

ii>?匹配一个字符

1
2
3
4
5
6
$ ls
f1 f2 f234 f24sd fabcd fas fase oneko_1.2.sakura.6-13_amd64.deb
$ ls f? 匹配f开头后面只有一个字符
f1 f2
$ ls f?? 匹配f开头后面只有两个字符
fas

iii>[] 匹配一个字符,多用于有范围

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ls
f1 f2 f234 f24sd fabcd fas fase oneko_1.2.sakura.6-13_amd64.deb
$ ls f[0-9] 匹配以f开头第二个字符时0-9
f1 f2
$ ls f[a-z][a-z] 匹配f开头第二个字符时a-z,第三个字符时a-z
fas

f1 f2 f234 f24sd fa fabcd fas fase oneko_1.2.sakura.6-13_amd64.deb
$ ls f[0-9a] 匹配f开头第二个字符0-9或者a
f1 f2 fa

$ ls f[0-9,a] 匹配f开头第二个字符0-9或者或者,
f, f1 f2 fa

链接文件(重点)