「Linux命令基础」Shell命令基础

Shell是什么

Linux中的Shell命令,就像使用者和计算机对话的"翻译官",只需要掌握一些基本的命令语法,就能让计算机乖乖听话,执行命令。

严格来说,Shell是用户与Linux内核沟通的接口。当输入ls查看文件时,Shell会把这个简单单词转换成复杂的系统调用。

常见的Shell

在Linux 系统中,常见的Shell 解释器有多种,它们各自具备不同的功能和特性,以满足不同用户的需求。例如:

  • bash:最流行的Shell,Bash 是 Linux 操作系统默认的 Shell 解释器。
  • sh:是早期Unix系统的标准 Shell。现在大多数情况下已经被bash 取代,但在某些环境中仍然存在。
  • zsh:是一种非常强大且可高度定制的 Shell,它结合了许多其他 Shell 的优秀特性,并加入了自己的创新功能。提供了智能补全、拼写校正、模块化支持等功能,适合高级用户和开发者使用。
  • ksh:一种专为提高效率而设计的 Shell。因为其性能优越而在商业环境中得到应用。
  • cshtcshcsh类似于 C 编程语言的语法结构。tcsh则是对 csh的扩展,提供了更好的交互式编辑和其他增强功能。
  • fish:注重用户体验,它的特点包括语法高亮显示、Web 配置界面以及对新手友好的提示信息等。

这些 Shell 各具特色,选择哪一种取决于个人偏好及具体应用场景。对于大多数 Linux 用户来说,bash 通常是首选。

相关示例 示例:①检查当前使用的shell;②列出系统中安装的所有可用shell。

bash 复制代码
echo $SHELL # ①检查当前使用的shell
# 运行结果:`/bin/bash`

cat /etc/shells # ②列出系统中安装的所有可用shell
# 运行结果
# /bin/sh
# /bin/bash
# /usr/bin/sh
# /usr/bin/bash

Shell命令的语法规则

Shell命令有自己的语法规则。基本格式可以拆解为:

css 复制代码
命令名 [选项] [参数1] [参数2]......

语法规则说明:

  • 命令名、选项和参数之间都用空格间隔,连续的空格会被shell解释为单个空格。
  • 命令名由小写的英文字母构成,其往往是表示相应功能的英文单词或单词的缩写。
  • \]表示可选内容。

  • 参数是命令的操作对象,如文件、目录、用户和进程等。

相关示例 示例:①查看当前目录内容;②查看详细信息;③查看指定目录(/home)详细信息

bash 复制代码
ls # ①查看当前目录内容(不带任何选项和参数)
# 运行结果
# anaconda-ks.cfg 

ls -l # ②查看详细信息(-l是选项)
# 运行结果
# -rw-------. 1 root root 1228 8月  26 2021 anaconda-ks.cfg

ls -l /home # 查看指定目录(/home)详细信息,/home是参数
# 运行结果
# 总用量 0

ls -la
# 运行结果
# 总用量 36
# dr-xr-x---.  3 root root  180 8月  26 2021 .
# dr-xr-xr-x. 17 root root  244 12月  7 2024 ..
# -rw-------.  1 root root 1228 8月  26 2021 anaconda-ks.cfg
# -rw-------.  1 root root 1073 12月  6 2024 .bash_history
# -rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
# -rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
# -rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
# -rw-r--r--.  1 root root  100 12月 29 2013 .cshrc
# drwxr-----.  3 root root   19 8月  26 2021 .pki
# -rw-r--r--.  1 root root  129 12月 29 2013 .tcshrc
# -rw-------.  1 root root 1108 8月  26 2021 .viminfo

实用技巧 :选项可以组合使用。比如ls -la相当于同时使用了-l(长格式)和-a(显示所有)两个选项。

命令使用技巧

  • 历史命令重用

    按上下箭头可以翻找之前输入的命令。输入history能看到所有历史命令,用!编号可以直接执行某条历史命令。

  • 命令补全

    输入命令前几个字母后按Tab键,Shell会尝试补全命令或文件名。比如输入tou后按Tab,可能补全为touch。如果匹配多个可能,按两次Tab会显示所有选项。

  • 通配符
    *可以匹配任意字符,比如rm *.txt会删除所有txt文件。?匹配单个字符,rm doc?.txt会匹配doc1.txt但不会匹配doc10.txt。

  • 命令组合

    &&可以连续执行命令,比如:

    bash 复制代码
    mkdir new_folder && cd new_folder

    这表示"先创建文件夹,如果成功就进入该文件夹"。

常见错误及解决方法

  • 权限不足

    执行命令时出现"Permission denied",表示当前用户没有足够的权限访问某个文件或目录;在某些情况下,可能需要切换到具有足够权限的用户(如 root)进行操作。 解决方法有两个:

    • sudo临时获取管理员权限(需要密码)
    • chmod修改文件权限
  • 文件不存在

    当出现"No such file or directory"时,首先需要确认文件或目录的路径是否正确。 解决方法:先用pwd确认当前位置,再用ls查看目录内容。

  • 误删文件

    Linux没有回收站,rm删除的文件很难恢复。建议使用-i选项询问是否确认删除。

    bash 复制代码
    rm -i important.txt

练习题

理论题

  1. 如果想查看/var目录的磁盘使用情况,应该用什么命令?
    A. ls /var
    B. du /var
    C. cd /var
    答案:Bdu(disk usage)命令用于查看磁盘使用情况,ls只是列出文件,cd是切换目录。
  2. 解释这条命令的作用:chmod +x script.sh
    答案:。这条命令给script.sh文件添加可执行权限。"+x"表示给所有者、所属组和其他用户都添加执行权限。

实操题

操作要求 : 使用root用户登录Linux系统。实现如下命令;①在当前目录下创建一个名为"test"的目录;②切换到在"test"的目录;③在"test"的目录中新建两个文件:note1.txt和note2.txt;④用一条命令查看这两个文件的详细信息;⑤删除note1.txt,但让系统在删除前询问确认;⑥再次尝试查看这两个文件的详细信息。 参考命令

bash 复制代码
mkdir test  # ①在当前目录下创建一个名为"test"的目录
cd test # ②切换到在"test"的目录
touch note1.txt note2.txt # ;③在"test"的目录中新建两个文件:note1.txt和note2.txt
ls -l note*.txt # ④用一条命令查看这两个文件的详细信息
rm -i note1.txt # ⑤删除note1.txt,但让系统在删除前询问确认
# rm:是否删除普通空文件 "note1.txt"?y
ls -l note*.txt # ⑥再次尝试查看这两个文件的详细信息,结果只剩下一个文件。
相关推荐
Two_brushes.18 分钟前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW02081423 分钟前
【Linux】系统引导修复
linux·运维·服务器
慌糖42 分钟前
CentOS 安装 Redis 简明指南
linux·redis·centos
设计师小聂!1 小时前
linux常用命令(一)
linux·运维·服务器
hnlucky1 小时前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web
cui_win1 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
linux·网络·tcp/ip
笑稀了的野生俊2 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found
linux·人工智能·ubuntu·大模型·glibc·flash-attn
千帐灯无此声2 小时前
Linux 测开:日志分析 + 定位 Bug
linux·c语言·c++·bug
誰能久伴不乏2 小时前
深入了解 Vim 编辑器:从入门到精通
linux·编辑器·vim
ghie90903 小时前
在Centos系统上如何有效删除文件和目录的指令汇总
linux·运维·centos