Linux常见指令

一. 操作系统简述

计算机软硬件体系结构是层状结构, 如下图:
请添加图片描述

操作系统是进行软硬件资源管理软件

操作系统是系统软件, 不是硬件
负责管理协调硬件, 软件等计算机资源的工作
向上提供良好稳定的运行服务

二. shell命令以及运行原理

Linux 严格意义上说的是一个操作系统, 我们称之为"核心(kernel)", 广义上操作系统包括核心和外壳, 一般用户不能直接接触内核, 而是通过 shell 外壳进行与 kernel 的沟通的.

shell外壳: 接收用户输入, 帮用户执行命令, 并展现给用户, 以命令行为表现形式的软件.

从技术角度来说, shell 的最简单定义: 命令行解释器(command interpreter) 主要包含:

  • 将用户的命令翻译给核心(kernel)处理
  • 同时, 将核心的处理结果翻译给使用者

平时在终端中看到的黑乎乎的命令行就是shell外壳.
在这里插入图片描述

在 windows 上面, 这个外壳就是图形化界面(windows GUI)


为什么要有 shell呢?

  1. 操作系统本身易用程度底, 需要对操作系统熟悉的用户才能正确使用, 在操作系统内核外包一层 shell 外壳, 方便用户使用.
  2. 为了安全性, 操作系统有一些接口不允许用户直接访问, 通过 shell 外壳起到隔断作用, 起到一定保护作用.

shell 是怎么工作的呢?
shell 本质是一个运行起来的进程, 在系统启动期间一直存在.
如果指令有风险, 比如用户自定义的指令, 可能会操作内核,
这个时候, shell 就会通过创建子进程的方式去执行有风险的指令.

总结:

  1. 低风险, 容易的, shell 进程会自己上手
  2. 困难的, 不容易的, shell 进程会创建子进程进行处理

每用终端进行登陆的时候, 操作系统都会给这个用户的当前登陆新增一个shell

shell 是一个统称, 在 centos 上面的 shell 具体是 bash.

这里使用指令可以看到当前 bash 进程正在运行, 但是这里有两个 bash
在这里插入图片描述

可以通过 c语言的 getpid()getppid() 得到当前运行程序(c源代码编译运行的程序)的进程id 和 其父进程(bash)的进程id

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>

int main()
{
   printf("我的pid: %d\n", getpid());
   printf("我的父进程pid: %d\n", getppid());

   return 0;
}

程序运行如下, 可以得到 bash 的进程id是 31444
在这里插入图片描述

如果这个时候使用杀死进程命令, 会直接关闭这个窗口, 也就是停止了 bash 的运行
在这里插入图片描述

由此, 可以更加深刻的知道, shell 就是一个进程, 每次新建一个窗口登陆, 就会新建一个 shell 进程.

三. Linux 下基本指令

先有的指令系统, 再有的图形化界面.
指令操作和图形化操作本质上没有区别, 只是形式上不同.

01. ls 指令

语法: ls[选项][目录或文件]
功能: 对于目录, 该命令列出该目录下的所有子目录与文件.对于文件, 将列出文件名以及其他信息.

ls列出当前目录的所有文件名

在这里插入图片描述


ls -l列出文件的详细信息, l 相当于 list
一般会直接 ll 简写

这是文件的属性列表, 包括文件权限, 大小, 文件名, 创建时间等等.
在这里插入图片描述

由此可以看到, 文件包括文件内容文件属性
我们学习文件操作, 也就是学习对文件内容文件属性的操作

文件内容可以为 0, 但是只要一个文件存在, 他一定会有文件属性.
虽然在 windows 中创建一个空文件, 打开属性设置显示该文件为 0 字节.
在这里插入图片描述

但是存储这些属性信息也是需要空间的, 所以一个空文件也是占据空间的.


ls -a 列出目录下的所有文件, 包括以 . 开头的隐含文件

在这里插入图片描述

在每个目录里, 都一定会有两个隐含文件:
一个是 ., 一个是 ..

.: 代表当前路径
..: 代表上级路径


补充知识点 1 (关于路径)

关于路径
什么叫做路径呢?
在 Linux 下, 路径是由 / 进行间隔的一串字符串. 例如: /usr/bin
两斜杠之间一定是一个目录或者路径, 最后一个名称可能是文件或者目录

为什么要有路径呢? 为了唯一找到一个文件

Linux 整体目录是一个多叉树的样子

在这里插入图片描述

