Linux学习笔记(长期更新 值得收藏!)

Linux

基础操作命令

显示日期 date

[dmtsai@study ~]$ date
Fri May 29 14:32:01 CST 2015

格式化输出

[dmtsai@study ~]$ date +%Y/%m/%d
2015/05/29
[dmtsai@study ~]$ date +%H:%M
14:33

显示日历 cal

[dmtsai@study ~]$ cal
May 2015
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

可接的语法:

[dmtsai@study ~]$ cal [month] [year]

计算器 bc

[dmtsai@study ~]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
_ <==这个时候, 光标会停留在这里等待你的输入

如果要输出小数点下位
数, 那么就必须要执行 scale=number , 那个number就是小数点位数

HotKey

Tab

[Tab] 接在一串指令的第一个字的后面, 则为“命令补全”;
[Tab] 接在一串指令的第二个字以后时, 则为“文件补齐”!
若安装 bash-completion 软件, 则在某些指令后面使用 [tab] 按键时, 可以进行“选项/参
数的补齐”功能!

Ctrl+C

中断目前程序

Ctrl+D

键盘输入结束( End Of File, EOF 或 End Of Input)

[shift]+{[PageUP]|[Page Down]}

翻页

man(manual)

当–help没有相关的操作时 可以使用 man [指令] 来查询操作

[dmtsai@study ~]$ man date

进入man指令的功能后, 你可以按下“空白键”往下翻页, 可以按下“ q ”按键来离开man的环境。

进入man指令后 会有第一行的信息

