Linux 基础介绍-基础命令

news/2024/4/27 5:04:02/文章来源:https://blog.csdn.net/weixin_45004203/article/details/129259774

文章目录

    • 01 学习目标
    • 02 Linux/Unix 操作系统简介
      • 2.1 Linux 操作系统的目标
      • 2.2 Linux 操作系统的作用
      • 2.3 Unix 家族历史
      • 2.4 Linux 家族历史
      • 2.5 Linux 和Unix 的联系
      • 2.6 Linux 内核介绍
      • 2.7 Linux 发行版本
      • 2.8 Unix/Linux 开发应用领域介绍
    • 03 Linux 目录结构
      • 3.1 Win 和Linux 文件系统区别
      • 3.2 Linux 常见目录介绍
    • 04 Linux命令解析器
      • 4.1 概述
      • 4.2 shell 命令解释器
    • 05 Bash 解析器常用快捷键
    • 06 Linux 系统相关快捷键
    • 07 内建命令和外部命令
    • 08 Linux命令格式
    • 09 帮助文档查看方法
      • 9.1 man
      • 9.2 内建命令(help)
      • 9.3 外部命令(--help)
    • 10 绝对路径和相对路径
    • 11 目录相关的命令
      • 11.1 pwd
      • 11.2 cd
      • 11.3 mkdir
      • 11.4 rmdir
    • 12 文件类型
    • 13 文件相关命令
      • 13.1 ls
      • 13.2 touch
      • 13.3 cp
      • 13.4 rm
      • 13.5 mv
    • 14 文件内容查看命令
      • 14.1 cat
      • 14.2 more
      • 14.3 less
      • 14.4 head
      • 14.5 tail
    • 15 du和df命令
      • 15.1 du
      • 15.2 df
    • 16 查找相关命令
      • 16.1 find
      • 16.2 grep
    • 17 管道
    • 18 压缩包管理
      • 18.1 tar
      • 18.2 gzip
      • 18.3 bzip2
      • 18.4 zip 和 unzip
    • 19 文件权限管理
      • 19.1 文件权限
      • 19.2 访问用户分类
      • 19.3 访问权限说明
      • 19.4 chmod
      • 19.5 chown
      • 19.6 chgrp
    • 20 进程管理
      • 20.1 ps
      • 20.2 top
      • 20.3 kill
      • 20.4 killall
    • 21 软件安装和卸载
      • 21.1 在线安装
      • 21.2 软件包安装
    • 22 重定向
    • 23 其它命令
      • 23.1 tree
      • 23.2 ln 链接
      • 23.3 scp

01 学习目标

  • Linux 下的目录结构和常见目录的作用
  • Linux 下的相对路径和绝对路径
  • Linux 下常用文件和目录操作相关的命令
  • 修改用户权限、用户和用户组相关的命令
  • find 命令相关参数进行文件查找
  • grep 命令根据文件内容进行文件的查找
  • 熟练使用压缩工具完成文件或目录的压缩解压缩
  • 熟练掌握 Ubuntu下的软件安装和卸载

02 Linux/Unix 操作系统简介

2.1 Linux 操作系统的目标

  • 方便性:使计算机系统易于使用
  • 有效性:以更有效的方式使用计算机系统资源
  • 扩展性:方便用户有效开发、测试和引进新功能
  • 开放性:所谓开放性,是指系统能遵循世界标准规范,特别是遵循开放系统互连OSI 国际标准。

2.2 Linux 操作系统的作用

操作系统在计算机系统中承上启下的地位:向下封装硬件,向上提供操作接口

2.3 Unix 家族历史

  • 1965:贝尔实验室(Bell Labs)加入一项由通用电气和麻省理工学院合作的计划,该计划要建立一套多使用者、多任务、多层次的 MULTICS 操作系统。后来因为项目太为复杂失败。
  • 1969:其主要开发者 Thompson(后被称为UNIX之父)和 Ritchie 领导一组开发者,开发了一个新的多任务操作系统—UNICS,后来被改名为 Unix,最初的 Unix 是用 B 语言和汇编语言混合编写而成。
  • 1971:两人在贝尔实验室共同发明了 C 语言,并于 1973 用 C 语言重写了 Unix。
  • 1974:UNIX 第一次出现在贝尔实验室以外。此后 UNIX 被政府机关,研究机构,企业和大学注意到,并逐渐流行开来。
  • 1980:有两个最主要的 Unix 的版本线,一个是 Berkeley 的 BSD UNIX,另一个是 AT&T 的 Unix,两者的竞争最终引发了 Unix 的战争,最终导致 Unix 出现各种各样的变种。
  • 1982:AT&T 基于版本7开发了 UNIX System Ⅲ的第一个商业版本,并不再开源。
  • 1992~2001:由于版权问题,AT&T 公司与 BSD 开发组开始了一场将近 10 年的版权官司。UNIX 由于其昂贵的费用,仅局限于大型机的应用;BSD 因为版权问题,失去了宝贵的发展时期。

2.4 Linux 家族历史

  • Minix(mini-UNIX)最初是由 Andrew Tanenbaum 教授,仿照 4.3BSD 的源代码,白手起家完成了 12000 行 C 语言的编写工作这个系统只是一个教学工具,没有什么实际应用价值。
  • 1990年,Linus Torvalds 决定编写一个自己的 Minix 内核,初名为 Linus’ Minix,意为 Linus 的 Minix 内核,后来改名为 Linux,此内核于 1991 年正式发布,并逐渐引起人们的注意。
  • Linux 操作系统的诞生、发展、和成长过程依赖于五个重要支柱:unix操作系统、minix 操作系统、GNU 计划、POSIX 标准和互联网。
  • GNU 计划:GNU 是 “GNU is Not Unix” 的递归缩写,由 Richard M.Stallman 于1984年创办,旨在开发一个免费、类 unix 的操作系统—GNU系统及其开发工具;Emacs 编辑系统、BASH shell 程序、GCC、GDB 等开发工具都是 GNU 组织的产品。
  • 1992年 Linux 与其他 GNU 软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称 Linux。
  • POSIX 标准:POSIX 标准定义了操作系统应该为应用程序提供的接口标准,POSIX标准用来统一Unix、Linux 各分支编程接口,以提高其通用性和可移植性。

2.5 Linux 和Unix 的联系

  • UNIX 系统是工作站上最常用的操作系统,它是一个多用户、多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务。UNIX 系统具有稳定、高效、安全、方便、功能强大等诸多优点,自 20 世纪 70 年代开始便运行在许多大型和小型计算机上。
  • UNIX 虽然是一个安全、稳定且功能强大的操作系统,但它也一直是一种大型的而且对运行平台要求很高的操作系统,只能在工作站或小型机上才能发挥全部功能,并且价格昂贵,对普通用户来说是可望而不可及的,这为后来 Linux 的崛起提供了机会,Linux 是一个类 UNIX 操作系统。
  • Linux是免费的、不受版权制约、与 UNIX 兼容的操作系统。
  • Linux在 x86 架构上实现了 UNIX 系统的全部特性,具有多用户多任务的能力,同时保持了高效性和稳定性。
  • Linux 具有如下的优秀的特点:
    1. 开放性;
    2. 完全免费;
    3. 多用户;
    4. 多任务;
    5. 良好的用户界面;
    6. 设备独立性;
    7. 提供了丰富的网络功能;
    8. 可靠的系统安全性;
    9. 良好的可移植性。

2.6 Linux 内核介绍

内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层

Linux内核版本又分为稳定版开发版,两种版本是相互关联,相互循环:

  • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序。
  • 开发版:由于要试验各种解决方案,所以变化很快。

内核源码网址:http://www.kernel.org, 所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。

Linux内核代码图:

Linux内核源码获取方式:

ProtocolLocation
HTTPhttps://www.kernel.org/pub/
GIThttps://git.kernel.org/
RSYNCrsync://rsync.kernel.org/pub/

2.7 Linux 发行版本

Linux 发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。

这些操作系统通常由 Linux 内核、以及来自 GNU 计划的大量的函式库,和基于X Window 的图形界面,在 X Window 中用户同样可以通过使用鼠标对窗口、菜单等进行操作来完成相应的工作。