根据树的结构可以得到以下结论:

  • 叶子结点一定是普通文件或者空文件夹
  • 非叶子结点一定是目录
  • 访问一个文件的本质, 就是先通过路径找到文件本身
  • 路径的本质就是多叉树搜索路径
  • 每个结点只有一个父结点, 向上具有唯一性, 反过来向下也就具有唯一性. 根据唯一的路径可以找到目标文件.

绝对路径: 从根目录开始的形成的路径(无论处在哪里, 都能唯一锁定一个文件) /root/usr/bin/
相对路径: 相对于自身所处目录为参考点的路径. 例如上图, 现在所处bit目录, 想访问到passwd的路径是: ../etc/passwd

使用 tree 指令, 就可以看到指定目录的树状图
在这里插入图片描述


ls -d 将目录像文件一样显示, 而不是显示其下的文件.
一般会配合 -l, 这样就可以看到指定目录的属性信息了
在这里插入图片描述

ll -d / 也可以看到显示出了信息, / 是系统的根目录

在这里插入图片描述


02. pwd 指令

语法: pwd
功能: 显示用户当前所在的目录

pwd 全称为 print work direction

会显示自根目录到当前目录的路径

在这里插入图片描述


03. cd 指令

语法: cd 目录名
功能: 改变工作目录. 将当前工作目录改变到指定的目录下

cd .. 返回上级目录

在这里插入图片描述


cd /usr/bin 按绝对路径访问
在这里插入图片描述


cd ../test_02 按相对路径访问
在这里插入图片描述


cd ~ 进入用户家目录

此时的用户是 root , 直接进入 root 下的目录 /root

若是普通用户, 则会进入 /home/xxx
在这里插入图片描述

默认登陆的时候, 默认登陆时所处的路径就是当前家目录.
在 windows 就是桌面, 桌面也是一个文件夹, 叫 /Desktop


cd - 返回最近访问目录

在这里插入图片描述

04. touch 指令

语法: touch[选项]...文件...
功能: touch 命令参数可更改文档或目录的日期时间, 包括存取时间和更改时间, 或者新建一个不存在的文件.

touch file1.txt 在当前目录下创建一个名为 file1.txt 的空文件
在这里插入图片描述

05. mkdir 指令

语法: mkdir[选项]dirname
功能: 在当前目录下创建一个名为 dirname 的目录

mkdir 1 在当前目录下创建一个名为 1 的空目录

在这里插入图片描述


mkdir -p a/b/c 递归建立 a/b/c 目录

在这里插入图片描述

06. rmdir 指令 && rm 指令

rmdir是一个与mkdir相对应的指令. mkdir时建立目录, 而rmdir是删除目录

语法: rmdir[-p][dirName]
适用于对象: 具有当前目录操作权限的所有使用者
功能: 删除空目录

rmdir a 失败
rmdir 1 成功

在这里插入图片描述


rm 命令可以同时删除文件或目录
语法: rm[-f-i-r-v][dirName/dir]
适用对象: 所有使用者
功能: 删除文件或目录

rm file1.txt 删除 file1.txt 文件
在这里插入图片描述


rm -f 不用询问就能删除

在这里插入图片描述


rm -r 递归的删除目录下所有文件
在这里插入图片描述

递归删除相当于深度优先遍历叶子结点, 返回时删除

