《鸟哥的Linux私房菜》笔记第零章到第六章

鸟哥的Linux私房菜

课程链接

常用提要

cd:变换目录 【Change Directory】

返回上一层目录可以用$ cd …
比如你进到桌面 ls出了一大堆文件夹,随便进了一个 没找到东西 想进另一个文件夹,就不要从头写路径 可以用 $ cd …/另一个文件夹 这个意思就是跳到上一层目录并进入那个目录下的文件夹
单纯的 $ cd 是默认为$ cd ~ 只会到主文件夹 主文件夹是用户文件夹,目录是在/home/nano 如果要去根目录的话就得到 $ cd /

pwd:显示目前的目录 【Print Working Directory】

如果在主文件夹,$的左侧不会从根目录开始显示路径,而是单纯的~ ,也就是从主文件夹开始显示路径。

mkdir:创建一个新的目录 【make directory】

假如你要创建一个目录为 /home/bird/testing/test1,最好/home/bird/testing都已经存在了,否则得要 $ mkdir -p /home/bird/testing/test1 才能帮你自动创建 希望你创建时没打错字母
$ mkdir -m 711 test2
设置权限用-m [ r4分w2分x1分]

rmdir:删除一个空的目录

只能删掉空文件夹,test1到4都是空文件夹 但只删test1的话会报错,因为里面有文件夹,此时加-p是逐层删除。如果要删有内容的文件夹得用rm指令 对,就那个梗
$ rmdir test
$ rmdir -p test1/test2/test3/test4

范例: 复制一文件,创建一目录,将文件移动到目录中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest

列出文件
$ls -al 列出“自己主文件夹(~)”下的“所有隐藏文件与相关的文件属性” 【另外 隐藏文件只不过是文件名以点开头的文件而已 不是被刻意隐藏的重要文件】

$ll /usr/bin/locate /var/lib/mlocate/mlocate.db 【简写的ls -l像这样可以单独看两个文件的权限情况

$ ls ~/.bash 按Tab键能补充.bash文件的完整名字 要是只有单独一个合格文件,Tab就会帮忙补全并给出它的子文件夹,要是在命令后面输入- 就能用Tab键展开这个命令的可选参数 【总之 Tab能补全命令、文件名、额外选项 以及展示子文件

看文件内容
$ less 文件

空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
方向键:可以用
/字串 :向下搜寻“字串”的功能;
?字串 :向上搜寻“字串”的功能;
n :往前找那个字串(与 ‘/ ’或 ‘? ’有关)
N :往后找那个字串(与 ‘/ ’或 ‘?’ 有关)
g :到第一个那个字串的位置;
G :到最后一个那个字串的位置 (注意大小写);
q :离开 less 这个程序;
用help还能看到其他一堆的快捷键

翻页
[Shift]+[Page Up] 输出太长,要拉上去看
[Page Down] 一键回到最低下

记事本
$ nano text.txt
记事本应用名叫nano 打开或者新建一个text.txt
[F1]是帮助文档 再按一次就可退出
^ 代表[Ctrl]键 ;
M- 代表[Alt]键

看帮助
$ 指令 --help

搜指令

$ which 指令名

找 PATH 内存着的目录 加个-a就列出全部 指令名不能用*替代啊,必须得是完整的指令名【可惜】

搜文件
通常 find 不很常用的!因为速度慢之外, 也很操硬盘!一般我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦! 为什么呢?因为 whereis 只找系统中某些特定目录下面的文件而已,locate 则是利用数据库来搜寻文件名,

whereis [-bmsu] 文件或目录名

进入管理员权限
$ su 然后输入密码
命令行会变成#
要退出就 # exit
退出程序
[Ctrl]-c 中断目前程序 [Ctrl]-d 键盘输入结束(End Of File, EOF )也可以用来取代exit的输入
关机
$ shutdown now

第零章 计算机基础

0.1

基本上数据都是流经过内存再转出去的! 至于数据会流进/流出内存则是 CPU 所发布的控制命令!而 CPU 实际要处理的数据则完全来自于内存 (不管是程序还是一般文件数据)!这是个很重要的概念喔! 这也是为什么当你的内存不足时,系统的性能就很糟糕!也是为什么现在人们买智能手机时,对于可用内存的要求都很高的原因!

