• Linux入门 学习笔记


    1.前言

    1.1. Linux的起源

    linux是开源的,任何人都可以去看它的源代码,去了解它的内部实现,而且linux非常自由,没有黑盒子,它允许你干任何事,这对我们深入学习计算机有非常重要的帮助。linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统。目前Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统。Linux可以运行在服务器和其他大型平台之上,如大型主机和超级计算机。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级电脑运行的都 是基于Linux内核的操作系统。

    Unix --> Minix (mini-UNIX) -> Linux

    • 1984年,Andrew S.Tanenbaum 开发了用于教学的Unix系统,命名为Minix,但是仅仅用于教学

    • 1989年,Andrew S.Tanenbaum将Minix系统运行于x86的pc平台

    • 1990年,芬兰赫尔辛基大学学生Linus Torvalds首次接触Minix系统

    • 1991 年, 21岁的荷兰在校大学生林纳斯(Linus)发布第一版.

    • 1994 年 3 月,Linux 1.0 发布,代码量 17万行,当时是按照完全自由免费的协议发布, 随后正式采用 GPL(General Public License 的缩写,是一份 GNU 通用公共授 权)协议。

    • 至此,Linux开始盛行开来...

    1.1.1.Unix

    可能大家首先看到Unix会有点奇怪,我们要讲的不是Linux吗?怎么蹦出个Unix,虽然它和Linux长得有点像。因为它们确实有很深的渊源!

    Unix 是在1969年美国贝尔实验室的 肯.汤普森开发出来的一款操作系统,什么是操作系统?大家正在玩的 Windows 和 Max OS就是两个操作系统。操作系统是用户和计算机的接口,同时也是计算机硬件和应用程序的接口,也就是说我们和计算机打交道以及计算机底层硬件和应用程序打交道都是通过操作系统。如下所示:

    而我们所说的Unix也是一个操作系统,其源代码大部分都是用C语言写的。它是一个强大的多用户、多任务操作系统,而且支持多种处理器架构。在1984年,Unix用户协会颁发了使用标准。后来IEEE为此制定了POSIX标准(即IEEE1003标准)国际标准名称为ISO/IEC9945,它通过一组最小的功能定义了在UNIX操作系统和应用程序之间兼容的语言接口。这个标准很重要,后面很多系统的开发都是遵循这个标准来的。

    虽然Unix系统这么好用,但是很不幸,它是一个对源代码实行知识产权保护的传统商业软件,也就是说Unix系统源代码不开源,而且Unix系统也是一个收费软件。这也直接导致了Linux系统的诞生。

    1.1.2.Linux

    UNIX 最初免费发布,在1990年,UNIX 在服务器市场尤其是大学校园成为主流操作系统,许多校园都有 UNIX 主机,当然还包括一些研究它的计算机系的学生。这些学生都渴望能在自己的电脑上运行 UNIX 。不幸的是,从那时候开始,UNIX 开始变得商业化,它的价格也变得非常昂贵。而唯一低廉的选择就是 MINIX ,这是一个功能有限的类似 UNIX 的操作系统,作者 Andrew Tanebaum 开发它的目的是用于教学。

    1991 年 10 月,Linus Torvalds(Linux 之父)在赫尔辛基大学接触 UNIX ,他希望能在自己的电脑上运行一个类似的操作系统。可是 UNIX 的商业版本非常昂贵,于是他从 MINIX 开始入手,而 Linus Torvalds 对Minix不是很满意,于是决定自己编写软件。他以学生时代熟悉的Unix作为原型, 在一台Intel 386 PC上开始了他的工作。他的进展很快,受工作成绩的鼓舞,他将这项成果通过互连网与其他同学共享,主要用于学术领域。他第一次发行的版本很快吸引了一些黑客。尽管最初的 Linux 并没有多少用处,但由于一些黑客的加入使它很快就具有了许多吸引人的特性,甚至一些对操作系统开发不感兴趣的人也开始关注它。每当出现新问题时,有人会立刻找到解决办法并加入其中,很快的, Linux成为了一个操作系统。值得注意的是 Linux并没有包括Unix源码,它是按照公开的POSIX标准重新编写的。Linux大量使用了由麻省剑桥免费软件基金的GNU软件,同时Linux自身也是用它们构造而成。

    1.1.3.Unix和Linux的区别

    Linux和UNIX的最大的区别是,前者是 开放源代码的自由软件,而后者是对源代码实行知识产权保护的传统 商业软件。这应该是他们最大的不同,这种不同体现在用户对前者有很高的自主权,而对后者却只能去被动的适应;这种不同还表现在前者的开发是处在一个完全开放的环境之中,而后者的开发完全是处在一个黑箱之中,只有相关的开发人员才能够接触的产品的原型。具体区别如下:

    ①、UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上.

    ②、UNIX是商业软件,收费,而Linux是自由软件,免费、公开源代码的.

    ③、Linux商业化的有RedHat Linux 、SuSe Linux、slakeware Linux、国内的红旗等,还有Turbo Linux.

    ④、Unix主要有Sun 的Solaris、IBM的AIX, HP的HP-UX,以及x86平台的的SCO Unix/ Unixware.

    1.2. Linux的使用

    1.2.1.服务器领域

    • Linux 在服务器领域的应用是其重要分支
    • Linux 免费、稳定、高效等特点在这里得到了很好的体现
      • 早期因为维护、运行等原因同样受到了很大的限制
      • 近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛

    1.2.2.嵌入式领域

    • 近些年来 Linux 在嵌入式领域的应用得到了飞速的提高
    • Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
    • 主要应用:
      • 手机、机顶盒、智能家电、车载导航、医疗仪器、航空航天设备、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广

    1.2.3.个人桌面领域

    • 此领域是传统 Linux 应用最薄弱的环节
    • 传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 Windows 所压制
    • 近些年来随着 Ubuntu、Fedora 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率在逐渐的提高

    1.3. Linux的版本

    Linux分为内核版本和发行版:

    1.3.1.Linux内核版

    • 内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,主要做一些基本的,也是重要的操作。比如进程管理、内存管理、磁盘管理、驱动管理、电源管理、安全管理等
    • Linux 内核版本又分为 稳定版 和 开发版,两种版本是相互关联,相互循环
      • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
      • 开发版:由于要试验各种解决方案,所以变化很快
      • 内核源码网址:http://www.kernel.org, 所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中

    1.3.2.Linux 发行版本

    Linux的发行版是指将Linux内核与应用软件打包,供个人计算机和服务器使用。

    • Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件
    • Linux发行套件系统是我们常说的Linux操作系统,也即是由Linux内核与各种常用软件的集合产品。全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和目标人群,下面将可以从用户的角度选出最热门的几款进行介绍。
      • 红帽企业系统(RedHatEnterpriseLinux,RHEL.)__红帽公司是全球最大的开源技术厂商,RHEL是全世界内使用最广泛的Linux系统。RHEL系统具有极强的性能与稳定性,并且在全球范围内拥有完善的技术支持
      • 社区企业操作系统(Community Enterprise Operating System,CentOS)__通过把RHEL系统重新编译并发布给用户免费使用的Linux系统,具有广泛的使用人群。CentOS当前已被红帽公司"收编"。
      • Fedora__由红帽公司发布的桌面版系统套件(目前已经不限于桌面版)。用户可免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RHEL系统中,因此Fedora也称为RHEL系统的"试验田"。运维人员如果想时刻保持自己的技术领先,就应该多关注此类Linux系统的发展变化及新特性,不断改变自己的学习方向。
      • Ubuntu__是一款派生自Debian的操作系统,对新款硬件具有极强的兼容能力. Ubuntu与Fedora都是极其出色的Linux桌面系统,而且Ubuntu也可用于服务器领域。
    • 十大 Linux 服务器发行版排行榜:http://blog.csdn.net/csdnnews/article/details/78589613

    2.基础知识

    2.1 定义

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议,支持32位和64位硬件。Linux操作系统继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    2.2 特点

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    • Linux 具有如下优点:
      • 稳定、免费或者花费少
      • 安全性高
      • 多任务,多用户
      • 耗资源少
      • 由于内核小,所以它可以支持多种电子产品,如:Android 手机、PDA 等。

    2.3 linux的目录

    2.3.1.基本目录结构

    在Linux世界里,一切皆为文件。

    2.3.2.Windows 下的文件系统

    • 在 Windows 下,打开 "计算机",我们看到的是一个个的驱动器盘符:

    • 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:

    2.3.3. Linux 下的文件系统

    一切都是目录,一切都是文件。这本来就是Linux 所倡导的。在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):

    Ubuntu 没有盘符这个概念,只有一个根目录 /,所有文件都在它下面

    Windows 和 Linux 文件系统 -- 类型

    • windows 中常见的磁盘格式有 fat16、fat32 和 ntfs 。windows 是一个封闭的系统。无法打开 ext3 或者 mac 日志式。
    • 在 ubuntu 中其文件系统广泛使用 ext3 ( ext4 是 ext3 的扩展)的文件格式,从而实现了将整个硬盘的写入动作完整的记录在磁盘的某个区域上。
    • 如果装 windows 和 ubuntu 双系统的话,在 ubuntu 中可以实现主动挂载 windows 的文件系统,并以只读的方式访问磁盘中 windows 系统上的文件。

    2.3.4.Ubuntu文件目录系统

    • Ubuntu文件系统的设计目的就是把文件有序地组织在一起,提供一个从逻辑上组织文件的文件系统。除了文件的组织外,文件安全也是文件系统的设计要点,所以文件的访问权限是文件系统不可缺少的组成部分
    • Ubuntu文件系统的组织结构是按一定的逻辑功能划分的,并且便于用户访问和使用。
    • Ubuntu严格区分大小写和空格,所以Sun和sun是两个不同的文件。
    Linux的根目录 \
    • Linux和Unix文件系统是按树型结构分级组织的。
    • 文件系统的最高级别是/或者根目录,其他文件或目录都在根目录下。
    • 根目录整个文件系统的逻辑终点
    • 一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
      • 当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
    根目录下的一级目录
    目录说明
    /bin 包含普通用户和系统管理员可以共享的各种通用程序,如bash、dd、df、gzip、grep、mv、mkdir等常用的基本命令
    /boot 包含系统引导程序GRUB及其配置文件、linux内核文件vmlinuz和磁盘内存映像文件initrd.img等重要引导文件
    /dev 包含系统支持的所有设备文件。具体来说,console表示控制台,lp0表示打印机,mem表示系统的物理内存,sda表示连接到主控制器的第一个磁盘,ttyXX表示串口设备
    /etc 包含系统管理和维护方面的所有配置文件
    /home 包含所有普通用户的家目录
    /lost+found 用于存储fsck命令在检测与修复文件系统时删除的文件和目录
    /media 包含移动存储介质的挂载点,插入U盘,系统会自动将U盘挂载到该目录的某个子目录
    /mnt 包含所有自定义的文件系统的挂载点,可以挂载任何文件系统 包括NFS或CIFS网络文件系统
    /opt 应用程序等附加软件的安装目录,类似于windows系统中的Program Files目录
    /proc 虚拟文件目录,系统关闭时为空目录,系统运行时进程文件系统根目录,其中的部分文件系统分别对应当前正在运行的进程,可用于访问当前进程的地址空间
    /root 超级用户root的家目录
    /sbin 超级用户管理员的常用工具、如管理和维护、系统引导和恢复命令集合
    /srv 分担了var目录的一些功能,保存了一些网络服务所需的数据文件
    /sys 和proc一样是虚拟目录,系统各种设备配置信息的根目录,如block子目录中包含有磁盘及磁盘分区的配置信息
    /tmp 临时文件目录,用于存储系统运行过程生成的临时文件,也可以供用户存储自己的临时文件。需要注意的是,只有文件的创建者才可以删除相应文件
    /usr 既可以作为根目录下的一个子目录,其中保存系统提供的各种共享数据(用户命令、库函数、头文件、文档等),又可以作为一个单独的文件系统,可以认为是对根目录的一个递归目录,使得文件系统具有更大的灵活性
    /var 该目录和usr 类似,首先是根目录下的子目录,也可以作为单独的文件系统,用于存储各种可变长的数据文件(如日志文件)、暂存文件或待处理的临时文件
    一些重要的二级目录
    目录说明
    /boot/grub 其中存有GRUB配置文件,以及三种不同类型的初始引导程序
    /etc/apt 包含软件管理工具使用的配置文件,如sources.list
    /etc/cron.d 用于存储cron进程调度运行后台进程所用的配置文件盒控制文件。其他有关目录 cron.hourly cron.daily cron.weekly cron.monthly 四个目录
    /etc/init.d 用于存储系统启动引导过程中需要由init调度执行的脚本文件
    /etc/network 包含网络接口的配置文件interfaces,以及相关的配置工具
    /etc/X11 包含X服务器使用的各种配置文件,如xorg.conf等 /usr/bin 包含用户经常使用的各种命令
    /usr/include 用于存储各种C语言头文件。这个目录及其子目录是开发人员经常引用的文件
    /usr/lib 其中包含各种共享的库函数,可供程序员已静态或动态的方式链接自己开发的程序
    /usr/sbin 包含系统引导完成之后系统管理员经常使用的各种系统管理和维护命令
    /usr/share 共享目录 包含man(联机文档的根目录)、info(GNU info文档的根目录)等子目录
    /usr/src 存放linux系统内核的源代码和文档等
    /var/lib 存储软件包特定的动态链接共享库、配置文件、数据文件和状态信息等
    /var/log 系统守护进程日志文件的存储目录
    /var/lock 用于存储各种服务进程或应用程序访问特定的设备或文件时设置的封锁文件
    /var/run 系统运行信息文件的根目录,其中包括各种.pid文件中存有守护进程的PID。
    /var/spool 用于缓存各种等待处理的文件,如打印服务等。通常每类待处理的缓存文件均位于各自的子目录中,如/var/spool/cups等
    /var/tmp 用于存储各种临时文件
    /usr 文件结构

    usr并不是user的缩写,而是Unix Software Resource的缩写,即"Unix 操作系统软件资源"放在该目录。这个目录 相当于Windows操作系统的"C:\Windows"和"C:\Program files"这两个目录的综合体

    目录说明
    /usr/bin 存放应用程序
    /usr/share 存放共享数据
    /usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
    /usr/local 存放软件升级包
    /usr/share/doc 系统说明文件存放目录
    /usr/share/man 程序说明文件存放目录
    /var 文件结构

    var放置系统执行过程中经常变化的文件

    目录说明
    /var/log 随时更改的日志文件
    /var/spool/mail 邮件存放的目录
    /var/run 程序或服务启动后,其 PID 存放在该目录下

    3.常用命令

    这篇笔记包含以下知识点:

    1. 几个概念的理解:Linux命令,控制台,终端, 终端提示符
    2. 对文件目录的操作的相关命令: 切换目录,列出目录下的文件等
    3. 对文件的操作的相关命令: 创建,删除,复制,修改,移动, 查找
    4. 对磁盘管理,建立链接的相关命令
    5. 文本搜索,归档, 压缩,解压的相关命令
    6. 其他一些常用命令, 对操作系统的一些常用命令

    3.1.基本概念

    Linux命令是对Linux系统进行管理的命令。

    对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:   

    • 内置Shell命令

    • Linux命令

    3.1.1.控制台(console)

    控制台(console)是我们通常见到的使用字符操作界面的人机接口,例如dos。 我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如dos命令就是控制台命令。

    3.1.2.终端(Terminal)

    终端(Terminal)也称终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。

    有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。

    • windows: C:\Users\pc-laowang>

    • Linux: python@ubuntu:/opt$

      • python:用户名

      • ubuntu:主机名( hostname)

      • /opt:路径

      • $ :用户类型

        • $ :代表普通用户

        • #: 超级用户

    3.1.3.Linux命令描述

    在Linux中,我们可以在终端中通过命令去执行操作。

    近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图形化界面下运行的快。

    可以说不会命令,就不算会 Linux。在职场中,大量的 服务器维护工作 都是在 远程 通过 SSH 客户端 来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成。如 磁盘操作、文件存取、目录操作、进程管理、文件权限 设定等

    3.1.4.英文提示的困惑

    这里有两个Linux最常见的报错提示:

    Command not found;

    No Such file or directory;

    这两个英文提示,第一个是找不到命令(我们敲入的命令有误或者该命令还没安装);第二个是找不到我们输入的文件或者目录。这只是我们在后面操作Linux系统时会遇到的两个很常见的问题报错提示,其实大家在后面遇到英文提示的信息,不要刻意的去忽视,这是用来帮助我们解决问题的很好的提示。而英文大家遇到不会了就去谷歌翻译,百度翻译查查,总归就是那些单词。我们多看几篇,以后在遇到类似的问题就会得心应手了。

    3.1.5.忘掉windows的思维方式

    相信大家玩操作系统都是从windows开始的,windows的提出理念是"让中年家庭妇女都可以熟练的运用电脑",所以我们在操作windows系统时,几乎不需要太多的知识储备,就能比较熟练的操作windows系统。但是对于Linux系统就不行了,windows特色就是图形化界面设计的非常友好,Linux系统虽然也有图形化界面,但是Linux从诞生到现在,一般都是为服务器做共享的,而服务器都是给专业人士来维护的,一般都是用非图形化界面的命令行方式来操作的。所以操作Linux系统和windows系统的区别比较大,比如windows系统我们一般会把系统安装在C盘,windows系统有盘符的说法,而Linux没有,Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。所以后面我们讲的Linux命令介绍,都会给出命令所在的文件目录。但是不管怎么说,大家刚上手由于先入为主的原因,可能对Linux操作感觉不自在,但是当你习惯之后,你会爱上Linux的命令行的。

    3.2 Linux命令

    Linux 发行版本的命令大概有 200 多个,这里只介绍比较重要和使用频率最多的命令。

    命令的基本格式

    • 终端命令格式:

      command [-options] [parameter]
      • command:命令名,相应功能的英文单词或单词的缩写

      • [-options]:选项,可用来对命令进行控制,也可以省略

      • [] 代表可选

      • parameter:传给命令的参数,可以是 零个、一个 或者 多个

    • 例:详细显示 /opt目录下边的文件列表信息

      •  ls -l /opt

    3.2.1.查阅命令帮助信息

    通过这几个命令你可以查看其他命令的介绍,知道其他命令的介绍和用法。

    命令说明
    man 获得Linux帮助手册
    man-f 查看所有的同名的手册,再查看特定的手册
    info info从首页开始浏览帮助手册,也可以浏览特定命令的帮助手册
    --help 输出最简单有用的介绍

    示例:

    示例命令说明
    man date 看到date命令的帮助手册,里面有date命令的介绍和详细的用法。

    3.2.2.列出当前目录下的文件ls

    3.2.2.1 文件基本信息

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

    ls 常用选项:

    • -a 显示指定目录下所有子目录与文件,包括隐藏文件.

    • -l 以列表方式显示文件的详细信息.

    • -h 配合 -l 以人性化的方式显示文件大小

    命令说明
    ls 列出目前工作目录所含的文件及子目录
    ls -a 显示所有文件及目录(ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)。
    ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出。
    ls -r 将文件以相反次序显示(原定依英文字母次序)。
    ls -t 将文件依建立时间之先后次序列出
    ls -A ls -a,但不列出"."(目前目录)及".."(父目录)。
    ls -F 在列出的文件名称后加一符号;例如可执行档则加"*",目录则加"/"。
    ls -R 若目录下有文件,则其以下的文件亦皆依序列出

    问题1: 查看家目录下的文件
    ls -l /home/python/

    问题2: 查看家目录下的所有文件
    ls -a /home/python/
    ls -a -l /home/python/
    ls -la /home/python/

    问题3: 详细查看家目录下的文件,并且以更友好的方式显示文件大小
    ls -lh /home/python

    3.2.2.2. 文件列表详情

    ls -l命令的输出内容中,显示出每一个文件或目录的一些常见属性,例如:

    • 在上边这样截图中, 包含了文件的一些详细的信息,图中列出的信息含义如下图所示:

    • 在上述的属性中,第一栏 -rw-r--r--为该文件的权限栏,该块共有10个字符组成。其中第一个字符显示该文件的类型,共有7种文件类型:
      • d: 代表目录
      • -: 代表文件
      • l: 代表连接档
      • b: 代表设备文件里可供存储的接口设备
      • c: 代表设备文件里的串行端口设备。
      • s: 代表数据接口文件
      • p: 代表FIFO文件
    • 其余9个字符分为三组:
      • 第一组代表文件拥有者的权限
      • 第二组代表文件拥有组的权限
      • 第三组代表其他用户的权限
    • 这三组中每组又有三个字符,分别代表这rwx权限,也就是读,写,执行权限。当权限不存在时,系统会以-填充该位。
      • r : 读
      • w : 写
      • x : 执行
      • - : 当权限不存在时,系统会以-填充该位,代表空许可

    [小练习:] (1). 在终端输入下列命令:
    ls -lh /home/python

    (2). 我们会得到以下的一条信息:
    drwxr-xr-x 2 python python 4.0K 5月 16 2016 Music

    (3). 请说明上述信息的含义.

    答: 第一部分: drwxr-xr-x 第一个字符:表示文件的列席 - (普通文件) d(目录) 第2个字符到第10个字符 :文件的访问权限 第二部分: python python 第一个python :是文件的属主用户,即谁创建的该文件就是属主用户 第二个python: 就是属主用户的组

    3.2.2.3. 使用通配符匹配文件

    通配符含义
    * 文件代表文件名中所有字符.
    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的文件

    :warning:\ : 如果要使通配符作为普通字符使用,可以在其前面加上转义字符。"?" 和 "*" 处于方括号内时不用使用转义字符就失去通配符的作用.

    问题1: 查看/bin目录中以r开头的所有文件
    python@ubuntu:~$ ls /bin/r*
    /bin/rbash /bin/red /bin/rmdir /bin/run-parts
    /bin/readlink /bin/rm /bin/rnano

    问题2: 查看/bin目录中以r开头的只有两个字符的文件
    python@ubuntu:~$ ls /bin/r?
    /bin/rm

    3.2.3.切换当前工作目录 cd

    • cd用于切换当前工作目录。
    • cd后面可跟绝对路径,也可以跟相对路径
      • "~"表示为home目录的意思
      • "."则是表示目前所在的目录
      • ".."则表示目前目录位置的上一层目录。
    • pwd用于显示所在的工作目录的绝对路径名称。
    命令说明
    cd 切换到当前用户根目录,默认[/home/用户名称/]
    cd . 切换到当前目录
    cd .. 切换到上一级目录
    cd / 返回操作系统跟目录,默认:[/]
    cd direction 进入某个指定的文件目录
    cd - 可进入上次所在的目录.

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

    3.2.4.操作文件的相关命令

    3.2.4.1.创建和删除文件 mkdir ,touch, rm

    命令说明
    touch 创建一个空的文件
    mkdir 用于新建文件夹
    mkdir -p 递归创建目录,当父目录存在时忽略,若不存在则建立,用此参数可建立多级文件夹。
    rmdir 删除空文件夹
    rmdir -p 删除子目录,如果子目录删除之后,父目录为空,则父目录亦删除。
    rm 删除文件或目录。
    rm -i 以进行交互式方式执行,删除前逐一询问。
    rm -f 直接强制删除,无需逐一询问(包括只读文件)。会忽略不存在的文件
    rm -r 删除目录及目录下所有文件。递归地删除目录下的内容,删除文件夹时必须加此选型

    3.2.4.2 复制文件或目录 cp

    • cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令。
    命令说明
    cp 复制文件或目录。
    cp -a 复制目录,它保留链接、文件属性,并复制目录下的所有内容。
    cp -d 复制文件时保留链接(类似快捷方式)。
    cp -f 覆盖已经存在的目标文件而不给出提示。
    cp -i 在覆盖目标文件之前给出提示,要求用户确认是否覆盖
    cp -p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
    cp -r 若源文件为目录文件,则复制该目录下的所有子目录和文件。
    cp -l 不复制文件,只生成链接文件。
    cp -v 显示拷贝进度

    3.2.4.3 修改和移动文件或目录 mv

    • 用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。
    命令说明
    mv 修改文件或目录名,移动文件或目录到其他位置。
    mv -i 若指定目录已有同名文件,则先询问是否覆盖旧文件。
    mv -f 覆盖某已有的目标文件时不给任何指示。
    mv -v 显示移动进度

    3.2.4.4 查看文件 cat

    • cat可以查看当前目录下的文件,也可以查看绝对路径下的文件
    • 查看内容时,在信息过长无法在一屏上显示时,使用cat命令会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用more命令,每次只显示一页,按下空格键可以显示下一页,按下q键退出显示,按下h键可以获取帮助。
    命令说明
    cat 查看文件cat XXX.txt
    more 逐行显示内容按ctrl+C退出。
    more +line 从指定行号开始显示。例, more +20 从第20行开始查看
    less 上下滚动查看内容按Q退出。
    less +line 从指定行号开始显示。

    3.2.4.5 查找文件 find

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

    常用用法:

    命令含义
    find ./ -name '*.sh' 查找当前目录下所有后缀为.sh的文件
    find ./ -name "[A-Z]*" 查找当前目录下所有以大写字母开头的文件
    find /tmp -size 2M 查找在/tmp 目录下等于2M的文件
    find /tmp -size +2M 查找在/tmp 目录下大于2M的文件
    find /tmp -size -2M 查找在/tmp 目录下小于2M的文件
    find ./ -size +4k -size -5M 查找当前目录下大于4k,小于5M的文件
    find ./ -perm 777 查找当前目录下权限为 777 的文件或目录

    问题1:查找test目录中扩展名是py的文件
    答: find ./ -name '*.py'

    问题2:查找test目录中c或者s开头的文件
    答: find ./ -name '[cs]*'

    问题3:查找test目录大于2M的文件
    答:
    find ./ -size +2M
    ls -lh

    问题4:查找出test目录中属主用户有读写权限,同组用户及其他用户只有读权限的文件
    答: find ./ -perm 644

    问题5:查找出test目录中属主用户有读写执行权限,同组用户及其他用户只有读和执行权限的文件
    答: find ./ -perm 755

    3.2.5. 对系统的相关操作

    命令说明
    reboot 重启系统
    poweroff 关机
    shutdown –r now 重新启动操作系统,shutdown会给别的用户提示
    shutdown -h now 立刻关机,其中now相当于时间为0的状态
    shutdown -h 20:25 系统在今天的20:25 会关机
    shutdown -h +10 系统再过十分钟后自动关机
    ping 测试网络连通状况,会向目标机器发送数据包来测试是否连通,是否延时

    3.2.6. 其他一些常用的命令

    命令说明
    clear 清屏. 清除终端上的显示(类似于DOS的cls清屏功能),也可使用快捷键:Ctrl + L
    alias 设置指令的别名。仅输入alias,则可列出目前所有的别名设置。
    unalias 用于删除别名。
    unalias -a 删除全部的别名
    tree 以树形的方式查看文件列表,默认ubuntu是没有安装该命令,第一次使用需要安装tree命令
    history 查看使用过的命令
    > 或>> Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。
    > 比如: ls > test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )
    >> 比如: ls >> test1.txt(test.txt 如果不存在,则创建,存在则追加新内容到文件尾部)
    `\ `

    3.2.7. 磁盘管理的相关命令 df,du,fdisk

    • 磁盘的管理是Linux上很重要的内容,磁盘管理的好坏会影响到系统的整体性能。
    • fdisk是Linux下功能是极其强大的磁盘管理命令
    命令说明
    df 检查文件系统的磁盘空间占用情况。
    df -h 将容量结果以易读的容量格式显示出来
    df -aT 将系统内的所有特殊文件格式及名称都列出来。
    df -h /文件夹名 将该文件夹底下的可用的磁盘容量以易读的容量格式显示。
    du 查看对文件和目录磁盘使用的空间,全部都会列出来,包括隐藏文件的目录。
    du -a 将文件的容量也列出来。
    du -sm /文件夹 检查根目录底下每个目录所占用的容量。
    fdisk 磁盘分区表操作工具

    Q: du和df的区别在哪?
    区别在于du这个命令其实会直接到文件系统内去搜寻所有的文件数据。

    3.2.8.建立链接文件:ln

    • Linux链接文件类似于Windows下的快捷方式。
    • 链接文件分为软链接和硬链接。
    • 使用格式:
      • 软连接格式: ln -s 源文件 链接文件
      • 硬链接格式:ln 源文件 链接文件
    • 提示:如果是在目标文件所在目录以外的目录创建软链接,那么软链接的目标文件路径写绝对路径

    Q:软链接与硬链接相同点与区别?

    1. 软链接与硬链接最终都是指向同一个文件的
    2. 当源文件名删除, 软链接变成无效链接,而硬链接还可以打开源文件的内容
    3. 文件详细列表显示时, 软链接的文件类型是 l,而硬链接是 -
    4. 软连接可以链接文件和目录,而硬链接只能链接文件

    Q:链接与复制的区别?
    链接与复制就好比,复印文件,复制是多了一份, 而链接,不管软还是硬,都只有一份文件

    3.2.9.文本搜索 grep

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

    • grep一般格式为:
      • grep [-选项] ‘搜索内容串’ 文件名
    • 在grep命令中输入字符串参数时,最好引号或双引号括起来。
      • grep 'a' 1.txt
    • grep搜索内容串可以是正则表达式。

    常用选项说明:

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

    问题1: 把家目录中的文件信息写入桌面的home.txt中, 并且查找D字符

    ls ~ >home.txt
    grep 'D' home.txt
    grep - i 'D' home.txt
    grep - in 'D' home.txt
    grep - inv 'D' home.txt

    问题2: 查询mysql程序是否运行(拓展)
    ps : 查看当前运行的进程 ,-aux: 以bsd的格式显示内容
    命令:ps -aux | grep 'mysql'

    3.2.10.归档管理:tar

    • 计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。
    • tar使用格式:
      • tar [选项] 打包文件名 文件
    • tar命令很特殊,其选项前面可以使用“-”,也可以不使用。
    • 除了-f需要放在选项的最后,其它选项的顺序任意。

    常用选项:

    选项含义
    -c 生成档案文件,创建打包文件
    -v 列出归档解档的详细过程,显示进度
    -f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
    -t 列出档案中包含的文件
    -x 解开档案文件

    问题1: 对test目录下的所有文件打包成my.tar 文件
    答: tar -cvf my.tar *

    问题2: 对my.tar 文件进行拆包
    答: tar -xvf my.tar

    问题3: 对test目录下的所有文件打包且以gzip格式压缩 成 my.tar.gz文件
    答:tar -czvf my.tar.gz *

    问题4: 对my.tar.gz 解压及拆包
    答: tar -xzvf my.tar.gz

    问题5: 对test目录下的所有文件打包且以bzip2格式压缩 成 my.tar.bz2文件
    答: tar -cjvf my.tar.bz2 *

    问题6: 对my.tar.bz2 解压及拆包 到桌面的test2目录中
    答:
    mkdir ../test2
    tar -xjvf my.tar.bz2 -C ../test2

    3.2.11.文件压缩解压:gzip

    • tar与gzip命令结合使用实现文件打包、压缩。
    • tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。
    • gzip使用格式如下:
      • gzip [选项] 被压缩文件

    常用选项:

    选项含义
    -d 解压
    -r 压缩所有子目录
    • tar这个命令并没有压缩的功能,它只是一个打包的命令,但是在tar命令中增加一个选项(-z)可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。

    • 压缩用法:

      • tar cvzf 压缩包包名 文件1 文件2 ...
    • 示例:

      • 将当前路径下的所有文件以及文件夹打包并压缩到test.tar.gz文件中
      • tar -zcvf test.tar.gz *
    选项含义
    -z 指定压缩包的格式为:file.tar.gz
    • 解压用法:
      • tar zxvf 压缩包包名
    • 解压示例:
      • 解压到当前路径下
      • tar -zxvf text.tar.gz
    选项含义
    -z 指定压缩包的格式为:file.tar.gz
    -C (大写字母“C”),解压到指定目录

    3.2.12.文件压缩解压:bzip2(了解)

    • tar与bzip2命令结合使用实现文件打包、压缩(用法和gzip一样)。
    • tar只负责打包文件,但不压缩,用bzip2压缩tar打包后的文件,其扩展名一般用xxxx.tar.bz2。
    • 在tar命令中增加一个选项(-j)可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程。
    • 压缩用法:tar -jcvf 压缩包包名 文件...(tar jcvf bk.tar.bz2 *.c)
    • 解压用法:tar -jxvf 压缩包包名 (tar jxvf bk.tar.bz2)

    3.2.13. 文件压缩解压: zip、unzip(了解)

    • 通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。
    • 压缩文件:zip [-r] 目标文件(没有扩展名) 源文件
    • 解压文件:unzip -d 解压后目录文件 压缩文件

    3.2.14.查看命令位置:which

    • which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。
    • which指令会在环境变量 PATH 设置的目录里查找符合条件的文件。
    • 使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
      • 示例: which Python

    问题:分别查看ls和shutdown两个命令在哪个目录中
    答:
    python@ubuntu:/Desktop/test2whichls/bin/lspython@ubuntu: /Desktop/test2 which shutdown
    /sbin/shutdown
    python@ubuntu:
    /Desktop/test2$

    3.2.15. 修改文件或目录权限:chmod

    • Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
    • chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。
    • 英文原意:change the permissions mode of a file
    • chmod 修改文件权限有两种使用格式:字母法与数字法。
      • 字母法:包含字母和操作符表达式的文字设定法
      • 数字法, 即包含数字的数字设定法。
    3.2.15.1.字母法:chmod u/g/o/a +/-/= rwx 文件

    文字设定法的标准格式:

    chmod [who] [+ | – | =] [mode] 文件名

    上述格式中,各个操作选项分别为:

    • 操作对象who可是下述字母中的任一个或者它们的组合:

    选项含义说明
    u 用户(user) 即文件或目录的所有者。
    g 同组(group)用户 即与文件属主有相同组ID的所有用户。
    o 其他(others)用户 表示其他以外的人
    a 所有(all)用户 三者皆是,它是系统默认值。
    • [ +-= ]操作符可以是:

    选项说明
    · 添加某个权限
    取消某个权限
    = 予给定权限并取消其他所有权限(如果有的话)
    • 设置mode所表示的权限可用下述字母的任意组合:

    rwx选项含义
    read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
    w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
    x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

    问题1: 对test2目录下的sublime.py 文件的拥有者用户及同组用户添加执行权限,对其他用户添加写权限
    答: chmod u+x,g+x,o+w sublime.py

    问题2: 对test2目录下的sublime.py同组用户移除执行权限,对其他用户设置无权限
    答: chmod g-x,o= sublime.py

    3.2.15.2.数字法: 用数字代表r,w,x

    数字命令的一般格式为: chmod [mode] 文件名¼

    • 表示的属性的含义:
    数字代号代表字母说明
    4 r 读取权限
    2 w 写入权限
    1 x 执行权限
    0 - 不具任何权限

    例如:

    执行:

    chmod u=rwx,g=rx,o=r filename就等同于:chmod u=7,g=5,o=4 filename

    • 可以向上述权限相加,进行权限组合。所以数字属性的格式应为3个从0到7的八进制数,其顺序是u用户user-->g同组用户group user-->o其他用户other user (上边第一种文字方法提到的操作对象who)。
    • 如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

    例如:

    问题1:设置所有人可以读写及执行: 命令可以写为: chmod 777 文件名

    (等价于 chmod u=rwx,g=rwx,o=rwx file 或 chmod a=rwx file)

    问题2:设置拥有者可读写,其他人不可读写执行

    命令可以写为:chmod 600 文件名

    (等价于 chmod u=rw,g=---,o=--- file 或 chmod u=rw,go-rwx file )

    问题3:使用数字法对test2目录的sublime.py所有用户均设置读写执行权限
    答: chmod 777 sublime.py

    3.2.15.3.常见的权限表示形式

    字母法数字法权限说明
    -rw------- 600 只有拥有者有读写权限。
    -rw-r--r-- 644 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
    -rwx------ 700 只有拥有者有读、写、执行权限。
    -rwxr-xr-x 755 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
    -rwx--x--x 711 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
    -rw-rw-rw- 666 所有用户都有文件读、写权限。
    -rwxrwxrwx 777 所有用户都有读、写、执行权限。

    3.2.16. 与用户相关命令(whosuexitpasswdsudo)

    3.2.16.1.who : 查看哪些用户在登录

    例如, 查看当前哪些用户在登录:

    python@ubuntu:~/Desktop$ who

    返回:

    python   tty7         2018-06-02 08:31 (:0)
    python   pts/18       2018-06-02 10:33 (192.168.169.94)

    上述返回信息中, 'python'表示: 登录的用户名; 'tty7'表示本地终端登录; 'pts'表示远程终端登录

    3.2.16.2.sudo : (superuser do)超级用户授权当前用户执行命令

    • 格式:sudo command 例如: 在/opt目录下创建images文件夹
      执行命令:python@ubuntu:/opt$ mkdir images
      我们会得到返回信息:mkdir: 无法创建目录"images": 权限不够
      所以,可以使用sudo执行上述命令:
    python@ubuntu:/opt$ sudo mkdir iamges

    执行上述sudo命令后,会返回核验超级用户密码的要求:[sudo] python 的密码:输入密码后,即可在/opt目录下创建images文件夹

    3.2.16.3. passwd : 设置密码

    • 格式: sudo passwd 用户名

    例如,设置root用户密码:

    # 输入命令行:
    python@ubuntu:/opt$ passwd root
    #(返回) passwd:您不能查看或更改 root 的密码信息。
    # sudo 命令:
    python@ubuntu:/opt$ sudo passwd root
    #(返回) 输入新的 UNIX 密码: 
    # (返回)重新输入新的 UNIX 密码: 
    (返回)passwd:已成功更新密码

    3.2.16.4.su :切换账户

    例如: 使用su命令切换到root用户

    su root

    3.2.16.1.exit: 退出用户登录*

    -- 如果是ubuntu图形界面打开的命令终端,退出当前终端
    -- 如果是使用ssh远程登录,退出登录账户
    -- 如果是切换后的登录用户,退出则返回上一个登录账号

    #使用exit命令退出命令终端界面
    exit

    3.3.终端命令小技巧

    • ctrl+ shift + +:放大终端窗口的字体显示

    • ctrl + -: 缩小终端窗口的字体显示

    • 终端窗口-->右键-->配置文件-->配置文件首选项-->自定义字体

    • 在敲出 文件/目录/命令 的前几个字母之后,按下 tab

      • 如果输入的没有歧义,系统会自动补全
      • 如果还存在其他 文件/目录/命令,再按一下 tab 键,系统会提示可能存在的命令
    • 按 上/下 光标键可以在曾经使用过的命令之间来回切换

    • ctrl + c:如果想要退出选择,并且不想执行当前选中的命令,可以 还可中断命令执行,比如中断top命令等

    • ctrl + l: 清屏

    • ctrl + shift + t : 打开终端

    Reference

    1.『Linux基础 - 4 』linux常用命令(1) - 古月半半 - 博客园

    2.Linux系列教程(一)——Linux系统简介 - YSOcean - 博客园

  • 相关阅读:
    移位乘除法
    标准C++的一些约定
    图论的一些定义
    二进制取数在多重背包和母函数中的应用
    深入理解最小割的意义
    pku 3020 最小路径覆盖集
    pku 1986 LCA算法的应用
    pku 1185
    连通分量(tarjan算法)
    pku 2983 差分约束系统判断
  • 原文地址:https://www.cnblogs.com/watalo/p/16247508.html
Copyright © 2020-2023  润新知