X Window 系统是一个非常出色的图形窗口系统,是类 UNIX 系统的图形用户界面的工业标准。X Window 系统最重要的特征之一就是它的结构与设备无关。

X Window 系统的主要特点有如下几点:

  • X Window 系统是客户机/服务器结构的。X Window 的实现是与操作系统内核分开的,其主要由 X Server 和 X Client 两部分组成。
  • X Window 系统不是 Unix/Linux 操作系统的必须的构成部分,而只是一个可选的应用程序组件。

Best Linux distro for developers in 2018

POSITION201520142018
1Linux MintLinux MintArch Linux
2DebianUbuntuDebian
3UbuntuDebianRaspbian
4openSUSEopenSUSEGentoo
5FedoraFedoraUbuntu
6MageiaMageiaFedora
7ManjaroArchOpenSUSE
8CentOSElementaryCentOS
9ArchCentOSSolus
10ElementaryZorinPuppy Linux
参考网址:Best Linux distro for developers in 2018

目前国内使用最多的就是 Ubuntu 与 Centos,其中 Ubuntu 使用最多,常用于一般的开发中,而 Centos 一般用于与 Orical 等数据库相关的开发中。查看 linux 操作系统版本方法(参考文章):

  • 方法一:使用 Linux 的 etc 目录中的 os-release 文件,运行命令: cat /etc/os-release
  • 方法二(推荐):使使用 lsb_release 命令检查 Linux 操作系统(OS):lsb_release -a
  • 方法三:使用 Linux 的 proc 目录中可用的版本文件,运行命令:cat /proc/version检查linux版本

2.8 Unix/Linux 开发应用领域介绍

  • Unix/Linux 服务器
    是目前Unix/Linux应用最多的一个领域,可以提供Web、FTP、Gopher、SMTP/POP3、Proxy/Cache、DNS等服务器,支持服务器集群,支持虚拟主机、虚拟服务、VPN等。
  • 嵌入式Linux系统
    嵌入式Linux是将流行的Linux操作系统进行剪裁修改,能够在嵌入式计算机系统上运行的一种操作系统。Linux嵌入式系统能够支持多种CPU和硬件平台,性能稳定,剪裁性好,开发和使用容易。其中包括Embedix、uCLinux、muLinux等。
  • 桌面应用
    近年来,Linux系统特别强调在桌面应用方面的改进,并且已达到相当的水平,完全可以作为一种集办公应用、多媒体应用、网络应用等多方面功能于一体的图形界面操作系统,在办公应用方面,Unix/Linux集成了openOffice、SUN公司的StarOffice以及KOffice等工具。
  • 电子政务
    随着Linux的快速发展,Linux已逐渐成为Windows系统重要的竞争力量。尤其是Linux在安全性方面的独特优势,又使得Linux在政府应用领域得到很大的发展。目前一些国家正将其电子政务系统向Linux平台迁移。中国政府也对Linux给予极大的支持。

03 Linux 目录结构

3.1 Win 和Linux 文件系统区别

在 windows 平台下,打开“计算机”,我们看到的是一个个的驱动器盘符:

每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形(即
windows 系统是磁盘分区的),如图所示:

  • windows 系统中不同磁盘之间的文件、文件夹移动比较缓慢,因为文件/文件夹会从一个磁盘移动到另一个磁盘
  • windows 系统中同一个磁盘下,文件/文件夹的移动非常快,因为不涉及到从一个磁盘到另一个磁盘,操作系统只是修改了指针的指向。

在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):

  • RedHat 系统:
  • Ubuntu 系统

在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于 1994 年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了 Linux 界命名混乱的局面。

和 Windows 操作系统类似:

  • 所有 Unix/Linux 的数据都是由文件系统按照树型目录结构管理的。
  • Unix/Linux 操作系统同样要区分文件的类型,判断文件的存取属性和可执行属性。
  • Windows系统中存在磁盘分区Unix/Linux也采用了树状结构的文件系统,它由目录和目录下的文件一起构成。
    但Unix/Linux文件系统不使用驱动器这个概念,而是使用单一的根目录结构,所有的分区都挂载到单一的“/”目录上,其结构示意图如图所示:
    无论何种版本的 Linux 发行版,桌面、应用都只是 Linux 的外衣,文件组织、目录结构才是 Linux 的内心。

Windows 和 linux 下文件分隔符的不同:Windows下是以 ’\’ 为分隔符,而linux下为 ”/“ 为分隔符

3.2 Linux 常见目录介绍

  • /: 根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  • /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat等。
  • /boot: 放置linux系统启动时用到的一些文件,如 Linux 的内核文件,/boot/vmlinuz;系统引导管理器,/boot/grub。
  • /dev: 存放 linux 系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
  • /home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~ 表示当前用户的家目录,~edu 表示用户 edu 的家目录。
  • /lib,/usr/lib,/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
  • /lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下。
  • /mnt:/media: 光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
  • /opt: 给主机额外安装软件所摆放的目录。
  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
  • /root: 系统管理员 root 的家目录。
  • /sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用。
  • /tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
  • /srv: 服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
  • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local 存放软件升级包。/usr/share/doc 系统说明文件存放目录。/usr/share/man 程序说明文件存放目录。
  • /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

上面的目录比较多,但以下几个目录相对于开发而言比较重要:bin目录、boot目录、dev目录、etc目录、home目录、lib目录、lib64目录、sbin目录、sys目录

04 Linux命令解析器

4.1 概述

  • 很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务。
  • Linux 刚出世时没有什么图形界面,所有的操作全靠命令完成,就如同电视里的黑客那样,充满了神秘与晦涩。
  • 近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图形化界面下运行的快。可以说不会命令行,就不算会 Linux。
  • Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。Linux 发行版本最少的命令也有 200 多个,这里只介绍比较重要和使用频率最多的命令。

4.2 shell 命令解释器

命令解析器的作用:交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能

Linux系统中提供了好几种不同的命令解释器,如shell(/bin/sh)、bash(/bin/bash)等,一般默认使用bash作为默认的解释器。

05 Bash 解析器常用快捷键

5.1 Tab 键

  • 补齐命令
  • 补齐路径
  • 显示当前目录下的所有目录

5.2 清屏

clear 作用为清除终端上的显示(类似于 DOS 的 cls 清屏功能),也可使用快捷键:Ctrl + L ( “L” 为字母 )。

5.3 中断进程

ctlr+c 的作用是中断终端的操作。