在这里插入图片描述

0.2

Intel的 i7-4790 CPU频率为3.6GHz, 表示这颗CPU在一秒内可以进行3.6x10^9次工作,每次工作都可以进行少数的指令运行.
注意,不同的CPU之间不能单纯的以频率来判断运算性能喔!这是因为每颗CPU的微指令集不相同,架构也不见得一样,可使用的第二层高速缓存及其计算机制可能也不同, 加上每次频率能够进行的工作指令数也不同!所以,频率目前仅能用来比较同款CPU的速度!
由于x86架构的CPU在Intel的Pentium系列(1993年)后就有不统一的脚位与设计,为了将不同种类的CPU规范等级, 所以就有i386,i586,i686等名词出现了。基本上,在Intel Pentium MMX与AMD K6年代的CPU称为i586等级, 而Intel Celeron与AMD Athlon(K7)年代之后的32位CPU就称为i686等级。 至于目前的64位CPU则统称为x86_64等级。
超线程 (Hyper-Threading) 【我自己总结一下:现在都CPU有多个核心,核心是计算用的,每个核心有自己配套的寄存器资源。但是普通情况下 寄存器给核心的计算量并不会让核心满负荷工作,所以超线程就是把寄存器资源再一分为二,然后同时请求那个核心来计算,这样4个核心的CPU就得干8个核心的活。真是个十足的资本家啧啧啧。而且根据情况不同,这种做法也可能导致效率降低,一般正常手段的话是用操作系统的多任务切换来让一个核多干点事的】
主板上面的元件是非常多的,而每个元件的参数又具有可调整性。举例来说,CPU与内存的频率是可调整的; 而主板上面如果有内置的网卡或者是显卡时,该功能是否要启动与该功能的各项参数, 是被记录到主板上头的一个称为CMOS的芯片上,这个芯片需要借着额外的电源来发挥记录功能, 这也是为什么你的主板上面会有一颗电池的缘故。

0.4

操作系统的核心功能

既然核心主要是在负责整个电脑系统相关的资源分配与管理,那我们知道其实整部电脑系统最重要的就是CPU与内存, 因此,核心至少也要有这些功能的:

系统调用接口(System call interface) 刚刚谈过了,这是为了方便程序开发者可以轻易的通过与核心的沟通,将硬件的资源进一步的利用, 于是需要有这个简易的接口来方便程序开发者。

程序管理(Process control) 总有听过所谓的“多任务环境”吧?一部电脑可能同时间有很多的工作跑到CPU等待运算处理, 核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行!另外, 良好的CPU调度机制(就是CPU先运行那个工作的排列顺序)将会有效的加快整体系统性能呢!

内存管理(Memory management) 控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序码与数据都必须要先存放在内存当中。 通常核心会提供虚拟内存的功能,当内存不足时可以提供内存交换(swap)的功能哩。

文件系统管理(Filesystem management) 文件系统的管理,例如数据的输入输出(I/O)等等的工作啦!还有不同文件格式的支持啦等等, 如果你的核心不认识某个文件系统,那么您将无法使用该文件格式的文件啰!例如:Windows 98就不认识NTFS文件格式的硬盘;

设备的驱动(Device drivers) 就如同上面提到的,硬件的管理是核心的主要工作之一,当然啰,设备的驱动程序就是核心需要做的事情啦! 好在目前都有所谓的“可载入模块”功能,可以将驱动程序编辑成模块,就不需要重新的编译核心啦!

第一章 Linux概述

1.1

Linux前身 以及 开源许可

1.4

这些基础知识是学习更深入的技巧的必备条件呀!因此建议:

计算机概论与硬件相关知识: 因为既然想要走Linux这门路,信息相关的基础技能也不能没有啊! 所以先理解一下基础的硬件知识,不用一定要全懂啦!又不是真的要你去组计算机~_, 但是至少要“听过、有概念”即可;

先从Linux的安装与指令学起: 没有Linux怎么学习Linux呢?所以好好的安装起一套你需要的Linux吧!虽然说Linux distributions很多, 不过基本上架构都是大同小异的,差别在于接口的友好度与软件的选择不同罢了! 选择一套你喜欢的就好了,倒是没有哪一套特别好说~