rm -rf ./* 删除当前目录的所有文件, 不删除隐藏文件

* 是通配符, 指指定路径下的所有文件

在这里插入图片描述


07. man 指令

Linux 的命令有很多参数, 我们不可能全部都记住, 可以通过联机手册获取帮助. 访问 Linux 手册的指令是 man
语法: man[选项]命令
常用选项:

  • -k: 根据关键字搜索联机帮助
  • num: 只在 num 章节找
  • -a: 将所有的章节都显示出来

解释一下,面手册分为 8 章
1 是普通的命令
2 是系统调用,如 open,write 之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文
件)
3 是库函数,如 printf,fread4 是特殊文件,也就是/dev 下的各种设备文件
5 是指文件的格式,比如 passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向 environ 这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由 root 使用,如 ifconfig


如果使用 man 找不到某个章节, 输入指令 yum install -y man-pages, 为什么环境里没有呢, 这里就要引入三种开发环境.

补充知识点 2 (开发三种环境)

开发三种环境

  1. 开发环境
  2. 测试环境
  3. 生产环境: 真实线上环境, 写完测完真正给用户提供服务的地方, 不能随便动.

一般来说, 各厂商提供的云服务器都是生产环境, 是非常干净的操作系统, 不会安装开发强相关的工具, 这里的 man-pages 就是一种.


man man 查看 man 的相关资料
在这里插入图片描述

man 3 printf 查看库函数中 printf 的资料

在这里插入图片描述

08. cp 指令

语法: cp[选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp 指令用于复制文件或目录, 如同时指定两个或两个以上的文件或目录, 且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中. 若同时指定多个文件和目录, 而最后的目的地并非一个已存在的目录, 则会出现错误信息.

cp -f 强制复制文件或目录, 不论目的文件或者目录是否存在
在这里插入图片描述


cp -i 覆盖文件前先询问用户
在这里插入图片描述


cp -r 递归处理目录

在这里插入图片描述


拷贝不会拷贝隐藏文件, 因为

  1. 如果用户知道要拷贝隐藏文件, 肯定会手动拷贝
  2. 如果用户不知道隐藏文件的存在, 肯定不会想拷贝它们

09. mv 指令

mv 命令是 move 的缩写, 可以用来移动文件或者将文件改名(move (rename) files), 是 Linux 系统下常用的命令, 经常用来备份文件或者目录.
语法: mv[选项] 源文件或目录 目标文件或目录
功能:

  1. mv 命令中第二个参数的类型不同(是目标文件还是目标目录), mv 命令将文件重命名或将其移至一个新的目录
  2. 当第二个参数类型是文件时, mv 命令完成文件重命名. 此时, 源文件只能有一个(也可以是原目录名), 它将所给的源文件或者目录重命名为给定的目标文件名.
  3. 当第二个参数是已存在的目录名称时, 源文件或目录参数可以有多个, mv 命令将各参数指定的源文件均移至目标目录中
    常用选项
    -f 如果目标文件已经存在, 不会询问直接覆盖
    -i 如果目标文件已经存在, 就会询问是否覆盖

mv file.txt file1.txtfile.txt 改名为 file1.txt
在这里插入图片描述


mv a aaa 改名为 aa

在这里插入图片描述


mv file1.txt try_grep aa/b 移动多个文件到已存在目录

在这里插入图片描述

10. alise 指令

对指令重命名.
语法: alise [指定命令]='[命令+选项]'


补充知识点 3 (命令的本质)

命令的本质就是可执行文件

例如, 在 /usr/bin 里存放的都是指令, 都是可执行文件

在这里插入图片描述

yum 就是 python 写的

在这里插入图片描述


比如写了一个打印 HelloLinux 的程序
在这里插入图片描述

可以使用 alias 指令将其修改为 hello

在这里插入图片描述

如果不将 alias hello='./test' 放在配置文件 ~/.bashrc 中, 重启终端该指令就会失效.

11. echo 指令

echo 默认将输入的字符串输出到显示器上

在这里插入图片描述


echo [内容] > [文件名] 可以将内容输出重定向入指定文件中, 如果该文件不存在, 会自动创建一个.

在这里插入图片描述


补充知识点 4 (Linux下一切皆文件)

Linux 下一切皆文件

通过 > 输出重定向, 本来应该是在显示器上显示的, 现在显示在文件当中.

向显示器打印就是向显示器文件的内容写入.
键盘写入文件的同时回显在显示器上, 显示器的读方法是空, 键盘的写方法是空.

那么各种各样的设备, 都有读方法和写方法.
大部分硬件也都有读方法, 有些硬件的写方法为空.

Linux 就想用统一思想来解决读写文件和设备.
Linux 设计者设计了Linux 下一切皆文件的设计理念.

虽然提高了 Linux 系统的编码维护成本, 但是更为统一方便.


注: 直接 >[文件名] 可以创建新文件或者清空一个文件

在这里插入图片描述

重定向会覆盖历史内容, 不想覆盖可以使用追加重定向 >>

echo "111111" >> c 追加一行内容到 c

在这里插入图片描述

12. cat 指令

语法: cat[选项][文件]
功能: 查看文件的内容
常用选项:

  • -b 对非空输出行编号
  • -n 对输出的所有行编号
  • -s 不输出多行空行

cat c

在这里插入图片描述


cat -b c
在这里插入图片描述


cat -n c
在这里插入图片描述


cat -s c
在这里插入图片描述

cat 不跟文件名 输入什么, cat 就打印什么
在这里插入图片描述

cat 从键盘读取了什么, 就向显示器文件显示什么.
默认读取的时候是从键盘文件中读入的, 如果添上了文件就是从文件中读入的.
也就是说 cat 文件 相当于 cat < 文件 把本来应该从键盘读取的内容改为从普通文件进行输入

总结:
> 按 w 打开
>> 按 a 打开
< 按 r 打开

13. more 指令

语法: more[选项][文件]
功能: more 命令, 功能类似于 cat
常用选项:

  • -n 对输入的所有行编号
  • q 退出 more

more 只能按回车, 不推荐使用

14. less 指令

  • less 工具也是对文件或其他输入进行分页显示的工具, 应该说是 Linux 正统查看文件内容的工具, 功能极其强大.
  • less 的用法比起 more 更加的有弹性. 在 more 的时候, 我们并没有办法向前翻, 只能向后看
  • 但若使用了 less时, 就可以使用[pageup][pagedown]等按键的功能能来往前往后翻看文件, 更容易用来查看一个文件的内容.
  • 除此之外, 在 less 里头可以拥有更多的搜索功能, 不止可以向下搜, 也可以向上搜.

语法: less[参数] 文件
功能: lessmore 类似, 但是 less 可以随意浏览文件.
选项:

  • -i 忽略搜索时的大小写
  • -N 显示每行的行号
  • /字符串 向下搜索"字符串"的功能
  • ?字符串 向上搜索"字符串"的功能
  • n 重复前一个搜索
  • N 反向重复前一个搜索
  • q quit

15. head 指令

headtail 就像他的名字一样的浅显易懂, 它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的开头至标准输出中, 而 tail 想当然就是看档案的结尾.

语法 head[参数]...[文件]...
功能 head 用来显示档案的开头至标准输出中, 默认 head 命令打印其相应文件的开头 10 行
选项

  • -n<行数> 显示的行数

head file.txt

在这里插入图片描述


head -3 file.txt

在这里插入图片描述

16. tail 指令

tail 命令从指定点开始将文件写道标准输出.
使用 tail 命令的 -f 选项可以方便的查阅正在改变的日志文件, tail -f filename 会把 filename 里最尾部的内容显示在屏幕上, 并且不断刷新, 使你看到最新的文件内容.
语法 tail[必要参数][选择参数][文件]
功能 用于显示指定文件末尾内容, 不指定文件时, 作为输入信息进行处理. 常用查看日志文件.
选项

  • -f 循环读取
  • -n<行数> 显示行数

在这里插入图片描述


补充知识点 5 (命令行管道)

关于命令行管道

如果想显示第 8001 - 8010 行该怎么办呢

第一种想法:
先用 head 把前 8010 行的内容输入重定向至一个 tmep 文件
再用 tail 把最后 10 行显示出来
在这里插入图片描述

但是这样会多出一个中间文件

第二种想法
使用管道, 直接将前一条命令的输出交给第二条指令的输入

在这里插入图片描述

head 默认是输入重定向至显示器文件, 而 | 是一个管道, 将本应放入显示器文件的内容放入管道中, 再使用 tail 指令将管道文件中的内容作为输入.

这是一种流水线作业处理.


17. 时间相关的指令

date 显示
date 指定格式显示时间 date +%Y%m%d
date 用法 date[OPTION]...[+FORMAT]

在显示方面, 使用着可以设定欲显示的格式, 格式设定为一个加号后接数个标记, 其中常用的标记列表如下

%H: 小时
%M: 分钟
%S: 秒
%X: 相当于 %H:%M:%S > %d: 日
%m: 月份
%Y: 年份
%F: 相当于 %Y-%m-%d

在这里插入图片描述

在这里插入图片描述


时间戳

时间->时间戳:date + %s

在这里插入图片描述

时间戳->时间: date -d@0, 得到时间戳为 0 的时间

在这里插入图片描述

Unix 时间戳是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数, 不考虑闰秒.


补充知识点 6 (日志与时间戳)

关于软件开发的日志与时间戳

Unix 时间戳是 1970-1-1 午夜 到现在所经过的秒数, 这表示时间戳是 递增且可以进行范围查找的

时间可以完美运用在日志中, 日志是辅助程序员进行问题排查的.

程序会定时打印软件的情况, 如果程序挂掉, 程序员就可以通过日志了解到程序挂掉的信息, 其中就包括很重要的时间信息.

日志等级分为: DEBUG, Normal, Warning, Fatal.


18. Cal 指令

cal 指令可以用来显示(阳历)日历. 公历是现在国际通用的历法.

命令格式 cal[参数][月份][年份]
功能 用于查看日历等时间信息, 如只有一个参数, 则表示年份, 如有两个参数, 则表示月份和年份.

常用选项

-3 显示系统前一个月, 当前月, 下一个月的月历
-j 显示在当年中的第几天
-y 显示当前年份的日历

在这里插入图片描述

在这里插入图片描述


19. find 指令

  • Linux 下 find 命令在目录结构中搜索文件, 并执行指定的操作.
  • Linux 下 find 命令提供了相当多的查找条件, 功能很强大. 由于 find 具有强大的功能, 所以它的选项也很多.

语法 find pathname -options
功能 用于在文件树中查找文件, 并作出相应的处理(可能访问磁盘)

常用选项 -name 按照文件名查找文件, 支持 *?

在这里插入图片描述

第一次查的时候需要慢慢找,如果短时间内还要查找同一名称的文件,速度会快很多,因为之前的结果被放在了缓存中。

which 可以查指令

在这里插入图片描述

whereis 可以查包含指令在内的文档、库。

在这里插入图片描述

20. grep 指令

语法 grep[选项]搜寻字符串 文件
功能 在文件中搜索字符串, 将找到的行打印出来

grep 'A' c 在 c 文件中查找 ‘A’ 贪心策略查找

在这里插入图片描述


grep -i 'A' c 忽视大小写
在这里插入图片描述


grep -n 顺便输出行号

在这里插入图片描述


grep -v 反响选择,显示没有符合的那一行

在这里插入图片描述


grep 与管道结合可以更好的查找到需要的信息
例如: ps ajx | grep 'sleep' 查找睡眠进程

在这里插入图片描述

21. sort 指令

按顺序显示文件内容

sort c

在这里插入图片描述

sort -r c 逆向排序

在这里插入图片描述

22. uniq指令

相邻重复行进行压缩, 只会显示一行

uniq c

在这里插入图片描述


uniq -u 仅显示出现一次的行

在这里插入图片描述


uniq -d 仅显示出现多次的行

在这里插入图片描述


uniq -c 去重并统计重复行
那么结合 sortuniq指令和管道 就可以把重复行去重

在这里插入图片描述


结合上面的几个查看文件内容的相关指令,如果要查看出现 1 的不重复行的行数,以下指令即可
cat c | grep '1' | sort | unique | wc -l

在这里插入图片描述

23. zip/unzip 指令

语法 zip 压缩文件.zip 目录或文件
功能 将目录或文件压缩成 zip 格式
常用选项

-r 递归处理,将指定目录下的所有文件和子目录一并处理

zip -r test_01.zip test_01/test_01 所有文件夹打包

在这里插入图片描述


unzip test_01.zip -d ./tmp

在这里插入图片描述

24. tar 指令

在 Linux, 更多的是用到 tar 指令, 这个指令既包括打包, 也包括解包

tar 指令相关的文件是 .tar.gz 也可写成 .tgz

tar -czf xxx.tgz xxx 打包压缩指名
tar -xzf xxx.tgz 解包解压默认包名
tar -cvzf xxx.tgz xxx 显示过程
tar -xvzf xxx.tgz 显示过程
tar -xvzf xxx.tgz -C xxx 解包解压显示过程制定目录(目录必须存在)

25. uname -r 指令

语法 uname [选项]
功能 uname 用来获取电脑和操作系统的相关信息
补充说明 uname 可显示linux主机所用的操作系统的版本, 硬件的名称等基本信息.

uname -a 显示体系结构信息

体系结构信息, 狭义上指CPU架构(x86…), 广义上指 软件+硬件的体系结构

uname -a

在这里插入图片描述

26. 其他一些获取系统信息的指令

cat /etc/redhat-release 商业化发行版

在这里插入图片描述

cat /proc/cpuinfo CPU信息

在这里插入图片描述

cat /proc/meminfo 内存信息

在这里插入图片描述

27. 重要的几个热键

[TAB] 按键—具有[命令补全]和[档案补齐]的功能
[Ctrl]-c 按键—让当前的程序[停掉]
[Ctrl]-d 按键—[键盘输入结束(EOF)]或者exit
[history]查看历史输入的命令

28. 扩展命令

◆ 安装和登录命令: login、 shutdown、 halt、 reboot、 install、 mount、 umount、 chsh、 exit、 last;
◆ 文件处理命令: file、 mkdir、 grep、 dd、 find、 mv、 ls、 diff、 cat、 ln;
◆ 系统管理相关命令: df、 top、 free、 quota、 at、 lp、 adduser、 groupadd、 kill、 crontab;
◆ 网络操作命令: ifconfig、 ip、 ping、 netstat、 telnet、 ftp、 route、 rlogin、 rcp、 finger、 mail、 nslookup;
◆ 系统安全相关命令: passwd、 su、 umask、 chgrp、 chmod、 chown、 chattr、 sudo ps、 who;
◆ 其它命令: tar、 unzip、 gunzip、 unarj、 mtools、 man、 unendcode、 uudecode。

本章完.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值