一、什么是shell?
- shell是Linux中运行的一种特殊程序(程序为执行任务的一串代码)
- shell在用户和内核之间充当“翻译官”(内核属于操作系统的一部分,用于调度cpu,程序占用多少内存)
- 用户登录Linux系统时会自动加载一个Shell程序
- shell是一类软件的总称(比如bash、sh、tsh都属于分类)
- Linux中默认的shell程序时bash
二、Linux命令的分类
Linux命令主要分为以下两类:
内部命令 | 外部命令 |
---|---|
集成于shell解释器程序内部的一些特殊指令,也称内建指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序 |
属于shell的一部分 | 属于shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由shell加载后才能执行 |
内部命令(系统自带):
- 没有单独对应的系统文件:系统自带的,没有系统文件去打开
- 内部命令的程序一直处于开启状态
- 没有独立的文件
- 程序会自动载入内存,可以直接使用
外部命令(需要自己额外安装):
- 外部命令存放在硬盘上
- 每个外部命令都有相对应的文件
- 每个外部命令都要知道对应文件的位置,才可以经过shell加载后使用
执行命令的顺序:内部>哈希>外部
执行ls命令,判断他是内部还是外部命令,如果是内部命令,直接执行;如果是外部命令在指定文件夹中寻找后,使用shell执行,所有文件夹未找到即报错没有此命令。
哈希(hash):内部命令执行不会存在在哈希表中,外部命令会存在哈希表中
哈希判断:
1.先判断是内部命令还是外部命令
2.如果是内部命令,直接在bash中执行
3.如果是外部命令,先看hash表,表中存在,先找表,表中路径不存在直接报错
4.表中没有去找对应文件夹(挨个查找)
5.找到执行找不到报错
type 命令用于区分内部命令还是外部命令
三、Linux的哲学思想
- 一切都是一个文件。(包括硬件,文本,二进制,源代码)
- 系统中拥有小型,单一用途的软件(一个程序只负责做好自己的工作,互不干涉)
- 当遇到复杂任务,通过不同功能用途的程序组合起来完成。
- 避免令人困惑的用户界面就是没有复杂的图形界面。()我想怎么使用程序,win程序
- 连配置文件都存储在文本中,方便增删改查
- 不在乎后缀名,有没有都无所谓,不是通过后缀名来定义文件的类型。
四、Linux命令格式
通用的命令行使用格式 命令字 +[选项]+[参数](之间一定要空格隔开) 命令字(区分字母大小写) 1.是整条命令中最关键的一部分
2.唯一确定一条命令(一定是确定的)
-
选项(程序不加选项只有默认的基础作用,加入选项可以让程序功能更强大)(默认功能)
-
参数(需要有选择对象):如果不加参数,默认是当前文件夹的所有参数(默认当前文件夹)
-
以 . 开头的都属于隐藏文件
1.1 ls命令
1.格式:ls -a(显示隐藏文件,包括. 与 ..开头的文件)
2.格式:ls-l(显示文件属性)#ls -l长格式显示,文件属性比较详细等同于 ll
3.格式:ls -A(显示文件,不包含.和..开头的隐藏文件)
4.格式:ls- d(只显示当前目录的属性)
5.格式:ls -h 人性化显示(加入了文件大小的单位)
6.格式:ls -R 递归显示
7.格式:ls --color显示颜色
补充:
ls会结合通配符去过滤需要的文件
通配符:
?代表任意单个字符
*是代表任意长度
举例以p开头的文件:p*
以.conf结尾的文件:*.conf
{1..10}:1到10 10个数
{a..z}:小写字母a-z
[123] :[123]只代表一个数值,从123中任取一个,只表示一个数,如果寻找345名字的文件夹或文件夹则找不到;[0-9]指的是0-9的单个数字一共9个数字
[a-c]:a A b B c共五个数值
[^a-c]:反向匹配:除了上列的五个数值以外的内容即[C-Z]
1.2 man命令(man手册)
man手册分为9章,我们可以通过man手册可以查询一些命令的基本用法
格式:man 1 passwd
1.3 cd命令(切换目录或文件夹,无法进入文件)
1.1格式:cd 文件夹名称
1.2格式:cd -(回到上一次的文件夹即上一条命令的文件夹)
1.2格式:cd ../(返回到上1级的目录)
补充:
- 绝对路径:从根目录开始写路径为绝对路径
参数前面以/开头就是绝对路径
举例:以./data开头就不是绝对路径
- 相对路径:相对于你当前文件夹的路径
cd ~切换到当前用户的家目录
家目录:对当前用户的个性化设置的文件夹(存放配置文件)
root(超级管理员)与普通用户的家目录不一样
root的家目录在根目录下即/root(根目录下有一个root文件夹)
普通用户在根目录下/home和用户名同名的文件夹
~ 代表当前用户的家目录
一个 . 代表当前目录
两个 .. 代表上一级目录
1.4du(disk use)
别名
别名是将常用的一些比较复杂的命令,简单化,通俗点就是用简单的单词或者字符去定义一串语言的命令。
1.格式:alias 自行定义的命令='常用的复杂命令'(如下图)
2.单独使用alias,会显示所有的别名命令
3.别名>内部>哈希>外部
4.删除别名:unalias 别名命令(查看文件或目录 占用磁盘空间的大小)
1.1 du -a(分开显示每个文件的大小)
1.2 du -s(显示当前文件夹的总大小)
1.3 du -h(人性化显示)
补充:
a与s不能同时使用,ah可以
du不统计文件的大小,只统计文件占用磁盘空间的大小,磁盘空间为块储存,最小一块为4k
举例:统计 /etc目录下第一层文件夹占用多少磁盘空间
du -d1 /etc: etc第一层目录的占用磁盘空间