Linux操作系统的基础技能: 这些包含了“使用者、群组的概念”、“权限的观念”,“程序的定义”等等,尤其是权限的概念, 由于不同的权限设置会妨碍你的使用者的便利性,但是太过于便利又会导致入侵的可能! 所以这里需要了解一下你的系统呦!

务必学会vi文书编辑器: Linux的文书编辑器多到会让你数到生气!不过,vi却是强烈建议要先学习的! 这是因为vi会被很多软件所调用,加上所有的Unix like系统上面都有vi,所以你一定要学会才好!

Shell与Shell Script的学习: 其实鸟哥上面一直谈到的“命令行”说穿了就是一个名为shell的软件啦!既然要玩命令行,当然就是要会使用shell的意思。 但是shell上面的数据太多了,包括“正则表达式”、“管线命令”与“数据流重导向”等等,真的需要了解比较好呦! 此外,为了帮助你未来的管理服务器的便利性,shell scripts也是挺重要的!要学要学!

一定要会软件管理员: 因为玩Linux常常会面临得要自己安装驱动程序或者是安装额外软件的时候,尤其是嵌入式设备或者是学术研究单位等。 这个时候Tarball/RPM/DPKG/YUM/APT等软件管理员的安装方式的了解,对你来说就重要到不行了!

网络基础的创建: 如果上面你都通过了,那么网络的基础就是下一阶段要接触的咚咚,这部份包含了“IP概念”“路由概念”等等;

如果连网络基础都通过了,那么网站的架设对你来说,简直就是“太简单啦!”

第二章 硬件与文件

2.1

linux的虚拟机 KVM

2.2

磁盘分区 【不是很理解但是不太想弄懂。。

  • MSDOS (MBR) 分区表格式与限制

在这里插入图片描述正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下面,为了加速,可能就会使用 /dev/vd[a-p] 这种设备文件名喔! 因此在实际处理你的系统时,可能得要了解为啥会有两种不同磁盘文件名的原因才好!
在这里插入图片描述

  • GUID partition table, GPT 磁盘分区表
    与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!

开机流程
目前的主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制

  • BIOS 搭配 MBR/GPT 的开机流程
    BIOS就是在开机的时候,计算机系统会主动执行的第一个程序。BIOS会去分析计算机里面有哪些储存设备,并且到硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序(boot loader),开机管理程序的目的是载入(load)核心文件。(开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的开机扇区(boot sector)喔)

这个boot loader的主要任务有下面这些项目:

  • 提供菜单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
  • 载入核心文件:直接指向可开机的程序区段来开始操作系统;
  • 转交其他loader:将开机管理功能转交给其他loader负责。
    在这里插入图片描述
  • UEFI BIOS 搭配 GPT 开机的流程
    UEFI 主要是想要取代 BIOS 这个固件界面,因此我们也称 UEFI 为 UEFI BIOS
    在这里插入图片描述

文件系统与目录树
在这里插入图片描述

Windows: 桌面\我的计算机\E:\我的文件
Linux: /media/cdrom/我的文件

2.3

较安全一点的分区方式就是先分析这部主机的未来用途,然后根据用途去分析需要较大容量的目录, 以及读写较为频繁的目录,将这些重要的目录分别独立出来而不与根目录放在一起, 那当这些读写较频繁的磁盘分区有问题时,至少不会影响到根目录的系统数据,那挽救方面就比较容易啊!

第三章 安装 CentOS7

略。 没什么可记的

第四章 开始命令行了

4.1

[Ctrl] + [Alt] + [F1] :图形接口桌面。
[Ctrl] + [Alt] + [F2] ~ [F6] :命令行登陆 tty2 ~ tty6 终端机。
屏幕全灰色,让我输入用户名和密码【吓我一跳 还好F1就能回去】
$ exit 就是登出 我从tty2登出 它自动跳转到了tty1 鼠标键盘还死机了。。。。
[Alt] + [Ctrl] + [Delete] 电脑重启