5.4 遍历输入的历史命令

  • 从当前位置向上遍历:ctrl + p (
  • 从当前位置向下遍历: ctrl + n(

5.5 光标相关操作

  • 光标左移: ctrl + b (
  • 坐标右移: ctrl + f (
  • 移动到头部: ctrl + a(Home)
  • 移动到尾部: ctlr + e(End)

5.6 字符删除

  • 删除光标前边的字符:ctrl + h(Backspace)
  • 删除光标后边的字符:ctrl + d,光标后边的字符即光标覆盖的字符
  • 删除光标前所有内容:ctrl + u
  • 删除光标后所有内容:ctrl + k

06 Linux 系统相关快捷键

6.1 图形打开终端方式:(三种方式)

1)Alt + F2 打开运行输入 gnome-terminal
2) 搜索您的计算机 --> 输入终端 --> 打开
3)右击桌面打开终端

6.2 终端相关快捷键

(终端必须选中)

Ctrl + Shift + N 新建一个终端 Ctrl + Shift + T 在终端里新建一个标签
Ctrl + Shift + W 关闭标签页 Ctrl + Shift + Q 关闭窗口
Ctrl + Shift + C 复制 Ctrl + Shift + V 粘贴
Alt + [1 - 9] 标签之间切换 Ctrl + Shift + = 放大终端字体
Ctrl + - 缩小终端字体 Ctrl + 0 普通大小
F11 全屏 再次按F11退出全屏 Ctrl + D 关闭当前一个终端
Alt + F4 关闭整个终端 Ctrl + Shift + F 查找
Alt + Tab 应用程序间切换 Ctrl + Alt + Backspace 注销
Ctrl + Alt + F7 回到图形界面 Ctrl + Alt + F1到 Ctrl + Alt + F6 可以访问6个虚拟控制台

终端字体推荐使用:DejaVu Sans Mono Book

编辑–> 配置文件首选项–> 常规

07 内建命令和外部命令

7.1 内建命令

shell 内建命令是指 bash(或其它版本)工具中集成的命令。操作系统中的有的命令可能会有多个版本,这种情况下操作系统会默认采用内建命令,比如 bash中的 echo 命令与 /bin/echo 是两个不同的命令,尽管他们行为大体相仿。当在 bash 中键入一个命令时系统会先看他是否是一个内建命令,如果不是才会查看是否是系统命令或第三方工具。所以在 bash 中键入 echo 命令实际上执行 bash 工具集中的 bash 命令也就是内建命令,而不是 /bin/echo 这个系统命令。

7.2 外部命令

外部命令是安装外部软件所带的命令

7.3 内建命令和外部命令对比

内建命令要比系统论命令有比较高的执行效率。外部命令执行时往往需要 fork 出(产生出)一个子进程,而内建命令一般不用。外部命令是在 bash 之外额外安装的,通常放在 /bin,/usr/bin,/sbin,/usr/sbin…等等。可通过 “echo $PATH” 命令查看外部命令的存储路径,比如:ls、vi等。

7.4 命令类型查看方法

使用 type 命令查看,格式:
type [-afptP] 名称 [名称 …] 显示命令类型的信息。

使用方法示例:

yxm@192:~$ type -a cd
cd is a shell builtin
# cd 是 shell 内建
yxm@192:~$ type -a echo
echo is a shell builtin
echo is /bin/echo
# echo 是 shell 内建
# echo 是 /bin/echo
yxm@192:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
# ls 是 `ls --color=auto' 的别名
# ls 是 /bin/ls

如上所图 type -a echo 命令查找到两个类型,说明操作系统中的有的命令可能会有多个版本,这种情况下操作系统会默认采用内建命令

08 Linux命令格式

command [ -options] [parameter1] …
说明:

  • command:命令名,相应功能的英文单词或单词的缩写
  • [-options]:选项,可用来对命令进行控制,也可以省略,[]代表可选
  • parameter1 …:传给命令的参数,可以是零个一个或多个

【注意】linux 命令参数有的加一个 ‘-’,有的加两个 “–”:

  • 加一个 ‘-’ 表示是省略模式,后面加单词简略的字母;
  • 加两个 “–” 表示全写模式,后面加单词。

09 帮助文档查看方法

9.1 man

man 是 Linux 提供的一个手册,包含了绝大部分的命令、函数使用说明。该手册分成很多章节(section),使用 man 时可以指定不同的章节来浏览不同的内容。

格式man [选项] 命令名,示例如下:

deng@itcast:~$ man man

man 中各个 section 意义如下(8种中常用的也就是前三种):
1).Standard commands(标准命令)
2).System calls(系统调用,如open,write)
3).Library functions(库函数,如printf,fopen)
4).Special devices(设备文件的说明,/dev下各种设备)
5).File formats(文件格式,如passwd)
6).Games and toys(游戏和娱乐)
7).Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、网络协定、ASCII 码;environ全局变量)
8).Administrative Commands(管理员命令,如ifconfig)

man设置了如下的功能键:

功能键功能
空格键显示手册页的下一屏
Enter键一次滚动手册页的一行
b回滚一屏
f前滚一屏
q退出man命令
h列出所有功能键
/word搜索word字符串

用法示例:

man -k passwd 搜索关键词 passwd 
man -a passwd 浏览 passwd 所有相关的页 
man -f passwd 等价于 whatis 
man 1 printf 浏览 printf1 页介绍 
man 2 read 浏览 read2 页介绍 
man 3 printf 浏览 printf3 页介绍 
man 5 passwd 浏览 passwd5 页介绍 
man 8 chpasswd 浏览 chpasswd 第 8 页介绍

示例:
查看 ls 的用法:man 1 ls ( 1:为数字“1”,代表第 1 个 section,标准命令 ) :

实际上,我们不用指定第几个章节也用查看,如,man ls。但是有一种情况,假如,命令的名字和函数的名字刚好重名(如:printf),它既是命令,也可以是库函数,如果我们不指定章节号,man printf,它只查看命令的用法,不会查询函数的用法,因为 man 是按照手册的章节号的顺序进行搜索的。
所以,使用 man 手册时,最好指定章节号:

9.2 内建命令(help)

格式: help + 内建命令,应用示例:

9.3 外部命令(–help)

一般是 Linux 命令自带的帮助信息,并不是所有命令都自带这个选项。
如我们想查看命令 ls 的用法:ls --help

10 绝对路径和相对路径

前置信息: [[01_Liux 基础介绍-基础命令1#03 Linux 目录结构|03 Linux 目录结构]]

Unix/Linux 路径由到达定位文件的目录组成。在 Unix/Linux 系统中组成路径的目录分割符为斜杠 “/”,而DOS则用反斜杠 “\” 来分割各个目录(Windows下是以 “\” 为分隔符,而linux下为 ”/“ 为分隔符。)。Linux 所有的目录和文件名大小写敏感。

路径分为绝对路径相对路径
1)绝对路径

  • 绝对路径是从目录树的树根 “/” 目录开始往下直至到达文件所经过的所有节点目录。【注意】绝对路径都是从 “/” 开始的,所以第一个字符一定是“/”。
  • 下级目录接在上级目录后面用 “/” 隔开。
/home/test
/var/ftp/pub

2)相对路径

  • 相对路径是指目标目录相对于当前目录的位置。
  • 如果不在当前目录下,则需要使用两个特殊目录 “.” 和 “…” 了。目录 “.” 指向当前目录,而目录 “…” 指向上一级目录。

11 目录相关的命令

11.1 pwd

格式:pwd [-LP] 打印当前工作目录的名字。
使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入 pwd 即可,后面不带参数。

deng@itcast:~$ pwd
/home/deng

11.2 cd

在使用 Unix/Linux 的时候,经常需要更换工作目录。cd 命令可以帮助用户切换工作目录。Linux 所有的目录和文件名大小写敏感。cd 后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。

命令含义
cd切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。
cd ~切换到当前用户的主目录(/home/用户目录)
cd .切换到当前目录
cd …切换到上级目录
cd -可进入上一个进入的目录

【注意】

  • 如果路径是从根路径开始的,则路径的前面需要加上 “ / ”,如 “ /mnt ”
  • 通常进入某个目录里的文件夹,前面不用加 “ / ”

11.3 mkdir

用法:mkdir [选项]… 目录…
通过 mkdir 命令可以创建一个新的目录(不能新建普通文件)。参数-p可递归创建目录。

  • 参数 -p:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录,即创建递归目录。

【注意】

  • 新建目录的名称不能与当前目录中已有的目录或文件同名
  • 目录创建者必须对当前目录具有写权限。

使用示例:

mkdir test 在当前目录下创建test目录 
mkdir /tmp/test 在根目录下tmp目录里创建test目录 
mkdir file{1..100} 在当前目录下创建file1到file100的目录,这里会创建100个目录 xm@192:~/test$ mkdir file{1..10}
yxm@192:~/test$ ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9 ......
mkdir "file{1..100}" 在当前目录下创建file{1..100}目录,这里只创建一个目录yxm@192:~/test$ mkdir "file{1..100}"
yxm@192:~/test$ ls
file{1..100}
mkdir -p a/b/c 在当前目录下创建a/b/c目录树 yxm@192:~/test$ mkdir -p a/b/c
yxm@192:~/test$ tree
.
└── a└── b└── c
mkdir "a b" 创建以"a b"命名的一个目录,注意:"a b"是一个文件名yxm@192:~$ mkdir "a b"
yxm@192:~$ ls
a b  myshare  study
mkdir a\ b 创建以"a b"命名的一个目录,注意:"a b"是一个文件名
yxm@192:~$ mkdir a\ b
yxm@192:~$ ls
a b  myshare  study
mkdir a b 创建目录a和目录byxm@192:~$ mkdir a b
yxm@192:~$ ls
a  b  myshare  study

【注意】mkdir创建文件夹时,如果文件名有特殊字符,可以使用转义字符,也可以在创建时给文件名加双引号或者单引号。

11.4 rmdir

用法:rmdir [选项]… 目录… 删除指定的空目录。可使用 rmdir 命令删除一个目录。【注意】必须离开目录,并且目录必须为空目录,不然提示删除失败。
使用示例:

