Linux 学习笔记

请注意:本文编写于 94 天前,最后修改于 68 天前,其中某些信息可能已经过时。

常用命令

格式:[功能:命令] -> [内部功能:命令]

  1. 注销:exit
  2. 显示目前所支持的语言:echo $LANG
  3. 显示日期与时间:date
  4. 显示日历:cal
  5. 简单好用的计算器:bc -> 退出:quit 取几位小数:scale=<位数>
  6. 更多在线命令手册:man <需要查询的命令> -> 查找:/ <关键词>
  7. 数据同步写入磁盘(关机前必备):sync
  8. 惯用的关机命令:shutdown
  9. 重启:reboot,halt,poweroff

图片来自鸟哥博客

图片来自鸟哥博客

  1. 切换执行等级:init

图片来自鸟哥博客

  1. 改变文件所属用户组:chgrp <用户组名> <文件名> -> -R:连同目录下的所有文件、目录
  2. 改变文件所有者:chown <账号名称> <文件名> -> -R:连同目录下的所有文件、目录
  3. 改变文件的权限:chmod <权限(两种方法)> <文件名> -> -R:连同目录下的所有文件、目录

图片来自鸟哥博客-数字设置权限

图片来自鸟哥博客-符号设置权限

  1. 复制文件:cp <源文件> <目标文件>
  2. 切换用户身份:su <用户名>
  3. 新建新目录:mkdir <目录名>
  4. 新建空文件:touch <文件名>
  5. 连接文件并在终端输出文件内容:cat <文件名>

常用热键

格式:[热键:功能]

  1. Tab :命令补全、文件补齐
  2. Ctrl + c :终止
  3. Ctrl + d :输入(输出)结束,也可以代替 exit

命令行基础

command(命令) -options(选项) parameter1(参数1) parameter2(参数2)

  1. 一行命令中第一个输入的部分绝对是 [命令(command)]或[可执行文件];
  2. 命令、选项、参数等这几个命令中间以空格来区分,不论几个空格 shell 都视为一个
  3. 按下 Enter 后命令立即执行,Enter 按键代表一行命令的开始启动;
  4. 命令太长的时候,可以用反斜杠(\)来转义 Enter 符号,使命令持续到下一行。

用户与用户组

Linux 用户身份与用户组记录的文件

Linux 系统当中,预设的情况下,所有的系统上的帐号与一般身份使用者,还有 root 的相关资讯,都是记录在 /etc/passwd 这个文件内的。至于个人的密码则是记录在 /etc/shadow 这个文件下。此外,Linux 所有的群组名称都纪录在 /etc/group 内!这三个文件可以说是 Linux 系统里面帐号、密码、群组信息的集中地啰!不要随便删除这三个文件啊!

Linux 文件权限概念

Linux 文件属性

图片来自鸟哥博客

上图为 root 用户终端输入 ls -al 后终端输出结果

第一列:代表这个文件的类型与权限(permission):

这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字元:

第一个字元代表这个文件是目录、文件或连接档等等:

当为 d 则是目录,例如上表文件名为 .config 的那一行;
当为 - 则是文件,例如上表文件名为 initial-setup-ks.cfg 那一行;
若是 l 则表示为连接档(link file);
若是 b 则表示为装置档里面的可供储存的周边设备(可随机存取装置);
若是 c 则表示为装置档里面的序列端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字元中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已:

第一组为文件拥有者可具备的权限,以 initial-setup-ks.cfg 那个文件为例,该文件的拥有者可以读写,但不可执行;
第二组为加入此群组之帐号的权限;
第三组为非本人且没有加入本群组之其他帐号的权限。

第二列:表示有多少文件名连接到此节点(i-node);

第三列:表示这个文件(或目录)的拥有者帐号;

第四列:表示这个文件的所属群组;

第五列:为这个文件的容量大小,预设单位为 bytes;

第六列:为这个文件的建档日期或者是最近的修改日期;

第七列:为该文件名(若文件名前面多了一个 . 则表示该文件为隐藏文件);

目录与文件的权限意义

权限对文件的重要性

文件是实际含有数据的地方,包括一般文字文件、数据库内容文件、二进位可执行文件(binary program)等等。因此,权限对于文件来说,他的意义是这样的:

r(read):可读取此一文件的实际内容,如读取文字文件的文字内容等;

w(write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);

x(execute):该文件具有可以被系统执行的权限。

可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦!因为在 Windows 底下一个文件是否具有执行的能力是是由扩展名来判断的,例如:.exe,.bat,.com 等等,但是在 Linux 底下,我们的文件是否能被执行,则是是由是否具有 x 这个权限来决定的!跟文件名是没有绝对的关系的!

当你对一个文件具有 w 权限时,你具有写入/编辑/新增/修改文件的内容的权限,但并不具备有删除该文件本身的权限!对于文件的 rwx 来说,主要都是针对文件的内容而言,与文件文件名的存在与否没有关系!因为文件记录的是实际的数据!

注意:一个文件有可执行权限不代表这个文件就一定能被执行成功,还需要看文件内有没有可以被执行的内容!

权限对目录的重要性

目录主要的内容在记录文件名清单,文件名与目录有强烈的关连!所以如果是针对目录时,rwx 是什么意义呢?

1. r: read contents in directory:

表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

2. w: modify contents of directory:

这个可写入的权限对目录来说,是很了不起的!因为他表示你具有异动该目录结构清单的权限,也就是底下这些权限:

  1. 建立新的文件与目录;
  2. 删除已经存在的文件与目录(不论该文件的权限为何!)
  3. 将已存在的文件或目录进行更名;
  4. 搬移该目录内的文件、目录位置。

总之,目录的 w 权限就与该目录底下的文件名异动有关就对了啦!

3. x: access directory:

目录只是记录文件名而已,不可以被执行,目录的 x 代表的是使用者能否进入该目录成为工作目录!所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入 Linux 时,你所在的目录就是你当下的工作目录。而变换目录的指令是 cd: change directory

图片来自鸟哥博客

Linux 文件种类与扩展名

文件种类

- :普通文件
d :目录
l :连接文件(类似于 Windows 下的快捷方式)
b :块设备文件(例如硬盘、软盘等)
c :字符设备文件(例如鼠标、键盘等,特征:一次性读取)
s :套接字,数据接口文件(通常被用在网络上的数据连接)
p :管道(FIFO,pipe),主要用于解决多个程序同时访问一个文件所造成的错误

Linux 目录配置

Linux 目录配置标准:FHS(Filesystem Hierarchy Standard)

FHS 依据档案系统使用的频繁与否与是否允许使用者随意更动,而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:

图片来自鸟哥博客

可分享的:可以分享给其他系统挂载使用的目录,所以包括执行档与使用者的邮件等数据,是能够分享给网络上其他主机挂载用的目录;

不可分享的:自己机器上面运作的装置档案或者是与程序有关的 socket 档案等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了。

不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。例如函式库、文件说明档、系统管理员所管理的主机服务设定档等等;

可变动的:经常改变的数据,例如登录档、一般用户可自行收受的新闻组等。

事实上,FHS 针对目录树构架仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

/root,根目录,与开机系统有关
/usrunix software resource,与软件安装/执行有关
/varvariable,与系统运作过程有关

去FHS官网了解更多

绝对路径与相对路径

除了需要特别注意的 FHS 目录配置外,在文件名部分我们也要特别注意!因为根据文件名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。这两种文件名/路径的写法依据是这样的:

绝对路径:由根目录(/)开始写起的文件名或目录名称,例如 /home/dmtsai/.bashrc
相对路径:相对于目前路径的文件名写法。例如:./home/dmtsai../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法

而你必须要了解,相对路径是以你当前所在路径的相对位置来表示的。举例来说,你目前在 /home 这个目录下,如果想要进入 /var/log 这个目录时,可以怎么写呢?

绝对路径:cd /var/log
相对路径:cd ../var/log

因为你在 /home 底下,所以要回到上一层(../)之后,才能继续往/var来移动的!特别注意这两个特殊的目录:

.:代表当前的目录,也可以使用 ./ 来表示;
..:代表上一层目录,也可以 ../ 来代表。
... 目录概念是很重要的,你常常会看到 cd .../command 之类的指令下达方式,就是代表上一层与目前所在目录的工作状态!

目录与路径

目录的相关操作

图片来自鸟哥博客