终端里 ‘#’ 代表以 root 的身份登陆系统,而 ‘$’ 则代表一般身份使用者
$前面的那个 ~ 符号代表的是“使用者的主文件夹”的意思,他是个“变量!” 。举例来说,root的主文件夹在/root, 所以 ~ 就代表/root的意思。而dmtsai的主文件夹在/home/dmtsai, 所以如果你以dmtsai登陆时,他看到的 ~ 就会等于/home/dmtsai喔!
【我尝试之后发现:~所在的是自己在硬盘分出的主文件夹,如果此时ls并选一个文件夹cd进去 $前面会包含那个文件夹以及 ~,而如果cd到 / 根目录下 $前面的符号就会变成根目录相关内容】

4.2

在这里插入图片描述

1.一行指令中第一个输入的部分绝对是“指令( command ) "或“可执行文件”(例如批次脚本,script )
2.command为指令的名称﹐例如变换工作目录的指令为cd等等﹔
3.中刮号[]并不存在于实际的指令中﹐而加入选项设置时﹐通常选项前会带-号﹐例如-h;有时候会使用选项的完整全名﹐则选项前带有两个横杠﹐例如–help ;【CSDN给合并显示了】
4. parameter1 parameter2…为依附在选项后面的参数﹐或者是command 的参数;
5.指令,选项,参数等这几个咚咚中间以空格来区分﹐不论空几格shell都视为一格·所以空格是很重要的特殊字符!;
6.按下[Enter]按键后﹐该指令就立即执行·[Enter]按键代表着一行指令的开始后动·
7.指令太长的时候﹐可以使用反斜线(\)来跳脱[Enter]符号﹐使指令连续到下一行·注意!反斜线后就立刻接特殊字符﹐才能跳脱!
8.其他:在 Linux系统中﹐英文大小写字母是不一样的·举例来说﹐cd 与CD并不同。

$ls 列出“自己主文件夹(~)”下的“所有普通文件”
$ls -a 列出“自己主文件夹(~)”下的“所有隐藏文件和普通文件”
$ls -l 列出“自己主文件夹(~)”下的“普通文件以及属性” 可以简写为 ll【两个小写的L】
$ls -al 列出“自己主文件夹(~)”下的“所有隐藏文件与相关的文件属性”
$ls -a -l 和-al一样
【另外 隐藏文件只不过是文件名以点开头的文件而已 不是被刻意隐藏的重要文件】
$ ls ~/.bash 按Tab键能补充.bash文件的完整名字 要是只有单独一个合格文件,Tab就会帮忙补全并给出它的子文件夹,要是在命令后面输入- 就能用Tab键展开这个命令的可选参数 【总之 Tab能补全命令、文件名、额外选项 以及展示子文件
$ ll /usr/bin/locate /var/lib/mlocate/mlocate.db 像这样可以单独看两个文件的权限情况

退出程序
[Ctrl]-c 中断目前程序
[Ctrl]-d 键盘输入结束(End Of File, EOF )也可以用来取代exit的输入
翻页
[Shift]+[Page Up] 输出太长,要拉上去看
[Page Down] 一键回到最低下

4.3 帮助文档

调出帮助文档除了用 $ 指令 --help 还能用 $ man 指令
进入man指令的功能后,你可以按下“空白键”往下翻页,可以按下“ q ”按键来离开man的环境。【我这里好像用不了man 总之能用了再回来看】
在这里插入图片描述

linux下man手册的安装和使用

一般来说,鸟哥是真的不会去背指令的,只会去记住几个常见的指令而已。那么鸟哥是怎么找到所需要的指令呢? 举例来说,打印的相关指令,鸟哥其实仅记得 lp (line print)而已。那我就由 man lp 开始,去找相关的说明, 然后,再以 lp[tab][tab] 找到任何以 lp 为开头的指令,找到我认为可能有点相关的指令后,先以 --help 去查基本的用法, 若有需要再以 man 去查询指令的用法。

info 这个指令我也没有啊啊啊啊啊】

摆在**/usr/share/doc**这个目录里的 How-To文档不只告诉你“如何做”,还会有一些相关的原理会说明呢。很多原版软件释出的时候,都会有一些安装须知、预计工作事项、未来工作规划等等的东西,还有包括可安装的程序等, 这些文件也都放置在 /usr/share/doc 当中。