DATE( 1) User Commands DATE( 1

DATE 代表的是指令的名称

后面的1值得注意

代号代表内容
1使用者在shell环境中可以操作的指令或可可执行文件
2系统核心可调用的函数与工具等
3一些常用的函数( function) 与函数库( library) , 大部分为C的函数库( libc)
4设备文件的说明, 通常在/dev下的文件
5配置文件或者是某些文件的格式
6游戏( games)
7惯例与协定等, 例如Linux文件系统、 网络协定、 ASCII code等等的说明
8系统管理员可用的管理指令
9跟kernel有关的文件

man page常用按键

按键进行工作
回车向下翻一页
[Page Down]向下翻一页
[Page Up]向上翻一页
[Home]去到第一页
[End]去到最后一页
/string向“下”搜寻 string 这个字串, 如果要搜寻 vbird 的话, 就输入 /vbird
?string向“上”搜寻 string 这个字串
n, N利用 / 或 ? 来搜寻字串时, 可以用 n 来继续下一个搜寻 ( 不论是 / 或 ?) , 可以利用 N 来进行“反向”搜寻。 举例来说, 我以 /vbird 搜寻 vbird 字串, 那么 可以 n 继续往下查询, 用 N 往上查询。 若以 ?vbird 向上查询 vbird 字串, 那 我可以用 n 继续“向上”查询, 用 N 反向查询
q结束这次的 man page

info

info与man的用途其实差不多, 都是用来查询指令的用法或者是文件的格式。 但是与man page一口气输出一堆信息不同的是, info page则是将文件数据拆成一个一个的段落

[dmtsai@study ~]$ info info
File: info.info, Node: Top, Next: Getting Started, Up: ( dir)
Info: An Introduction
*********************
The GNU Project distributes most of its on-line manuals in the "Info
format", which you read using an "Info reader". You are probably using
an Info reader to read this now.
....( 中间省略) ....
If you are new to the Info reader and want to learn how to use it,
type the command 'h' now. It brings you to a programmed instruction
sequence. # 这一段在说明, 按下 h 可以有简易的指令说明! 很好用!
....( 中间省略) ....
* Menu:
* Getting Started:: Getting started using an Info reader.
* Advanced:: Advanced Info commands.
* Expert Info:: Info commands for experts.
* Index:: An index of topics, commands, and variables.
--zz-Info: ( info.info.gz) Top, 52 lines --Bot------------------------------------------
  • File: 代表这个info page的数据是来自info.info文件所提供的;
  • Node: 代表目前的这个页面是属于Top节点。 意思是info.info内含有很多信息, 而Top仅是info.info文件内的一个节点内容而已;
  • Next: 下一个节点的名称为Getting Started, 你也可以按“N”到下个节点去;
  • Up: 回到上一层的节点总揽画面, 你也可以按下“U”回到上一层;
  • Prev: 前一个节点。 但由于Top是info.info的第一个节点, 所以上面没有前一个节点的信息。

有用的文件documents

在/usr/share/doc 包含相关指令的详细介绍甚至是原理

文本编辑器nano

[dmtsai@study ~]$ nano text.txt

不管text.txt存在与否 均可正常打开(存在即打开 不存在即创建)

相关组合键

  • [ctrl]-G: 取得线上说明( help) , 很有用的!
  • [ctrl]-X: 离开naon软件, 若有修改过文件会提示是否需要储存喔!
  • [ctrl]-O: 储存盘案, 若你有权限的话就能够储存盘案了;
  • [ctrl]-R: 从其他文件读入数据, 可以将某个文件的内容贴在本文件中;
  • [ctrl]-W: 搜寻字串, 这个也是很有帮助的指令喔!
  • [ctrl]-C: 说明目前光标所在处的行数与列数等信息;
  • [ctrl]-_: 可以直接输入行号, 让光标快速移动到该行;
  • [alt]-Y: 校正语法功能打开或关闭( 按一下开、 再按一下关)
  • [alt]-M: 可以支持鼠标来移动光标的功能

Linux 使用者身份与群组记录的文件

在Linux系统当中, 默认的情况下, 所有的

系统上的帐号与一般身份使用者, root的相关信息, 都是记录在/etc/passwd这个文件内。

个人的密码记录在/etc/shadow这个文件下

Linux所有的群组名称都纪录在/etc/group内! 这三个文件
可以说是Linux系统里面帐号、 密码、 群组信息的集中地!

ls -al指令

[root@study ~]# ls -al

PS:需要在root用户下使用

列出所有的文件详细的权限与属性

文件属性

-rw-r--r--

文件属性描述一共由十位组成

第一位:

  • 当为[ d ]则是目录, 例如上表文件名为“.config”的那一行;

  • 当为[ - ]则是文件, 例如上表文件名为“initial-setup-ks.cfg”那一行;

  • 当是[ l ]则表示为链接文件( link file) ;

  • 当是[ b ]则表示为设备文件里面的可供储存的周边设备( 可随机存取设备)

  • 当是[ c ]则表示为设备文件里面的序列埠设备, 例如键盘、 鼠标( 一次性读取设备) 。

接下来的字符中, 以三个为一组, 且均为“rwx” 的三个参数的组合

  • [ r ]代表可读( read)
  • [ w ]代表可写( write)
  • [ x ]代表可执行( execute)

如果没有权限, 就会出现减号[ - ]

  • 第一组为“文件拥有者可具备的权限”
  • 第二组为“加入此群组之帐号的权限”;
  • 第三组为“非本人且没有加入本群组之其他帐号的权限”。

改变文件属性

  • chgrp : 改变文件所属群组(change group)
  • chown : 改变文件拥有者(change owner)
  • chmod : 改变文件的权限, SUID, SGID, SBIT等等的特性

改变文件所属群组

[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: `testing'

当群组testing不存在时就会报错即群组名称必须要在/etc/group文件内存在

改变文件拥有者

[root@study ~]# chown [-R] 帐号名称 文件或目录
[root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
选项与参数:
-R : 进行递回( recursive) 的持续变更, 亦即连同次目录下的所有文件都变更
范例: 将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例: 将 initial-setup-ks.cfg 的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg

chown也能单纯的修改所属群组!

例如

chown .sshd initial-setup-ks.cfg

上述命令使用情景:

当将一个文件复制 且给另一名使用者时:

[root@study ~]# cp .bashrc .bashrc_test
[root@study ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test

所以使用修改拥有者与群组使别的用户或群组可以使用

改变权限

数字类型改变文件权限

文件的权限字符为: “-rwxrwxrwx”

复习一下前面的知识 10位权限字符 抛开第一位 剩下9为每3位为一组
当为rwx时 >>4 + 2 +1 >> 7
所以当一个文件设置为777属性时 代表任何用户群组均可读写执行

下面是例子:

[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

Question:

当权限为-rwxr-xr–时 代表的是多少?(754)

PS:

常常我们以vim编辑一个shell的文字批处理文件后, 他的权限通常是 -rw-rw-r-- 也就是664

如果要将该文件变成可可执行文件, 并且不要让其他人修
改此一文件的话, 那么就需要-rwxr-xr-x这样的权限, 此时就得要下达: “ chmod 755 test.sh ”的指令

符号类型改变文件权限

本上就九个权限分别是( 1) user ( 2) group ( 3) others三种身份

可以借由u, g, o来代表三种身份的权限

a 则代表 all 亦即全部的身份

假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时

  • user ( u) : 具有可读、 可写、 可执行的权限;
  • group 与 others ( g/o) : 具有可读与执行的权限。

所以就是:

[root@study ~]# chmod u=rwx,go=rx .bashrc
# 注意喔! 那个 u=rwx,go=rx 是连在一起的, 中间并没有任何空白字符!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc

假如是“ -rwxr-xr-- ”这样的权限

使用“ chmod u=rwx,g=rx,o=r filename ”来设置

[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

如要拿掉全部人的可执行权限, 则: s

[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc #还原权限

Linux FHS

Filesystem Hierarchy Standard ( FHS) 标准 主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、 操作系统制作者、 以及想要维护系统的
使用者, 都能够遵循FHS的标准。

目录应放置文件内容
第一部 份: FHS要求必须 要存在的 目录
/bin系统有很多放置可执行文件的目录, 但/bin比较特殊。 因为/bin放置的是在 单人维护模式下还能够被操作的指令。 在/bin下面的指令可以被root与一般 帐号所使用, 主要有: cat, chmod, chown, date, mv, mkdir, cp, bash等等常 用的指令
/boot这个目录主要在放置开机会使用到的文件, 包括Linux核心文件以及开机菜 单与开机所需配置文件等等。 Linux kernel常用的文件名为: vmlinuz, 如果 使用的是grub2这个开机管理程序, 则还会存在/boot/grub2/这个目录
/dev在Linux系统上, 任何设备与周边设备都是以文件的型态存在于这个目录当 中的。 你只要通过存取这个目录下面的某个文件, 就等于存取某个设备 比较重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/loop, /dev/sd等等
/etc系统主要的配置文件几乎都放置在这个目录内, 例如人员的帐号密码档、 各种服务的启始档等等。 一般来说, 这个目录下的各文件属性是可以让一般 使用者查阅的, 但是只有root有权力修改。 FHS建议不要放置可可执行文件 ( binary) 在这个目录中。 比较重要的文件有: /etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue 等等。 另外 FHS 还规范几个重要的目录 最好要存在 /etc/ 目录下: /etc/opt( 必要) : 这个目录在放置第三方协力 软件 /opt 的相关配置文件 /etc/X11/( 建议) : 与 X Window 有关的各种配 置文件都在这里, 尤其是 xorg.conf 这个 X Server 的配置文件。 /etc/sgml/ ( 建议) : 与 SGML 格式有关的各项配置文件 /etc/xml/( 建议) : 与 XML 格式有关的各项配置文件
/lib系统的函数库非常的多, 而/lib放置的则是在开机时会用到的函数库, 以及 在/bin或/sbin下面的指令会调用的函数库而已。 什么是函数库呢? 你可以将 他想成是“外挂”, 某些指令必须要有这些“外挂”才能够顺利完成程序的执行 之意。 另外 FSH 还要求下面的目录必须要存在: /lib/modules/: 这个目录 主要放置可抽换式的核心相关模块( 驱动程序)
/mediamedia是“媒体”的英文, 顾名思义, 这个/media下面放置的就是可移除的设备 包括软盘、 光盘、 DVD等等设备都暂时挂载于此。 常见的文件名 有: /media/floppy, /media/cdrom等等。
/mnt如果你想要暂时挂载某些额外的设备, 一般建议你可以放置到这个目录中。 在古早时候, 这个目录的用途与/media相同 只是有了/media之后, 这个 目录就用来暂时挂载用了。
/opt这个是给第三方协力软件放置的目录。 什么是第三方协力软件? 举例来说, KDE这个桌面管理系统是一个独立的计划, 不过他可以安装到Linux系 统中, 因此KDE的软件就建议放置到此目录下了。 另外, 如果你想要自行 安装额外的软件( 非原本的distribution提供的) , 那么也能够将你的软件安 装到这里来。 不过, 以前的Linux系统中, 我们还是习惯放置在/usr/local目录下
/run早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录 下, 新版的 FHS 则规范到 /run 下面。 由于 /run 可以使用内存来仿真, 因 此性能上会好很多
Linux有非常多指令是用来设置系统环境的, 这些指令只有root才能够利用 来“设置”系统, 其他使用者最多只能用来“查询”而已。 放在/sbin下面的为开 机过程中所需要的, 里面包括了开机、 修复、 还原系统所需要的指令。 至于某些服务器软件程序, 一般则放置到/usr/sbin/当中。 至于本机自行安装的 软件所产生的系统可执行文件( system binary) , 则放置到/usr/local/sbin/ 当中了。 常见的指令包括: fdisk, fsck, ifconfig, mkfs等等。
/srvsrv可以视为“service”的缩写, 是一些网络服务启动之后, 这些服务所需要 取用的数据目录。 常见的服务例如WWW, FTP等等。 举例来说, WWW服 务器需要的网页数据就可以放置在/srv/www/里面。 不过, 系统的服务数据 如果尚未要提供给网际网络任何人浏览的话, 默认还是建议放置到 /var/lib 下面即可。
/tmp这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录 是任何人都能够存取的, 所以你需要定期的清理一下。 当然, 重要数据不可 放置在此目录啊! 因为FHS甚至建议在开机时, 应该要将/tmp下的数据都删除
/usr
/var
第二部 份: FHS 建议可以 存在的目录
/home这是系统默认的使用者主文件夹( home directory) 。 在你新增一个一般使 用者帐号时, 默认的使用者主文件夹都会规范到这里来。 比较重要的是, 主文件夹有两种代号: ~: 代表目前这个使用者的主文件夹 ~dmtsai : 则代表 dmtsai 的主文件!
/lib用来存放与 /lib 不同的格式的二进制函数库, 例如支持 64 位的 /lib64 函数 库等
/root系统管理员( root) 的主文件夹。 之所以放在这里, 是因为如果进入单人维 护模式而仅挂载根目录时, 该目录就能够拥有root的主文件夹, 所以我们会 希望root的主文件夹与根目录放置在同一个分区中。

事实上FHS针对根目录所定义的标准就仅有上面的

不过我们的Linux下面还有许多目录你也需要了解一下的。 下面是几个在Linux当中也是非常重要的目录 :

目录放置文件内容
/lost+found这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录, 目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。 不过如果使用的是 xfs 文件系统的话, 就不会存在这个目录了!
/proc这个目录本身是一个“虚拟文件系统( virtual filesystem) ” 他放置的数 据都是在内存当中, 例如系统核心、 行程信息( process) 、 周边设备的 状态及网络状态等等。 因为这个目录下的数据都是在内存当中, 所以本身 不占任何硬盘空间 比较重要的文件例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。
/sys这个目录其实跟/proc非常类似, 也是一个虚拟的文件系统, 主要也是记录 核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦 测到的硬件设备信息等等。 这个目录同样不占硬盘容量

目录的相关操作

  • cd: 变换目录
  • pwd: 显示目前的目录
  • mkdir: 创建一个新的目录
  • rmdir: 删除一个空的目录

cd

cd( change directory, 变换目录)

我们知道dmtsai这个使用者的主文件夹是/home/dmtsai/, 而root主文件夹则是/root/, 假设以root身份在 Linux系统中, 那么简单的说明一下这几个特殊的目录的意义是:

[dmtsai@study ~]$ su - # 先切换身份成为 root
[root@study ~]# cd [相对路径或绝对路径]
# 最重要的就是目录的绝对路径与相对路径, 还有一些特殊目录的符号
[root@study ~]# cd ~dmtsai
# 代表去到 dmtsai 这个使用者的主文件夹, 亦即 /home/dmtsai
[root@study dmtsai]# cd ~
# 表示回到自己的主文件夹, 亦即是 /root 这个目录
[root@study ~]# cd
# 没有加上任何路径, 也还是代表回到自己主文件夹的意思
[root@study ~]# cd ..
# 表示去到目前的上层目录, 亦即是 /root 的上层目录的意思;
[root@study /]# cd -
# 表示回到刚刚的那个目录, 也就是 /root 
[root@study ~]# cd /var/spool/mail
# 这个就是绝对路径的写法 直接指定要去的完整路径名称
[root@study mail]# cd ../postfix
# 这个是相对路径的写法, 由/var/spool/mail 去到/var/spool/postfix 就这样写

pwd

pwd(Print Working Directory,显示目前所在的目录)

[root@study ~]# pwd [-P]
选项与参数:
-P : 显示出确实的路径, 而非使用链接 ( link) 路径。
范例: 单纯显示出目前的工作目录:
[root@study ~]# pwd
/root 显示出目录
范例: 显示出实际的工作目录, 而非链接文件本身的目录名而已
[root@study ~]# cd /var/mail 注意, /var/mail是一个链接文件
[root@study mail]# pwd
/var/mail 列出目前的工作目录
[root@study mail]# pwd -P
/var/spool/mail
[root@study mail]# ls -ld /var/mail
lrwxrwxrwx. 1 root root 10 May 4 17:51 /var/mail -> spool/mail
# 看到这里应该知道为啥了吧? 因为 /var/mail 是链接文件, 链接到 /var/spool/mail
# 所以, 加上 pwd -P 的选项后, 会不以链接文件的数据显示, 而是显示正确的完整路径

mkdir

mkdir ( make directory,创建新目录)

[root@study ~]# mkdir [-mp] 目录名称
选项与参数:
-m : 设置文件的权限 直接设置, 不需要看默认权限 ( umask) 
-p : 帮助你直接将所需要的目录( 包含上层目录) 递回创建起来
范例: 请到/tmp下面尝试创建数个新目录看看:
[root@study ~]# cd /tmp
[root@study tmp]# mkdir test 创建一名为 test 的新目录
[root@study tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory
# 系统告诉我们, 没可能创建这个目录 就是没有目录才要创建的 why?
[root@study tmp]# mkdir -p test1/test2/test3/test4
# 原来是要建 test4 上层没先建 test3 之故 加了这个 -p 的选项, 可以自行帮你创建多层目录
范例: 创建权限为rwx--x--x的目录
[root@study tmp]# mkdir -m 711 test2
[root@study tmp]# ls -ld test*
drwxr-xr-x. 2 root root 6 Jun 4 19:03 test
drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
# 仔细看上面的权限部分, 如果没有加上 -m 来强制设置属性, 系统会使用默认属性。
# 那么你的默认属性为何? 这要通过下面介绍的 [umask](../Text/index.html#umask)了解

rmdir

删除“空”的目录

[root@study ~]# rmdir [-p] 目录名称
选项与参数:
-p : 连同“上层”“空的”目录也一起删除
范例: 将于mkdir范例中创建的目录( /tmp下面) 删除掉!
[root@study tmp]# ls -ld test* 看看有多少目录存在?
drwxr-xr-x. 2 root root 6 Jun 4 19:03 test
drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
[root@study tmp]# rmdir test 可直接删除掉, 没问题
[root@study tmp]# rmdir test1 因为尚有内容, 所以无法删除!
rmdir: failed to remove ‘test1’: Directory not empty
[root@study tmp]# rmdir -p test1/test2/test3/test4
[root@study tmp]# ls -ld test* 看看, 下面的输出中test与test1不见了!
drwx--x--x. 2 root root 6 Jun 4 19:05 test2
# 利用 -p 这个选项, 立刻就可以将 test1/test2/test3/test4 一次删除~
# 不过要注意的是, 这个 rmdir 仅能“删除空的目录”

那如果要将所有目录下的东西都杀掉呢?

这个时候就必须使用“ rm -r test ”

文件与目录管理

文件与目录的检视: ls

[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称..
选项与参数:
-a : 全部的文件, 连同隐藏文件( 开头为 . 的文件) 一起列出来( 常用)
-A : 全部的文件, 连同隐藏文件, 但不包括 ... 这两个目录
-d : 仅列出目录本身, 而不是列出目录内的文件数据( 常用)
-f : 直接列出结果, 而不进行排序 ( ls 默认会以文件名排序! )
-F : 根据文件、 目录等信息, 给予附加数据结构, 例如:
*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h : 将文件大小以人类较易读的方式( 例如 GB, KB 等等) 列出来;
-i : 列出 inode 号码, inode 的意义下一章将会介绍;
-l : 长数据串行出, 包含文件的属性与权限等等数据; ( 常用)
-n : 列出 UID 与 GID 而非使用者与群组的名称 ( UID与GID会在帐号管理提到! )
-r : 将排序结果反向输出, 例如: 原本文件名由小到大, 反向则为由大到小;
-R : 连同子目录内容一起列出来, 等于该目录下的所有文件都会显示出来;
-S : 以文件大小大小排序, 而不是用文件名排序;
-t : 依时间排序, 而不是用文件名。
--color=never : 不要依据文件特性给予颜色显示;
--color=always : 显示颜色
--color=auto : 让系统自行依据设置来判断是否给予颜色
--full-time : 以完整时间模式 ( 包含年、 月、 日、 时、 分) 输出
--time={atime,ctime} : 输出 access 时间或改变权限属性时间 ( ctime)
而非内容变更时间 ( modification time)

复制、 删除与移动: cp, rm, mv

cp
[root@study ~]# cp [-adfilprsu] 来源文件( source) 目标文件( destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a : 相当于 -dr --preserve=all 的意思, 至于 dr 请参考下列说明; ( 常用)
-d : 若来源文件为链接文件的属性( link file) , 则复制链接文件属性而非文件本身;
-f : 为强制( force) 的意思, 若目标文件已经存在且无法打开, 则移除后再尝试一次;
-i : 若目标文件( destination) 已经存在时, 在覆盖时会先询问动作的进行( 常用)
-l : 进行硬式链接( hard link) 的链接文件创建, 而非复制文件本身;
-p : 连同文件的属性( 权限、 用户、 时间) 一起复制过去, 而非使用默认属性( 备份常用) ;
-r : 递回持续复制, 用于目录的复制行为; ( 常用)
-s : 复制成为符号链接文件 ( symbolic link) , 亦即“捷径”文件;
-u : destination 比 source 旧才更新 destination, 或 destination 不存在的情况下才复制。
--preserve=all : 除了 -p 的权限相关参数外, 还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的, 如果来源文件有两个以上, 则最后一个目的文件一定要是“目录”才行!

rm
[root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f : 就是 force 的意思, 忽略不存在的文件, 不会出现警告讯息;
-i : 互动模式, 在删除前会询问使用者是否动作
-r : 递回删除啊! 最常用在目录的删除了! 这是非常危险的选项
mv
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f : force 强制的意思, 如果目标文件已经存在, 不会询问而直接覆盖;
-i : 若目标文件 ( destination) 已经存在时, 就会询问是否覆盖!
-u : 若目标文件已经存在, 且 source 比较新, 才会更新 ( update)

取得路径的文件名称与目录名称

[root@study ~]# basename /etc/sysconfig/network
network			很简单! 就取得最后的文件名~
[root@study ~]# dirname /etc/sysconfig/network
/etc/sysconfig  取得的变成目录名了!

文件内容查阅

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示, 可以看出 tac 是 cat 的倒着写!
  • nl 显示的时候, 顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似, 但是比 more 更好的是, 他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行
  • od 以二进制的方式读取文件内容!

直接检视文件内容

cat
[root@study ~]# cat [-AbEnTv]
选项与参数:
-A : 相当于 -vET 的整合选项, 可列出一些特殊字符而不是空白而已;
-b : 列出行号, 仅针对非空白行做行号显示, 空白行不标行号!
-E : 将结尾的断行字符 $ 显示出来;
-n : 打印出行号, 连同空白行也会有行号, 与 -b 的选项不同;
-T : 将 [tab] 按键以 ^I 显示出来;
-v : 列出一些看不出来的特殊字符
tac ( 反向列示)
cat:
[root@study ~]# cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
tac:
[root@study ~]# tac /etc/issue
Kernel \r on an \m
\S
nl ( 添加行号打印)
[root@study ~]# nl [-bnw] 文件
选项与参数:
-b : 指定行号指定的方式, 主要有两种:
-b a : 表示不论是否为空行, 也同样列出行号( 类似 cat -n) ;
-b t : 如果有空行, 空的那一行不要列出行号( 默认值) ;
-n : 列出行号表示的方法, 主要有三种:
-n ln : 行号在屏幕的最左方显示;
-n rn : 行号在自己字段的最右方显示, 且不加 0 ;
-n rz : 行号在自己字段的最右方显示, 且加 0 ;
-w : 行号字段的占用的字符数

可翻页检视

more ( 一页一页翻动)
[root@study ~]# more /etc/man_db.conf
###
This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath( 5) man page.
#.
....( 中间省略) .....
--More--( 28%) 重点在这一行! 你的光标也会在这里等待你的指令

基本按键 指令:

  • 空白键 ( space) : 代表向下翻一页;
  • Enter : 代表向下翻“一行”;
  • /字串 : 代表在这个显示的内容当中, 向下搜寻“字串”这个关键字;
  • :f : 立刻显示出文件名以及目前显示的行数;
  • q : 代表立刻离开 more , 不再显示该文件内容。
  • b 或 [ctrl]-b : 代表往回翻页, 不过这动作只对文件有用, 对管线无用。

要离开 more 这个指令的显示工作, 可以按下 q 就能够离开了

less ( 一页一页翻动)
[root@study ~]# less /etc/man_db.conf
###
This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath( 5) man page.
#.
....( 中间省略) .....
:  这里可以等待你输入指令!

使用了 less 时, 就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件

而在 more 的时候, 我们并没有办法向前面翻, 只能往后面看

基本按键指令:

  • 空白键 : 向下翻动一页;
  • [pagedown]: 向下翻动一页;
  • [pageup] : 向上翻动一页;
  • /字串 : 向下搜寻“字串”的功能;
  • ?字串 : 向上搜寻“字串”的功能;
  • n : 重复前一个搜寻 ( 与 / 或 ? 有关! )
  • N : 反向的重复前一个搜寻 ( 与 / 或 ? 有关! )
  • g : 前进到这个数据的第一行去;
  • G : 前进到这个数据的最后一行去 ( 注意大小写) ;
  • q : 离开 less 这个程序;

数据截取

head ( 取出前面几行)
[root@study ~]# head [-n number] 文件
选项与参数:
-n : 后面接数字, 代表显示几行的意思
[root@study ~]# head /etc/man_db.conf
# 默认的情况中, 显示前面十行! 若要显示前 20 行, 就得要这样:
[root@study ~]# head -n 20 /etc/man_db.conf
范例: 如果后面100行的数据都不打印, 只打印/etc/man_db.conf的前面几行, 该如何是好?
[root@study ~]# head -n -100 /etc/man_db.conf

PS:

上面范例的-n -100时, 代表列前的所有行数, 但不包括后面100行。 举例来说 CentOS 7.1 的 /etc/mandb.conf 共有131行,则上述的指令“head -n -100 /etc/man_db.conf” 就会列出前面31行, 后面100行不会打印出来了  
tail ( 取出后面几行)
[root@study ~]# tail [-n number] 文件
选项与参数:
-n : 后面接数字, 代表显示几行的意思
-f : 表示持续侦测后面所接的文件名, 要等到按下[ctrl]-c才会结束tail的侦测
[root@study ~]# tail /etc/man_db.conf
# 默认的情况中, 显示最后的十行! 若要显示最后的 20 行, 就得要这样:
[root@study ~]# tail -n 20 /etc/man_db.conf
范例一: 如果不知道/etc/man_db.conf有几行, 却只想列出100行以后的数据时?
[root@study ~]# tail -n +100 /etc/man_db.conf
范例二: 持续侦测/var/log/messages的内容
[root@study ~]# tail -f /var/log/messages
<==要等到输入[crtl]-c之后才会离开tail这个指令的侦测!

非纯文本文件: od

当我们想要查阅非文本文件, 举例来说, 例如 /usr/bin/passwd 这个可执行文件的内容时, 又该如何去读出信息呢? 事实上,由于可执行文件通常是 binary file , 使用上头提到的指令来读取他的内容时, 确实会产生类似乱码的数据 那怎么办? 没关系, 我们可以利用 od 这个指令来读取

[root@study ~]# od [-t TYPE] 文件
选项或参数:
-t : 后面可以接各种“类型 ( TYPE) ”的输出, 例如:
a : 利用默认的字符来输出;
c : 使用 ASCII 字符来输出
d[size] : 利用十进制( decimal) 来输出数据, 每个整数占用 size Bytes ;
f[size] : 利用浮点数值( floating) 来输出数据, 每个数占用 size Bytes ;
o[size] : 利用八进位( octal) 来输出数据, 每个整数占用 size Bytes ;
x[size] : 利用十六进制( hexadecimal) 来输出数据, 每个整数占用 size Bytes ;

修改文件时间或创建新文件: touch

在Linux中 一个文件会被记录很多时间参数 其中有三个重要的时间参数:

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

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

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

    atime 了

但是在默认的情况下, ls 显示出来的是该文件的 mtime , 也就是这个文件的内容上次被更动的时间

文件的时间是很重要的, 因为, 如果文件的时间误判的话, 可能会造成某些程序无法顺利的运行

但是有时候我们会发现 一个文件的时间来自未来!那就需要使用touch指令来修改了

[root@study ~]# touch [-acdmt] 文件
选项与参数:
-a : 仅修订 access time;
-c : 仅修改文件的时间, 若该文件不存在则不创建新文件;
-d : 后面可以接欲修订的日期而不用目前的日期, 也可以使用 --date="日期或时间"
-m : 仅修改 mtime ;
-t : 后面可以接欲修订的时间而不用目前的时间, 格式为[YYYYMMDDhhmm]
范例一: 新建一个空的文件并观察时间
[dmtsai@study ~]# cd /tmp
[dmtsai@study tmp]# touch testtouch
[dmtsai@study tmp]# ls -l testtouch
-rw-rw-r--. 1 dmtsai dmtsai 0 Jun 16 00:45 testtouch
# 注意到, 这个文件的大小是 0  在默认的状态下, 如果 touch 后面有接文件,
# 则该文件的三个时间 ( atime/ctime/mtime) 都会更新为目前的时间。 若该文件不存在,
# 则会主动的创建一个新的空的文件 例如上面这个例子
范例二: 将 ~/.bashrc 复制成为 bashrc, 假设复制完全的属性, 检查其日期
[dmtsai@study tmp]# cp -a ~/.bashrc bashrc
[dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
Tue Jun 16 00:49:24 CST 2022
-rw-r--r--. 1 dmtsai dmtsai 231 Mar 6 06:06 bashrc <==这是 mtime
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 15 23:44 bashrc <==这是 atime
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:47 bashrc <==这是 ctime

“ll”这个指令( 两个英文L的小写) , 这个指令其实就是“ls -l”的意思, ll本身不存在, 是被“做出来”的一个命令别名

分号“ ; ”则代表连续指令的下达

touch 这个指令最常被使用的情况是 :

  • 创建一个空的文件;
  • 将某个文件日期修订为目前 ( mtime 与 atime)

文件与目录的默认权限与隐藏权限

文件默认权限: umask

[root@study ~]# umask
0022
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

要理解这个命令 首先我们需要知道 在Linux中 当我们要创建文件或目录时,默认的情况是:

  • 若使用者创建为**“文件”**则默认“没有可执行( x ) 权限”, 亦即只有 rw 这两个项目, 也就是最大为 666 分, 默认权限如下: -rw-rw-rw-
  • 若使用者创建为**“目录”**, 则由于 x 与是否可以进入此目录有关, 因此默认为所有权限均开
    放, 亦即为 777 分, 默认权限如下: drwxrwxrwx

而我们示例中的umask 0022指的是在基础权限的情况下减去相应的权限:

  • 当要拿掉权限就是4
  • 当要拿掉权限就是2
  • 当要拿掉执行权限就是1
  • 当要拿掉 读与写权限就是6

对应的权限说明在前面已经介绍过

所以最终0022就是:

权限的第一位保持默认 拥有者权限保持默认 用户组拿掉写的权限 其他用户也拿掉写的权限

文件隐藏属性

chattr ( 设置文件隐藏属性)
[root@study ~]# chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ : 增加某一个特殊参数, 其他原本存在参数则不动。
- : 移除某一个特殊参数, 其他原本存在参数则不动。
= : 设置一定, 且仅有后面接的参数
A : 当设置了 A 这个属性时, 若你有存取此文件( 或目录) 时, 他的存取时间 atime 将不会被修改,
可避免 I/O 较慢的机器过度的存取磁盘。 ( 目前建议使用文件系统挂载参数处理这个项目)
S : 一般文件是非同步写入磁盘的( 原理请参考[前一章sync](../Text/index.html#sync)的说明) , 如果加上 S 这个属性时,
当你进行任何文件的修改, 该更动会“同步”写入磁盘中。
a : 当设置 a 之后, 这个文件将只能增加数据, 而不能删除也不能修改数据, 只有root 才能设置这属性
c : 这个属性设置之后, 将会自动的将此文件“压缩”, 在读取的时候将会自动解压缩,
但是在储存的时候, 将会先进行压缩后再储存( 看来对于大文件似乎蛮有用的! )
d : 当 dump 程序被执行的时候, 设置 d 属性将可使该文件( 或目录) 不会被 dump 备份
i : 这个 i 可就很厉害了! 他可以让一个文件“不能被删除、 改名、 设置链接也无法写入或新增数据! ”
对于系统安全性有相当大的助益! 只有 root 能设置此属性
s : 当文件设置了 s 属性时, 如果这个文件被删除, 他将会被完全的移除出这个硬盘空间,
所以如果误删了, 完全无法救回来了
u : 与 s 相反的, 当使用 u 来设置文件时, 如果该文件被删除了, 则数据内容其实还存在磁盘中,
可以使用来救援该文件喔!
注意1: 属性设置常见的是 a 与 i 的设置值, 而且很多设置值必须要身为 root 才能设置
注意2: xfs 文件系统仅支持 AadiS 而已
lsattr ( 显示文件隐藏属性)
[root@study ~]# lsattr [-adR] 文件或目录
选项与参数:
-a : 将隐藏文件的属性也秀出来;
-d : 如果接的是目录, 仅列出目录本身的属性而非目录内的文件名;
-R : 连同子目录的数据也一并列出来

文件特殊权限: SUID, SGID, SBIT

Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时, 例如 /usr/bin/passwd 这个文件的权限状态: “-rwsr-xr-x”, 此时就被称为 Set UID, 简称为 SUID 的特殊权限。 基本上SUID有这样的限制与功能 :

  • SUID 权限仅对二进制程序( binary program) 有效;
  • 执行者对于该程序需要具有 x 的可执行权限;
  • 本权限仅在执行该程序的过程中有效 ( run-time) ;
  • 执行者将具有该程序拥有者 ( owner) 的权限
Set GID

当 s 标志在文件拥有者的 x 项目为 SUID, 那 s 在群组的 x 时则称为 Set GID

与 SUID 不同的是, SGID 可以针对文件或目录来设置 ,SGID 有如下的功能

  • SGID 对二进制程序有用;
  • 程序执行者对于该程序来说, 需具备 x 的权限;
  • 执行者在执行的过程中将会获得该程序群组的支持!
Sticky Bit

SBIT 目前只针对目录有效 SBIT 对于目录的作用是:

  • 当使用者对于此目录具有 w, x 权限, 亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时, 仅有自己与 root 才有权力删除该文件

如果在这三个数字之前再加上一个数字的话, 最前面的那个数字就代表这几个权限了

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

假设要将一个文件权限改为“-rwsr-xr-x”时, 由于 s 在使用者权限中, 所以是 SUID , 因此,
在原先的 755 之前还要加上 4 , 也就是: “ chmod 4755 filename ”来设置

观察文件类型: file

[root@study ~]# file ~/.bashrc
/root/.bashrc: ASCII text  告诉我们是 ASCII 的纯文本文件
[root@study ~]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 ( SYSV) , dynamically
linked ( uses shared libs) , for GNU/Linux 2.6.32,
BuildID[sha1]=0xbf35571e607e317bf107b9bcf65199988d0ed5ab, stripped
# 可执行文件的数据可就多的不得了 包括这个文件的 suid 权限、 相容于 Intel x86-64 等级的硬件平台
# 使用的是 Linux 核心 2.6.32 的动态函数库链接等等。
[root@study ~]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: data   这是 data 文件

指令与文件的搜寻

指令文件名的搜寻

which ( 寻找“可执行文件”)

[root@study ~]# which [-a] command
选项或参数:
-a : 将所有由 PATH 目录中可以找到的指令均列出, 而不止第一个被找到的指令名称

文件文件名的搜寻

whereis ( 由一些特定的目录中寻找文件文件名)

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

locate / updatedb

[root@study ~]# locate [-ir] keyword
选项与参数:
-i : 忽略大小写的差异;
-c : 不输出文件名, 仅计算找到的文件数量
-l : 仅输出几行的意思, 例如输出五行则是 -l 5
-S : 输出 locate 所使用的数据库文件的相关信息, 包括该数据库纪录的文件/目录数量等
-r : 后面可接正则表达式的显示方式

  • updatedb: 根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名, 并更新/var/lib/mlocate 内的数据库文件;
  • locate: 依据 /var/lib/mlocate 内的数据库记载, 找出使用者输入的关键字文件名

find

[root@study ~]# find [PATH] [option] [action]
选项与参数:
1\. 与时间有关的选项: 共有 -atime, -ctime 与 -mtime , 以 -mtime 说明
-mtime n : n 为数字, 意义为在 n 天之前的“一天之内”被更动过内容的文件;
-mtime +n : 列出在 n 天之前( 不含 n 天本身) 被更动过内容的文件文件名;
-mtime -n : 列出在 n 天之内( 含 n 天本身) 被更动过内容的文件文件名。
-newer filefile 为一个存在的文件, 列出比 file 还要新的文件文件名
选项与参数:
2\. 与使用者或群组名称有关的参数:
-uid n : n 为数字, 这个数字是使用者的帐号 ID, 亦即 UID , 这个 UID 是记录在
/etc/passwd 里面与帐号名称对应的数字。 这方面我们会在第四篇介绍。
-gid n : n 为数字, 这个数字是群组名称的 ID, 亦即 GID, 这个 GID 记录在
/etc/group, 相关的介绍我们会第四篇说明~
-user name : name 为使用者帐号名称喔! 例如 dmtsai
-group name: name 为群组名称喔, 例如 users ;
-nouser : 寻找文件的拥有者不存在 /etc/passwd 的人!
-nogroup : 寻找文件的拥有群组不存在于 /etc/group 的文件!
当你自行安装软件时, 很可能该软件的属性当中并没有文件拥有者,
这是可能的! 在这个时候, 就可以使用 -nouser 与 -nogroup 搜寻
选项与参数:
3\. 与文件权限及名称有关的参数:
-name filename: 搜寻文件名称为 filename 的文件;
-size [+-]SIZE: 搜寻比 SIZE 还要大( +) 或小( -) 的文件。 这个 SIZE 的规格有:
c: 代表 Byte, k: 代表 1024Bytes。 所以, 要找比 50KB
还要大的文件, 就是“ -size +50k ”
-type TYPE : 搜寻文件的类型为 TYPE 的, 类型主要有: 一般正规文件 ( f) , 设备文件 ( b, c) ,
目录 ( d) , 链接文件 ( l) , socket ( s) , 及 FIFO ( p) 等属性。
-perm mode : 搜寻文件权限“刚好等于” mode 的文件, 这个 mode 为类似 chmod
的属性值, 举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode : 搜寻文件权限“必须要全部囊括 mode 的权限”的文件, 举例来说,
我们要搜寻 -rwxr--r-- , 亦即 0744 的文件, 使用 -perm -0744,
当一个文件的权限为 -rwsr-xr-x , 亦即 4755 时, 也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm /mode : 搜寻文件权限“包含任一 mode 的权限”的文件, 举例来说, 我们搜寻
-rwxr-xr-x , 亦即 -perm /755 时, 但一个文件属性为 -rw-------
也会被列出来, 因为他有 -rw.... 的属性存在!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值