rmdir test 删除当前目录的 test 目录,test 必须是空目录 
rmdir /tmp/test 删除/tmp下的test目录 
rmdir file{1..100} 删除 file1 到 file100 的目录 
rmdir "file{1..100}" 删除 file{1..100} 目录 
rmdir "a b" 删除 a b 这个目录 
rmdir a\\ b 删除 "a b" 目录 
rmdir a b c 删除目录 a 目录 b 目录 c

12 文件类型

前置信息: [[01_Liux 基础介绍-基础命令1#03 Linux 目录结构|03 Linux 目录结构]]

Unix/Linux 对数据文件(.mp3、.bmp),程序文件(.c、.h、.o),设备文件(LCD、触摸屏、鼠标),网络文件(socket)等的管理都抽象为文件,使用统一的方式方法管理。 Linux下一切皆文件。

在 Unix/Linux 操作系统中也必须区分文件类型,通过文件类型可以判断文件属于可执行文件、文本文件还是数据文件。在 Unix/Linux 系统中文件可以没有扩展名。

通常,Unix/Linux 系统中常用的文件类型有7种:普通文件、目录文件、设备文件、管道文件、链接文件和套接字。

1)普通文件
Linux 中最多的一种文件类型,普通文件一般包括纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);可执行的二进制程序文件;各种压缩文件。第一个属性为 [-]。

在 Unix/Linux 中可以通过 file 命令来查看文件的类型。如果 file 文件后面携带文件名,则查看指定文件的类型,如果携带通配符 “*”,则可以查看当前目录下的所有文件的类型

# 普通文件
deng@itcast:~/test$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2372 321 22:48 /etc/passwd

2)目录文件
Unix/Linux 系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构。第一个属性为 [d]。

目录文件只允许系统管理员对其进行修改,用户进程可以读取目录文件,但不能对它们进行修改。每个目录文件至少包括两个条目,“…”表示上一级目录,“.”表示该目录本身。

# 目录文件
deng@itcast:~/test$ ls -ld /etc
drwxr-xr-x 134 root root 12288 528 11:28 /etc

3)设备文件
Unix/Linux 系统把每个设备都映射成一个文件,这就是设备文件。它是用于向 I/O 设备提供连接的一种文件,分为字符设备和块设备文件。块设备文件第一个属性为 [b];字符设备第一个属性为 [c]。

字符设备的存取以一个字符为单位,块设备的存取以字符块为单位。每一种 I/O 设备对应一个设备文件,存放在 /dev 目录中,如行式打印机对应/dev/lp,第一个软盘驱动器对应/dev/fd0。

deng@itcast:~/share$ echo "hello world" > /dev/pts/22 
hello world
# 字符设备
deng@itcast:~/test$ ls -l /dev/input/mouse0
crw-rw---- 1 root input 13, 32 526 17:01 /dev/input/mouse0
# 块设备
deng@itcast:~/test$ ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 526 17:01 /dev/sda1

4)管道文件
管道文件也是 Unix/Linux 中较特殊的文件类型,这类文件多用于进程间的通信。第一个属性为 [p]。

# 管道文件
deng@itcast:~/test$ mkfifo fifo
deng@itcast:~/test$ ls -l fifo
prw-rw-r-- 1 deng deng 0 528 11:59 fifo

5)链接文件
似于 windows 下的快捷方式,链接又可以分为软链接(符号链接)和硬链接。第一个属性为 [l]。

# 符号链接
deng@itcast:~/test$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 1117 2017 /bin/sh -> dash
deng@itcast:~/test$

6)套接字文件
这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run 目录中看到这种文件类型。

deng@itcast:~/tmp/test$ ls -l /run/systemd/notify
srwxrwxrwx 1 root root 0 88 11:00 /run/systemd/notify

13 文件相关命令

13.1 ls

ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于 DOS下的 dir 命令。

Linux 文件或者目录名称最长可以有 256 个字符,“.” 代表当前目录,“…” 代表上一级目录,以 “.” 开头的文件为隐藏文件,需要用 -a 参数才能显示。

用法:ls [选项]… [文件]…,常用参数:

参数含义
-a显示指定目录下所有子目录与文件,包括隐藏文件
-l以列表方式显示文件的详细信息
-h配合 -l 以人性化的方式显示文件大小

使用示例:

ls -al 显示所有文件包括隐藏文件列表 
ls -lt 显示按日期时间排序后的文件列表 等价于 ls -l -t 
ls -lh 显示计算大小为KB为单位的文件列表 
ls -dl 显示文件夹详细列表


图中列出的信息含义如下图所示:

通配符
与 DOS 下的文件操作类似,在 Unix/Linux 系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符。

通配符含义
*文件代表文件名中所有字符
ls te* :查找以 te 开头的文件
ls *html : 查找结尾为 html 的文件
代表文件名中任意一个字符
ls ?.c : 只找第一个字符任意,后缀为.c的文件
ls a.? :只找只有3个字符,前2字符为a.,最后一个字符任意的文件
[][”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
[abc] :匹配a、b、c中的任意一个
[a-f]:匹配从a到f范围内的的任意一个字符
ls [a-f]* : 找到从a到f范围内的的任意一个字符开头的文件
ls a-f:查找文件名为 a-f 的文件,当 “-”处于方括号之外失去通配符的作用
\如果要使通配符作为普通字符使用,可以在其前面加上转义字符。“?”和“*”处于方括号内时不用使用转义字符就失去通配符的作用。
ls \*a : 查找文件名为 \*a 的文件

13.2 touch

用法:touch [选项]… 文件…
1)如果文件不存在, 创建新文件(只能是普通文件,不能是文件夹)
2)如果文件存在, 更新文件时间

示例:

touch file 创建file空文件,如果file存在则更新file的存取和修改时间
touch a.txt b.txt  同时创建多个文件yxm@192:~/test$ touch a.txt b.txt
yxm@192:~/test$ ls
a.txt  b.txt
touch file{2,3,4} 同时创建file2,file3,file4三个空文件yxm@192:~/test$ touch file{2,3,4}
yxm@192:~/test$ ls
file2  file3  file4
touch "file{2,3,4}" 创建file{2,3,4}一个空文件yxm@192:~/test$ touch "file{2,3,4}"
yxm@192:~/test$ ls
file{2,3,4}

【注意】touch 创建文件时,如果文件名有特殊字符,可以使用转义字符,也可以在创建时给文件名加双引号或者单引号。

13.3 cp

cp 命令的功能是将给出的文件或目录复制到另一个文件或目录中。常用选项说明:

选项含义
-a该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f删除已经存在的目标文件而不提示
-i交互式复制,在覆盖目标文件之前将给出提示要求用户确认
-r若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-v显示拷贝进度

示例:

cp file dirs/ 把 file 文件复制到dirs目录下
cp file1 file2 dirs/ 把 file1 file2 文件拷贝到dirs目录下 
cp -i file1 file2 把文件 file1 拷贝到 file2 中,并且提示
cp -t dirs file1 把文件 file1 拷贝到 dirs 目录下 
cp -r dir1/ dir2/ 把 dir1 目录复制到 dir2 目录下 
cp -R dir1 dir2 把 dir1 目录拷贝到 dir2 目录下 
cp -a file dirs/ 把 file 文件复制到 dirs 目录下,保留文件的原来属性 
cp -rf dir1/ dir2/ 强制复制文件夹,不提示 
cp -rvf dir1/ dir2/ 把dir1目录复制到dir2目录下,并且显示复制过程

13.4 rm

rm 命令用于删除文件或目录。常用参数及含义如下表所示:

参数含义
-i以进行交互式方式执行
-f强制删除,忽略不存在的文件,无需提示
-r递归地删除目录下的内容,删除文件夹时必须加此参数
【注意】使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在 rm 后使用 -i 参数以逐个确认要删除的文件。

示例:

rm a 删除文件 a
rm a b c 删除文件 a b c
rm -i a 删除文件 a,在删除之前用户需确认是否删除该文件 
rm -f a 删除文件 a,强制删除该文件,不需要用户确认是否删除 
rm -v a 删除文件 a,删除之后会显式结果 
rm -r dirs 递归删除目录 dirs 
rm -rf dirs 强制递归删除目录 dirs
rm file* 删除所有file打头的文件 
rm -i file*  删除所有 file 打头的文件,提示是否确定删除 
rm -f file*  删除所有 file 打头的文件,不提示,强行删除 
rm -f [ab].txt 等价于 rm -f a.txt b.txt 
rm -f [^ab].txt 删除除 a.txt b.txt 以外的所有 ?.txt 
rm -f ?.txt ? 代表一个字符
rm -f ???.txt

13.5 mv

mv 命令来移动文件或目录,也可以给文件或目录重命名。常用选项说明:

选项含义
-f禁止交互式操作,如有覆盖也不会给出提示
-i确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件
-v显示移动进度

示例:

mv file file2 把 file 文件重命名为 file2 
mv file dirs/ 把 file 文件移动到 dirs 目录下 
mv file1 file2 dirs/ 把 file1、file2 文件剪切到 dirs 目录下
mv dir1 dir2 dir3/ 把 dir1、dir2 目录剪切到 dir3 目录下 
mv -i file1 dir1/ 把 file1 文件剪切到 dir1 目录下,如果存在覆盖就提示用户 
mv -f file1 dir1/ 把 file1 文件剪切到 dir1 目录下,如果存在覆盖也不提示用户 
mv -u dir1/* dir2/ 把 dir1 目录下所有文件移动到 dir2 目录下,并且根据文件时间来决定要不要移动

14 文件内容查看命令

14.1 cat

cat 将文件内容一次性输出到终端。
缺点:终端显示的内容有限,如果文件太长无法全部显示。

示例:

cat /etc/passwd 查看/etc/passwd内容
cat -n /etc/passwd 查看/etc/passwd内容,对输出的所有行编号
cat -b /etc/passwd 查看/etc/passwd内容并且给非空行编号
cat -A /etc/passwd 等价于 -vET

14.2 more

more 命令将文件内容分页显示到终端,但是只能一直向下浏览,不能回退。相关参数说明:

命令作用
回车显示下一行
空格显示下一页
q(ctrl + c)退出
h获取帮助

示例:

14.3 less

less 命令将文件内容分页显示到终端,可以自由上下浏览。相关参数说明:

命令作用
回车(ctrl + n)显示下一行
ctrl + p显示上一行
空格(PageDown)显示下一页
PageUp显示上一页
q退出
h获取帮助

14.4 head

head 命令从文件头部开始查看前 n 行的内容;如果没有指定行数,默认显示前10行内容。
命令格式:head –n [行数] 文件名

示例:

head /etc/passwd 查看 /etc/passwd 前 10 行内容 
head -c 30 /etc/passwd 查看 /etc/passwd 前 30 个字符 
head -30 /etc/passwd 查看 /etc/passwd 前 30head -n 30 /etc/passwd 查看 /etc/passwd 前 30 行内容 
head -q /etc/passwd 查看 /etc/passwd 的内容,但是不打印头信息 
head -v /etc/passwd 查看 /etc/passwd 的内容,但是打印头信息

14.5 tail

tail 命令从文件尾部向上查看最后 n 行的内容;如果没有指定行数,默认显示最后 10 行内容。
命令格式:tail –n [行数] 文件名

示例:

tail /etc/passwd 查看 /etc/passwd 后 10 行内容 
tail -n 30 /etc/passwd 查看 /etc/passwd 后 30 行内容 
tail -c 30 /etc/passwd 查看 /etc/passwd 后 30 个字符 
tail -f /etc/passwd 实时查看 /etc/passwd 文件内容 
tail -q /etc/passwd 查看 /etc/passwd 的内容,但是不打印头信息 
tail -v /etc/passwd 查看 /etc/passwd 的内容,但是打印头信息

15 du和df命令

15.1 du

du 命令用于查看某个目录大小。
du 命令的使用格式:du [选项] 目录或文件名

选项含义
-a递归显示指定目录中各文件和子目录中文件占用的数据块
-s显示指定文件或目录占用的数据块
-b以字节为单位显示磁盘占用情况
-h以K,M,G为单位,提高信息的可读性

示例:

15.2 df

df 命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。

选项含义
-a显示所有文件系统的磁盘使用情况
-m以1024字节为单位显示
-h以K,M,G为单位,提高信息的可读性

示例:

16 查找相关命令

16.1 find

find 命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。

1、按文件名查询:使用参数 -name
命令:find + 路径 + -name +“文件名”

find /home -name “a.txt”

2、按文件大小查询:使用参数 -size
命令:find + 路径 + -size + 范围

  • 范围:大于:+表示,如:+100k;小于:-表示,如:-100k;等于:不需要添加符号,如:100k
  • 大小: M 必须大写(10M);k 必须小写(20k)
例子: 查询目录为家目录
find ~/ -size 100k  等于 100k 的文件
find ~/ -size +100k 大于100k的文件
find ~/ -size +50k -size -100k  大于50k, 小于100k的文件

3、按文件类型查询:使用参数 -typ
命令:find + 路径 + -type + 类型

  • 类型:普通文件类型用 f 表示而不是 -;d -> 目录;l -> 符号链接;b -> 块设备文件;c -> 字符设备文件;s -> socket文件,网络套接字;p -> 管道
 find /home -type f 查找指定目录下的普通文件

示例:

find /etc -name grub.conf   查找 /etc 目录下的 grub.conf 文件
find / -name "*.conf"       查找 / 下所有 .conf 文件
find  / -iname grub.conf    查找 / 目录下的 grub.conf 文件,忽略大小写
find / -maxdepth 2 -name grub.conf     可以使用 -maxdepath 参数来控制查找的层次,就是说只查当前目录和子目录,最多查 2 级目录
find / -mindepth 2 -name grub.conf     最少查二级目录
find /etc -type d           查找 /etc/ 下所有的目录
find /etc -type f           查找 /etc/ 下的所有普通文件
find /etc -type l -name *.conf      查找 /etc/ 下软链接文件是 .conf 结尾的文件
find /etc -type s           查找 /etc/ 下所有socket文件
find /etc -type c           查找 /etc/ 下的所有字符设备文件
find /etc -type p           查找 /etc/ 下所有管道文件
find /etc -user root        查找 /etc/ 所属用户是root的文件
find /etc -group root       查找 /etc/ 所属用户组是root的文件
find /etc -uid 500          查找 /etc/ 下 uid 是 500 的文件,和 -user 类似
find /etc -gid 500          查找 /etc/ 下 gid 是 500 的文件,和 -group 类似
find /etc -nouser           查找没有所属用户的文件
find /etc -nogroup          查找没有所属用户组的文件
find /etc -perm 777 -type d    查找 /etc/ 下权限为 777 的目录
find . -perm  111           查找权限是111的文件
find . -size +10M           查找当前目录下大于 10M 的文件,单位可以有 K,M,G,b 等
find / -size -2M            查找根目录下少于 2M 的文件
find / -mtime 1             查找根目录下 1 天以前修改的所有文件
find / -mtime +2            查找根目录下 2 天以前修改的所有文件
find / -mtime -3            查找根目录下最近 3 天内修改的所有文件
find / -atime 1             查找根目录下 1 天以前访问或读过的所有文件
find / -atime -1            查找根目录下最近 1 天内读过或访问的文件
find / -ctime -3            查找根目录下最近 3 天内状态发生改变的文件
find / -cmin -3             查找根目录下最近 3 分钟内状态发生改变的文件
find / -empty               查找根目录下所有空白文件或者空目录
find / -false               查找根目录下总是错误的文件

高级用法

find / -false -exec ls -l {} \;   查找根目录下总是错误的文件并且用ls -l查看
find . -name "*.conf" -exec rm -rf {} \;
find . -name "*.conf" | xargs rm -rf 删除当前目录下所有以 .conf 结尾的文件deng@itcast:~$ find cmd/ -name "txt" -ok  rm -rf {} \;  删除之前做确认
< rm ... cmd/txt > ? y

16.2 grep

Linux 系统中 grep 命令是一种强大的文本搜索工具,grep 允许对文本文件进行模式查找。如果找到匹配模式, grep 打印包含模式的所有行。

grep 一般格式为:grep [-选项] ‘搜索内容串’ 文件名

在 grep 命令中输入字符串参数时,最好引号或双引号括起来,例如:grep ‘a ’1.txt;当然如果搜索内容串中没有特殊字符可以不用引号括起来。

常用选项说明:

选项含义
-v显示不包含匹配文本的所有行(相当于求反)
-n显示匹配行及行号
-i忽略大小写
-r搜索目录

示例:

grep -r "hello,world" /home/itcast  查找 /home/itcast 下包含“hello,world“字符串的文件
grep -a hello /bin/ls 将二进制文件以文本文件的方式搜索 hello 
grep -i hello /etc/passwd 在 /etc/passwd 文件里找 hello 并且忽略大小写查找 
grep -n hello /etc/passwd 搜索 hello 结果并显示在文件里出现的行号 
grep -w hello /etc/passwd 搜索完全匹配 hello 单词的行 
grep -v hello /etc/passwd 显示出在 /etc/passwd 文件里没有 hello 的行
grep -r hello /etc/ 在 /etc/ 目录里所有文件里找 hello 并显示结果
grep -i hello /etc/passwd --color=auto 在/etc/passwd 文件中找 hello 并且忽略大小写,然后高亮显示匹配的关键字

17 管道

管道(|):一个命令的输出可以通过管道做为另一个命令的输入。

管道我们可以理解为现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读)。

18 压缩包管理

18.1 tar

计算机中的数据经常需要备份,tar 是 Unix/Linux 中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。

tar 使用格式: tar [选项] 打包文件名 文件,常用参数:

参数含义
-c生成档案文件,创建打包文件
-v列出归档解档的详细过程,显示进度
-f指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
-t列出档案中包含的文件
-x解开档案文件
【注意】
  • 除了 f 需要放在参数的最后,其它参数的顺序任意。
  • tar 命令很特殊,其选项前面可以使用 “-”,也可以不使用。

常用示例(工作中几乎就是使用以下三种):

  • tar -cvf 创建归档文件
  • tar -xvf 解除归档文件(还原)
  • tar -tvf 查看归档文件内容

18.2 gzip

tar 与 gzip 命令结合使用实现文件打包、压缩:tar 只负责打包文件,但不压缩,用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.gz。

gzip 使用格式如下:gzip [选项] 被压缩文件,常用选项:

选项含义
-d解压
-r压缩所有子目录
【注意】一次性压缩多个文件:gzip后面不能跟目录



tar 和 gzip 两步可以实现打包压缩功能,但是这两步骤可以合并到一步,如下:
tar 这个命令并没有压缩的功能,它只是一个打包的命令,但是在 tar 命令中增加一个选项(-z)可以调用 gzip 实现了一个压缩的功能,实行一个先打包后压缩的过程。

压缩用法: tar cvzf 压缩包包名 文件1 文件2 …

参数含义
-z指定压缩包的格式为:file.tar.gz
示例:tar zcvf test.tar.gz 1.c 2.c 3.c 4.c 把 1.c 2.c 3.c 4.c 压缩成 test.tar.gz

解压用法: tar zxvf 压缩包包名

参数含义
-z指定压缩包的格式为:file.tar.gz

解压到指定目录:-C (大写字母“C”)
例子:tar -xvf new.tar.gz -C ./test/ 将 new.tar.gz 解压到当前目录下的 test 目录下:

【注意1】上图中tar -xvf 的写法是正确,是万能解压的方式,详细可以看后面。
【注意2】如上所述,tar 压缩打包格式为:tar cvzf 压缩包包名 文件1 文件2 …

  • 压缩打包时,如果文件前面携带路径,解压缩时也将解压缩到前面携带的路径中;
  • 压缩打包时,如果文件前面没有携带路径,解压缩时将解压缩到当前文件夹。
# 示例1,推荐方法
yxm@192:~/myshare/tar_test$ ls
1.c  2.c  
yxm@192:~/myshare/tar_test$ tar cvzf test.tar.gz ./*  # 携带 ./ 路径
./1.c
./2.c
yxm@192:~/myshare/tar_test$ ls
1.c  2.c  test.tar.gz
yxm@192:~/myshare/tar_test$ mkdir untar_test
yxm@192:~/myshare/tar_test$ cd untar_test/
yxm@192:~/myshare/tar_test/untar_test$ mv ../test.tar.gz ./
yxm@192:~/myshare/tar_test/untar_test$ tar zxvf test.tar.gz
./1.c                                             # 解压缩到 ./ 路径
./2.c                                             # 解压缩到 ./ 路径
yxm@192:~/myshare/tar_test/untar_test$ ls
1.c  2.c  3.c  test.tar.gz
# 示例2
yxm@192:~/myshare/tar_test$ ls
1.c  2.c
yxm@192:~/myshare/tar_test$ cd ..
yxm@192:~/myshare$ tar cvzf test.tar.gz tar_test/*  # 携带路径
tar_test/
tar_test/2.c
tar_test/1.c
yxm@192:~/myshare$ ls
tar_test  test.tar.gz
yxm@192:~/myshare$ mkdir tar_test/untar_test
yxm@192:~/myshare$ mv test.tar.gz ./tar_test/untar_test/
yxm@192:~/myshare$ cd ./tar_test/untar_test/
yxm@192:~/myshare/tar_test/untar_test$ tar zxvf test.tar.gz
tar_test/
tar_test/2.c            # 创建tar_test,并解压缩到 tar_test 路径
tar_test/1.c            # 创建tar_test,并解压缩到 tar_test 路径
yxm@192:~/myshare/tar_test/untar_test$ ls
tar_test  test.tar.gz
yxm@192:~/myshare/tar_test/untar_test$ cd tar_test/
yxm@192:~/myshare/tar_test/untar_test/tar_test$ ls
1.c  2.c

18.3 bzip2

  • tar 与 bzip2 命令结合使用实现文件打包、压缩(用法和 gzip 一样)。
  • tar 只负责打包文件,但不压缩,用 bzip2 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.bz2。
  • 在 tar 命令中增加一个选项(-j)可以调用 bzip2 实现了一个压缩的功能,实行一个先打包后压缩的过程。
  • 压缩用法:tar jcvf (tar -cjvf) 压缩包包名 文件…
    示例:tar jcvf bk.tar.bz2 *.c
  • 解压用法:tar jxvf (tar -xjvf)压缩包包名
    示例:tar jxvf bk.tar.bz2
  • tar -xvf 万能解压,可以解压gzip,也可以解压 bzip2
# 生成一个bz2压缩包
deng@itcast:~/share$ tar -cjvf test.tar.bz2 test
# 解压bz2压缩包
deng@itcast:~/share$ tar -xjvf share.tar.bz2

18.4 zip 和 unzip

通过 zip 压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。

  • 压缩文件:zip -r 目标文件(没有扩展名) 源文件
  • 解压文件:unzip -d 解压后目录文件 压缩文件

19 文件权限管理

19.1 文件权限

文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

19.2 访问用户分类

通过设定权限可以从以下三种访问方式限制访问权限:

1)只允许用户自己访问(所有者)
所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。

2)允许一个预先指定的用户组中的用户访问(用户组)
用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。

3)允许系统中的任何用户访问(其他用户)
用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类

这有点类似于 QQ 空间的访问权限:

  • 这个 QQ 空间是属于我的,我相当于管理者(也就是“所有者”),我想怎么访问就怎么访问。
  • 同时,我可以设置允许 QQ 好友访问,而这些 QQ 好友则类似于“用户组”。
  • 当然,我可以允许所有人访问,这里的所有人则类似于(不完全等价)“其他用户”。

19.3 访问权限说明

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

  • 读权限(r):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
  • 写权限(w):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • 可执行权限(x):对文件而言,具有执行文件的权限;对目录来说该用户具有进入目录的权限,即只有目录有可执行权限才能够进入该目录。

【注意】通常,Unix/Linux 系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

19.4 chmod

chmod 命令用于修改文件权限。修改文件权限有两种使用格式:字母法与数字法

字母法: chmod u/g/o/a +/-/= rwx 文件

[ u/g/o/a ]含义
uuser 表示该文件的所有者
ggroup 表示与该文件的所有者属于同一组( group )者,即用户组
oother 表示其他以外的人
aall 表示这三者皆是
[ ±= ]含义
+增加权限
-撤销权限
=设定权限
rwx含义
rread 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录内部的内容。
wwrite 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
xexcute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

示例:
chmod o+w file 给文件 file 的其它用户增加写权限:

chmod u-r file 给文件 file 的拥有者减去读的权限:

chmod g=x file 设置文件 file 的所属组权限为可执行,同时去除读、写权限:

数字法:“rwx” 这些权限也可以用数字来代替

r读取权限,数字代号为 “4”
w写入权限,数字代号为 “2”
x执行权限,数字代号为 “1”
-不具任何权限,数字t代号为 “0”

示例:
如执行:chmod u=rwx,g=rx,o=r filename
就等同于:chmod u=7,g=5,o=4 filename(不可以执行)
就等同于:chmod 751 filename

  • 文件所有者:读、写、执行权限
  • 同组用户:读、执行的权限
  • 其它用户:执行的权限

chmod 777 file:所有用户拥有读、写、执行权限

【注意】如果想递归所有目录加上相同权限,需要加上参数“ -R ”。例如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限。

【注意】chmod 0777与 chmod 777 效果相同,0 表示八进制,有的平台不加 0 会报错,因为会当做十进制,所以最好在使用的时候加上0。

19.5 chown

Linux 是多用户操作系统,用户与用户的权限不同,所以不同用户可以操作不同的文件(目录),所以有时候想要操作某个文件,除了要修改文件的读写可执行权限外,还需要获得文件的所有者权限。

chown 命令用于修改文件所有者。
格式:chown 用户名 文件或目录名
参数:-R 递归目录下所有文件

示例:

# 将文件所属者修改为root用户
deng@itcast:~/share/test: sudo chown root txt
deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 root deng 0 1010 11:12 txt
# 将文件所属者改为deng 所属组改为root
deng@itcast:~/share/test sudo chown deng:root txt 
deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 deng root 0 1010 11:12 txt
# 单独只修改文件所属组
> deng@itcast:~/share/test sudo chown :root txt 
> deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 deng root 0 1010 11:12 txt

19.6 chgrp

chgrp 命令用于修改文件所属组。(本小节了解即可)
格式:chgrp 用户组名 文件或目录名

示例:

# 单独修改文件所属组
deng@itcast:~/share/test sudo chgrp deng txt 
deng@itcast:~/share/test ls -l txt -rw-rw-r-- 1 deng deng 0 1010 11:12 txt

20 进程管理

20.1 ps

ps 命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:

选项含义
-a显示终端上的所有进程,包括其他用户的进程
-u显示进程的详细状态
-x显示没有控制终端的进程
-w显示加宽,以便显示更多的信息
-r只显示正在运行的进程
列出与作业控制相关的信息

常用选项组合:

  • ps aux:显示当前用户下所有进程
  • ps -ef:效果与ps aux差不多, ps aux最初用到 Unix Style 中,而 ps -ef 被用在 System V Style 中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
  • ps ajx :以比较完整的格式显示所有的进程
  • ps -a

20.2 top

top 命令用来动态显示运行中的进程。top 命令能够在指定的时间间隔更新显示信息。
可以在使用 top 命令时加上 -d 来指定显示信息更新的时间间隔。

在top命令执行后,可以按下以下按键得到对显示的结果进行排序:

按键含义
M根据内存使用量来排序
P根据CPU占有率来排序
T根据进程运行时间的长短来排序
U可以根据后面输入的用户名来筛选进程
K可以根据后面输入的PID来杀死进程。
q退出
h获得帮助

20.3 kill

命令功能:发送指定的信号到相应进程,常用于用于删除执行中的程序或工作。
使用格式:kill [-signal] pid
其中,[[四、Linux下进程间通讯之信号机制|信号值(signal)]]从 0 到 15,其中 9 为绝对终止,可以处理一般信号无法终止的进程。

kill 9133 :9133 为应用程序所对应的进程号

查看信号编号: kill -l(字母)

有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束([[四、Linux下进程间通讯之信号机制|9号信号为 SIGKILL]])。
杀死进程: kill -SIGKILL/(-9) 89899【进程标识号】

【注意】

  • 前台程序:ctlr+c可以中断中断前台进程,但是无法中断后台进程;
  • 后台程序:可以通过kill命令杀死后台进程( Linux 下后台运行程序,查看和关闭后台运行程序 )。 #TODO

20.4 killall

Linux 中每个进程号是唯一的,但是可能存在进程名相同的进程,如下所示:

killall 命令可以通过进程名字杀死所有进程名相同的进程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNJvJyac-1677561875568)(01_学习记录/02_专业领域/asstes/assets/1527498996963.png)]

21 软件安装和卸载

21.1 在线安装

如果是在 ubuntu 平台,软件的安装可以通过互联网在线安装,更加方便快捷:

命令含义
sudo apt-get update获得最新的软件包的列表
sudo apt-get install xxx从源中安装 xxx 软件
sudo apt-get remove xxx删除 xxx 软件
sudo apt-get clean清理安装包

21.2 软件包安装

在 Ubuntu下安装文件为 deb 格式

  • 软件安装:sudo dpkg -i xxx.deb
  • 软件卸载:sudo dpkg -r 软件名

示例:

# tree 软件安装
deng@itcast:~$ sudo dpkg -i tree_1.6.0-1_amd64.deb# tree 软件卸载
deng@itcast:~$ sudo dpkg -r tree

22 重定向

重定向:Linux Shell重定向参考文章

  • 标准输入 代码 0 默认设备为键盘
  • 标准输出 代码 1 默认设备为屏幕
  • 错误输出 代码 2 默认设备为屏幕

示例:

ls /etc/passwd > output.txt 标准正确输出重定向到 output.txt 
ls /etc/shadow >> output.txt 标准正确输出追加重定向到 output.txt  
ls dddddd 2> error.txt 标准错误输出重定向到 error.txt 
ls ddddd 2>> error.txt 标准错误输出重定向到 error.txt,追加的方式  
ls dddddd 2> /dev/null 标准错误输出重定向到黑洞  
ls ddddd /etc/passwd &> /dev/null 标准正确输出标准错误输出全都重定向到黑洞  
ls ddddd /etc/passwd &>> txt 标准正确输出标准错误输出以追加的方式全都重定向到txt
cat < file 标准输入重定向, file 作为 cat 输入的内容

23 其它命令

23.1 tree

tree 以树状形式查看指定目录内容,使用该命令需要安装软件 tree:sudo apt install tree
常用选项:

-L n(n 为层数)查看n层目录

23.2 ln 链接

建立文件链接的目的一般是:当有多处使用同一个文件时,如果文件的位置或名称变更了,每一处都要随着更改,如果是使用软链接,则只需变更下软链接就可以了。

链接文件分为软链接和硬链接:

  • 软链接(符号链接):
    • 软链接本质上是一个独立的文件,但文件的内容只是执行源文件的一个引用或者说指针(即符号链接内部实际上存储的是指向源文件的路径),并不实际存储源文件的内容,所以源文件删除则软链接失效。
    • 大小:不管源文件的内容有多大,软链接文件都是非常小的。
    • 可以理解为,软链接只是源文件的一个快捷方式或别名,所以对软链接进行操作(增删改)不会影响到源文件。
  • 硬链接:
    • 硬链接本质上源文件的一个拷贝,占用的存储空间与源文件相同,所以即使删除了源文件,链接文件还是存在;
    • 同时硬链接与源文件会保持同步更新,更二者之一,另一个的内容和时间戳都会同步更新。所以对硬链接进行操作(增改)会影响到源文件。
    • 硬链接只能链接普通文件,不能链接目录。

ln 命令主要用于创建链接文件。Linux 链接文件类似于 Windows 下的快捷方式。
使用格式:

  • ln 源文件 链接文件
  • ln -s 源文件 链接文件
    如果没有 -s 选项代表建立一个硬链接文件,硬链接用的相对较少,软连接用的相对多。
    【注意】如果软链接文件和源文件不在同一个目录,创建链接时,源文件最好要使用绝对路径,不要使用相对路径。

readlink 命令读取符号链接文件的内容(存储目标文件的路径),示例:

deng@itcast:~/share$ readlink a\_link2 /home/deng/share/a

23.3 scp

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

scp 命令是 Linux 系统中功能强大的文件传输命令,可以实现从本地到远程,以及从远程到本地的双向文件传输,用起来非常方便,常用来在线上定位问题时将线上的一些文件下载到本地进行详查,或者将本地的修改上传到服务器上。

使用方式:

sudo apt-get install openssh-server # 下载 122.152.222.180 的文件 
scp liaoqingfu@122.152.222.180:/home/liaoqingfu/test.txt . # 上传文件到 122.152.222.180 
scp mi9.aac liaoqingfu@122.152.222.180:/home/liaoqingfu/ 	# 下载 test 整个目录到本地
scp -r liaoqingfu@122.152.222.180:/home/liaoqingfu/test . 	 # 上传本地 test 整个目录到 122.152.222.180
scp -r test liaoqingfu@122.152.222.180:/home/liaoqingfu/  											

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75336.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac iTerm2 rz sz

1、安装brew&#xff08;找了很多&#x1f517;&#xff0c;就这个博主的好用&#xff09; Mac如何安装brew&#xff1f;_行走的码农00的博客-CSDN博客_mac brew 2、安装lrzsz brew install lrzsz 检查是否安装成功 brew list 定位lrzsz的安装目录 brew list lrzsz 执…

git学习记录/菜鸟教程(基于Gitcode)

首先说明下为何使用Gitcode而不是hub或lab&#xff1a;只是因为国外的网站访问太慢了&#xff0c;而且还要翻译从初次使用开始说&#xff1a;首先安装Git&#xff0c;一路next就可以&#xff0c;安装好后打开&#xff0c;输入git version如果有显示版本号&#xff0c;说明安装成…

2020蓝桥杯真题跑步锻炼(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 1 千米。如果某天是周一或者月初&#xff08;1 日&#xff09;&#xff0c;为了激励自己&#xff0c;小蓝…

Docker在Windows环境的搭建和使用

文章目录安装WSL安装Docker安装Docker镜像下载Docker镜像启动gpu启动传送文件训练yolov5安装WSL Windows10和11支持Docker的安装&#xff0c;安装需要用到WSL。所以&#xff0c;我们先安装WSL。 参考文章&#xff1a;旧版 WSL 的手动安装步骤 以管理员身份打开powershell, 执行…

软考信息系统监理师备考建议

用好备考方法&#xff0c;两三个月就可以过的。信息系统监理师备考最好以教材和历年真题为主&#xff0c;教学视频模拟题为辅。考试介绍与复习建议&#xff1a;考试设置的科目包括&#xff1a;&#xff08;1&#xff09;信息系统工程监理基础知识&#xff0c;考试时间150分钟&a…

Three.js初试——基础概念

一、Three.js 是什么 先附上文档&#xff1a; 官网&#xff1a;JavaScript 3D Library 中文文档&#xff1a;中文文档 Three.js 是一个让用户通过 javascript 入手进入搭建 WebGL 项目的类库。众所周知学习 WebGL 需要图形学知识&#xff0c;而 webgl 需要通过 js 和 glsl …

第八届蓝桥杯省赛——4承压计算(二维数组,嵌套循环)

题目&#xff1a;X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致&#xff0c;但重量不同。金属材料被严格地堆放成金字塔形。7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 8 8 4 1 7 9 6 1 4 5 4 5 6 5 5 6 9 5 6 5 5 4 7 9 3 5 5 1 7 5 7 9 7 4…

车辆热管理测试方案

车辆热管理是在能源危机出现、汽车排放法规日益严格以及人们对汽车舒适性要求更高的背景下应运而生的。将各个系统或部件如冷却系统、润滑系统和空调系统等集成一个有效的热管理系统&#xff1b;控制和优化车辆的热量传递过程&#xff0c;保证各关键部件和系统安全高效运行&…

社交媒体营销的5个好处

有些人认为&#xff0c;社交媒体营销不能直接与销售挂钩。这就是为什么在制定营销策略时&#xff0c;社交媒体营销会被部分人忽视的原因。然而&#xff0c;与其他广告渠道不同&#xff0c;社交媒体是双向渠道。忽视社交媒体营销将影响与客户的关系。最重要的是&#xff0c;它将…

回顾1-idea创建Java项目

创建Java项目 创建项目和模块的区别 环境前置 IDEA开发工具JDK及配置环境变量 创建项目/工程 新建项目 选择Java模块 > SDK( 已配置的JDK ) > 下一步 直接下一步 填写项目信息 QQ游戏工程 里的 叫项目 所以 QQgame目录下 可以放 > 斗地主项目 / 美女来找茬等… …

C while 循环for循环

C 循环 只要给定的条件为真&#xff0c;C 语言中的 while 循环语句会重复执行一个目标语句。 语法 C 语言中 while 循环的语法&#xff1a; while(condition) {statement(s); }在这里&#xff0c;statement(s) 可以是一个单独的语句&#xff0c;也可以是几个语句组成的代码块…

深度学习基础实例与总结

一、神经网络 1 深度学习 1 什么是深度学习&#xff1f; 简单来说&#xff0c;深度学习就是一种包括多个隐含层 (越多即为越深)的多层感知机。它通过组合低层特征&#xff0c;形成更为抽象的高层表示&#xff0c;用以描述被识别对象的高级属性类别或特征。 能自生成数据的中…

DNS服务器部署的详细操作(图文版)

DNS服务器的部署 打开虚拟机后查看已经开放的端口&#xff0c;可以看到没有TCP53、UDP53&#xff0c;说明DNS服务端口没有打开 打开我的电脑—双击CD驱动器— 选择安装可选的Windows组件 选择网络服务—域名系统&#xff08;DNS&#xff09;— 点击下一步后会弹出如下弹…

线程安全实例分析

一、变量的线程安全分析 成员变量和静态变量是否线程安全&#xff1f; ● 如果它们没有共享&#xff0c;则线程安全 ● 如果它们被共享了&#xff0c;根据它们的状态是否能够改变&#xff0c;又分两种情况 —— 如果只有读操作&#xff0c;则线程安全 —— 如果有读写操作&am…

实时手势识别(C++与python都可实现)

一、前提配置&#xff1a; Windows&#xff0c;visual studio 2019&#xff0c;opencv&#xff0c;python10&#xff0c;opencv-python&#xff0c;numpy&#xff0c;tensorflow&#xff0c;mediapipe&#xff0c;math 1.安装python环境 这里我个人使用的安装python10&#…

ABB机器人基础编程_常见数据类型及使用方法介绍

ABB机器人基础编程_常见数据类型及使用方法介绍 1. bool-逻辑值 描述:bool型数据可以为TRUE或FALSE 使用方法举例: 2. 字节-整数值 描述:byte用于符合字节范围的整数值0-255,该数据类型连同处理操作并转换特征的指令和函数一同使用。 使用方法举例: 3. dnum-双数值 描…

云原生是什么?核心概念和应用方法解析

什么是云原生&#xff1f; 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展&#xff0c;适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念。云原生更准确来说就是一种文化&#xff0c;是一种潮流&…

供应链的有效管理,分析指标有哪些

对于企业而言&#xff0c;供应链是一个很复杂的、体系化的生态系统&#xff0c;从原材料、到供应商、到生产、仓库、物流&#xff0c;最后到达经销商或者最终客户那里&#xff0c;这个链条很长。相关的分析指标也有很多&#xff0c;在这些指标里面也有非常多可以扩展、延申的内…

【Linux驱动】驱动设计硬件基础----串口、I2C、SPI、以太网接口、PCIE

1.前言 常见的外设接口与总线的工作方式&#xff0c;包括串口、I2C、SPI、USB、以太网接口、PCI和PCI-E、SD和SDIO等。 2.串口 RS-232、RS-422与RS-485都是串行数据接口标准&#xff0c;最初都是由电子工业协会&#xff08;EIA&#xff09;制订并发布的。 3.I2C I2C&…

【RabbitMQ七】——RabbitMQ发布确认模式(Publisher Confirms)

RabbitMQ发布确认模式前言如何实现发布确认发布确认模式有三种策略单独发布消息执行结果批量发布消息执行结果异步处理发布确认执行结果思考点如何追踪未完成的确认?重新发布丢失的消息总结收获前言 发布确认是解决消息不丢失的重要环节&#xff0c;在设置队列持久化、消息持…