总之

  • 在终端机模式中,如果你知道某个指令,但却忘记了相关选项与参数,请先善用 --help 的功能来查询相关信息;
  • 当有任何你不知道的指令或文件格式这种玩意儿,但是你想要了解他,请赶快使用man或者是info来查询!
  • 如果你想要架设一些其他的服务,或想要利用一整组软件来达成某项功能时,请赶快到/usr/share/doc下面查一查有没有该服务的说明文档喔!

4.4 记事本

$ nano text.txt
编辑器名字叫nano 打开或者新建一个text.txt
[F1]是帮助文档 再按一次就可退出
^ 代表[Ctrl]键 ;
M- 代表[Alt]键

4.5 关机

将数据同步写入硬盘中的指令: sync
惯用的关机指令: shutdown
重新开机,关机: reboot, halt, poweroff

$ sync

这个是保存数据
所有的数据都得要被读入内存后才能够被CPU所处理,但是内存里面的数据是运行的时候方便临时取用的,如果意外断电,重新开机就没了。所以sync相当于写文档的时候的保存按钮,能把内存里的数据更新到磁盘里。
【不过现在的关机指令已经都包括了sync这个步骤了】

$ shutdown --help
$ shutdown -h now
现在就关//不指定的话默认是1分钟后
$ shutdown -h 20:25
$ shutdown -r +30
30分钟后重新开机

第五章 文件权限

5.1 分组使用

linux的每个账号都可以创建仅自己可见的文件,共享文件可以设置开放给其他指定账号或者某个群组
在Linux里面,任何一个文件都具有“User, Group及Others”三种身份的个别权限。每个帐号可以加入的群组个数基本上是没有限制的
当屏幕前面出现了“Permission deny”的时候,肯定是权限设置错误
root是管理员身份,可以访问任何文件,但我们平时登陆也尽量不动用root 而是以User登陆
进入管理员权限是 $ su 然后输入密码
命令行会变成#
要退出就 # exit

5.2 Linux 文件权限概念

对文件的可读/可写/可执行权限
在这里插入图片描述
【Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的,文件名即使取了.html的名字也只是为了方便分辨!
具有“可执行的权限”以及“具有可执行的程序码”是两回事!在 Linux 下面,你可以让一个文本文件,例如我们之前写的 text.txt 具有“可执行的权限” (加入 x 权限即可), 但是这个文件明显的无法执行,因为他不具备可执行的程序码!而如果你将上面提到的 cat 这个可以执行的指令,将他的 x 拿掉,那么 cat 将无法被你执行!】
对文件夹的可读/可写/可执行权限
在这里插入图片描述

在这里插入图片描述
$ ls -al 指令出来的文件信息如上图
1 可以知道是文件夹/文件/设备/快捷图标 ; 可以知道拥有者/群/其他人是否可读/可写/可执行 【拥有者是3,对应群组是4】
2 连接数 看起来是指那个文件夹里面包含了多少个文件夹【里面包含的文件不计数】
3 拥有者
4 文件所属群组【唔,一个文件不能属于多个群组吗?明明一个账户能加入多个群组】
5 容量大小,默认单位为Bytes
6 这个文件的创建日期或者是最近的修改日期 $ ls -l --full-time 可以显示完整日期
在这里插入图片描述

chgrp :改变文件所属群组 【用cat指令去看文件内容】
chown :改变文件拥有者
chmod :改变文件的权限,【SUID, SGID, SBIT等等的特性是 本来没有操作权限的个人和群组能够临时获得权限去执行这个命令或者不得删除这个文件】

# chmod 754 filename  【 r4分w2分x1分[4+2+1][4+0+1][4+0+0]=754 权限变成“ -rwxr-xr-- ” 】

确实有时候需要变更文件的拥有者的,最常见的例子就是在复制文件给你之外的其他人时,由于复制行为(cp)会复制执行者的属性与权限,所以!怎么办?.bashrc_test还是属于root所拥有, 如此一来,即使你将文件拿给WQuiet这个使用者了,他仍然无法修改的(看属性/权限就知道了吧), 所以你就必须要将这个文件的拥有者与群组修改一下

鸟哥还讲到了批量修改和修改用途的一些知识。# chmod a+w .bashrc就是所有人都能写.bashrc文件 【全部all + w 的意思,而且去掉w权限可以用 - 】
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
这样的文件是能被访客整个删掉的,奇怪吧
在这里插入图片描述
例题: 我想在 /tmp 下面创建一个目录,这个目录名称为 chapter6_1 ,并且这个目录拥有者为 dmtsai, 群组为 dmtsai,此外,任何人都可以进入该目录浏览文件,不过除了 dmtsai 之外,其他人都不能修改该目录下的文件。答:因为除了 dmtsai 之外,其他人不能修改该目录下的文件,所以整个目录的权限应该是 drwxr-xr-x 才对! 因此你应该这样做:创建目录: mkdir /tmp/chapter6_1 修改属性: chown -R dmtsai:dmtsai /tmp/chapter6_1 修改权限: chmod -R 755 /tmp/chapter6_1

干货真的很多,详情戳链接,另外记得善用–help
Linux 文件权限概念

6.4章节提到

umask 指令可以修改新建文件时的默认权限。

chatter 给文件设置隐藏属性

其中有两个相当有用的属性,得进入root才能设置

# chattr +i wqfile 【不能被删除、改名、设置链接也无法写入或新增数据
# chattr -i wqfile 【取消掉i这个属性
# chattr +a wqfile 【只能增加数据,而不能删除也不能修改数据

lsattr 显示文件隐藏属性

$ lsattr [-adR] 文件或目录

5.3 Linux目录配置

在这里插入图片描述

第六章 Linux 文件与目录管理

6.1 目录与路径

绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 …/…/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
. :代表当前的目录,也可以使用 ./ 来表示;
… :代表上一层目录,也可以 …/ 来代表。

cd:变换目录 【Change Directory】

返回上一层目录可以用$ cd …
比如你进到桌面 ls出了一大堆文件夹,随便进了一个 没找到东西 想进另一个文件夹,就不要从头写路径 可以用 $ cd …/另一个文件夹 这个意思就是跳到上一层目录并进入那个目录下的文件夹
单纯的 $ cd 是默认为$ cd ~ 只会到主文件夹 主文件夹是用户文件夹,目录是在/home/nano 如果要去根目录的话就得到 $ cd /

pwd:显示目前的目录 【Print Working Directory】

如果在主文件夹,$的左侧不会从根目录开始显示路径,而是单纯的~ ,也就是从主文件夹开始显示路径。

mkdir:创建一个新的目录 【make directory】

假如你要创建一个目录为 /home/bird/testing/test1,最好/home/bird/testing都已经存在了,否则得要 $ mkdir -p /home/bird/testing/test1 才能帮你自动创建 希望你创建时没打错字母
$ mkdir -m 711 test2
设置权限用-m [ r4分w2分x1分]

rmdir:删除一个空的目录

只能删掉空文件夹,test1到4都是空文件夹 但只删test1的话会报错,因为里面有文件夹,此时加-p是逐层删除。如果要删有内容的文件夹得用rm指令 对,就那个梗
$ rmdir test
$ rmdir -p test1/test2/test3/test4


关于可执行文件路径的变量: $PATH

为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致
请下达“echo $PATH”来看看到底有哪些目录被定义出来了? echo有“显示、印出”的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以会显示出目前的 PATH !
PATH的路径用:隔开 。要添加新路径就

PATH=“${PATH}:/root”

用别处文件的指令就

$ /root/ls 直接用绝对路径指定该文件名
$ ./ls 如果目前在 /root 目录下,就用./ls来指定

6.2 文件与目录管理

cp 复制文件,创建链接文件 (就是快捷方式),比对两文件的新旧而予以更新, 以及复制整个目录

总之,由于 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:

  • 是否需要完整的保留来源文件的信息?
  • 来源文件是否为链接文件 (symbolic link file)?【看权限第一个位是不是l】
  • 来源文件是否为特殊的文件,例如 FIFO, socket 等?
  • 来源文件是否为目录?

知识点很细 建议重看鸟哥教程

rm删除文件

# rm -i bashrc*
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的文件名!
# 注意那个星号,代表的是 0 到无穷多个任意字符喔!而且可以放前面 补全前半部分。

mv 移动文件与目录,或更名

范例一:复制一文件,创建一目录,将文件移动到目录中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest
# 将某个文件移动到某个目录去,就是这样做!

范例二:将刚刚的目录名称更名为 mvtest2
[root@study tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~
# 其实在 Linux 下面还有个有趣的指令,名称为 rename ,
# 该指令专职进行多个文件名的同时更名,并非针对单一文件名变更,与mv不同。请man rename。

范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中
[root@study tmp]# cp ~/.bashrc bashrc1
[root@study tmp]# cp ~/.bashrc bashrc2
[root@study tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源文件或目录,则最后一个目标文件一定是“目录!”
# 意思是说,将所有的数据移动到该目录的意思!

6.3 文件内容查阅

file 可以看文件的类型

$ file ~/.bashrc
/root/.bashrc: ASCII text 【这个输出告诉我们是 ASCII 的纯文本文件

cat是显示整个文件的内容

cat [-AbEnTv] 文件 【Concatenate 】

选项与参数:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;

more 文件 也是可以看,但往回翻页不好用,所以还是用

less 文件

空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
方向键:可以用
/字串 :向下搜寻“字串”的功能;
?字串 :向上搜寻“字串”的功能;
n :往前找那个字串(与 ‘/ ’或 ‘? ’有关)
N :往后找那个字串(与 ‘/ ’或 ‘?’ 有关)
g :到第一个那个字串的位置;
G :到最后一个那个字串的位置 (注意大小写);
q :离开 less 这个程序;
用help还能看到其他一堆的快捷键

tail [-n number] 文件【取出后面几行】

选项与参数:
-n :后面接数字,代表显示几行。默认显示最后的10行

$ tail -n 100 wqfile 【显示文件的倒数100行内容】
$ tail -n +100 wqfile 【从文件的第100行开始显示到末尾】【head指令用的是 - 】

$ tail -f wqfile

-f :你想要让该文件有数据写入时就立刻显示到屏幕上, 就利用 -f 这个选项,要等到按下[ctrl]-c才会结束tail的侦测


我们在 ls 这个指令的介绍时,有稍微提到每个文件在linux下面都会记录许多的时间参数, 其实是有三个主要的变动时间,那么三个时间的意义是什么呢?

modification time (mtime): 当该文件的“内容数据”变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!

status time (ctime): 当该文件的“状态 (status)”改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。

access time (atime): 当“该文件的内容被取用”时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man_db.conf , 就会更新该文件的 atime 了。

$ touch 文件名

这个指令最常被使用的情况是:
创建一个空的文件;
将某个文件日期修订为目前 (mtime 与 atime)

6.4 补到前面去了

6.5 指令与文件的搜索

搜指令

$ which 指令名

找 PATH 内存着的目录 加个-a就列出全部 指令名不能用*替代啊,必须得是完整的指令名【可惜】

搜文件
通常 find 不很常用的!因为速度慢之外, 也很操硬盘!一般我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦! 为什么呢?因为 whereis 只找系统中某些特定目录下面的文件而已,locate 则是利用数据库来搜寻文件名,

whereis [-bmsu] 文件或目录名

选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件

locate 指令搜索文件可以只输入文件名的一部分,很好用,但不安装就用不了
执行updatedb 和locate命令,提示 -bash: updatedb: 未找到命令
遗憾的是 我连yum命令都没装

$ find [PATH] [option] [action]

可以按 账户/群组/文件大小/文件类型/文件权限/文件名的一部分/文件变动时间 来搜索

-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。

在这里插入图片描述
范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
$ find / -mtime 0
//0 代表目前的时间,所以时间范围是,从现在开始往前数24 小时

额 因为找到文件的时候只是普通地列出来,如果要看它们的权限的话就只能按下面这种格式及时输出。话说,管线不行吗?下次试试。
在这里插入图片描述

找出 /etc 下面,文件大小介于 50K 到 60K 之间的文件,并且将权限完整的列出 (ls -l):
$ find /etc -size +50k -a -size -60k -exec ls -l {} ;
注意到 -a ,那个 -a 是 and 的意思,为符合两者才算成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值