Linux指令
1.目录与路径
. | 本层目录 |
---|---|
.. | 上一层目录 |
- | 前一个目录(历史) |
~ | 当前用户身份目录 |
~account | account这个用户的home目录 |
cd | 变换目录 |
---|---|
pwd | 显示当前目录路径 |
mkdir | 建立新的目录 |
rmdir | 删除一个空的目录 |
2.文件与目录管理
(1) ls 文件目录检查
选项与参数:
-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)
范例:
将家目录下的所有文件列出来(含属性与隐藏文件)
1 | ls -al~ |
完整的呈现文件的修改时间 (modification time)
1 | ls -al --full-time ~ |
(2)复制、删除与移动
cp | 复制文件或者目录 |
---|---|
rm | 删除 |
mv | 移动 |
cp(复制文件或者目录)
cp [-adfilprsu] 来源文件(source) 目标文件(destination)
选项与参数:
-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 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!
范例:
把new/1.txt复制到当前目录.
1 | cp new/1.txt . |
.为当前目录的意思,执行之后你会发现在当前目录多了一个1.txt,在/new目录中还留着一个1.txt
rm (移除文件或者目录)
rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
范例一:
将刚刚在 cp 的范例中建立的 bashrc 删除掉
1 | cd /tmp |
范例二:
透过通配符*的帮忙,将/tmp 底下开头为 bashrc 的档名通通删除:
1 | rm -i bashrc* |
注意那个星号,代表的是 0 到无穷多个任意字符喔!很好用的东西!
如果想删除目录下的所有jpg图像文件的话可以使用:
1 | rm -i *.jpg |
范例三:
将 cp 范例中所建立的 /tmp/etc/ 这个目录删除掉!
1 | rm -r /tmp/etc |
不管etc里面是否还有文件或者目录,直接删掉
mv(移动文件与目录,或更名)
1 | mv [-fiu] source destination |
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)
范例一:
复制一文件,建立一目录,将文件移动到目录中
1 | cd /tmp |
cp相当与负责,mv相当与剪切
范例二:
将刚刚的目录名称更名为 mvtest2
1 | mv mvtest mvtest2 |
mvtest文件夹这样就更名为mvtest2了
(3)取得文件文件名和目录名称
1 | basename /etc/sysconfig/network |
3.文件内容查询
cat | 由第一行开始显示文件内容 |
---|---|
tac | 从最后一行开始显示,可以看出 tac 是 cat 的倒着写! |
nl | 显示的时候,顺道输出行号! |
more | 一页一页的显示文件内容 |
less | 与 more 类似,但是比 more 更好的是,他可以往前翻页! |
head | 只看头几行 |
tail | 只看尾巴几行 |
od | 以二进制的方式读取文件内容! |
more (一页一页翻动)
1 | more package.json |
空格键 (space):代表向下翻一页;
Enter:代表向下翻『一行』
/字符串:搜索关键词
:f :显示文件名以及目前行数
q:离开
b:往回翻页
less (一页一页翻动)
可以使用 [pageup] [pagedown] 等按键的功能来往前往后
翻看文件
空格键 :向下翻动一页
pagedown : 向下翻动一页
pageup:向上翻动一页
/字符串 :向下搜寻『字符串』的功能;
?字符串 :向上搜寻『字符串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个资料的第一行去;
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程序;
touch
1 | touch [-acdmt] 文件 |
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 –date=”日期或时间”
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
4.文件与目录的默认权限与隐藏权限
文件预设权限:umask查看
1 | umask |
查阅的方式有两种,一种可以直接输入 umask ,就可以看到数字型态的权限设定分数, 一种则是
加入 -S (Symbolic) 这个选项,就会以符号类型的方式来显示出权限了!
这段没看懂,先不写着先!
观察文件类型:file
1 | [root@study ~]# file ~/.bashrc |
5.指令于文件收缩
脚本文件名的搜索
在终端机模式当中,连续输入两次[tab]按键就能够知道用户有多少指令可以下达。同时我们可以通过which或者type来寻找这些指令的完整文件名放在哪里,举例寻找’ls’这个常用指令放在哪里:
1 | usg@usg-HP-280-Pro-G2-MT-Legacy:~$ which ifconfig |
这个指令是根据『PATH』这个环境变量所规范的路径,去搜寻『执行档』的档名~ 所以,重点是
找出『执行档』而已!且 which 后面接的是『完整档
which(寻找执行命令)
1 | which [-a] command |
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
范例一:
搜寻 ifconfig 这个指令的完整文件名
1 | which ifconfig |
文件档名的搜寻
我们一般搜索文件时都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻whereis 只找系统中某些特定目录底下的文件而已, locate则是利用数据库来搜寻文件名,当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状态,比较省时间
whereis (寻找文件文件名)
whereis [-bmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
范例一:寻找ifconfieg档名
1 | whereis ifconfig |
范例二:只找出跟 passwd 有关的『说明文件』档名(man page)
1 | whereis passwd |
1 | whereis -m passwd |
locate / updatedb
1 | locate [-ir] keyword |
选项与参数:
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正规表示法的显示方式
范例一:找出系统中所有与 passwd 相关的档名,且只列出 5 个
1 | locate -l 5 passwd |
1 | /etc/passwd |
locate 的使用更简单,直接在后面输入『文件的部分名称』后,就能够得到结果。 举上面的例子来说,我输入 locate passwd ,那么在完整文件名 (包含路径名称) 当中,只要有 passwd 在其中,就会显示出来。
限制:
locate是经由数据库来搜寻的,而数据库的建立默认是在每天执行一次所以当你新建立起来的文件, 却还在数据库更新之前搜寻该文件,那么 locate 会无法找到
手动更新数据库:
1 | sudo updatedb |
ubuntu会读取‘/var/lib/mlocate/mlocate.db’里的配置文件更新数据库文件,可能会等待数分钟。
updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库
文件;
locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。
find
find [PATH] [option] [action]
选项与参数:
- 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
1 | find / -mtime 0 |
范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
1 | find /etc -newer /etc/passwd |
选项与参数:
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 搜寻。
范例三:搜寻 /home 底下属于 dmtsai 的文件
1 | find /home -user dmtsai |
范例四:搜寻系统中不属于任何人的文件
1 | find / -nouser |
选项与参数:
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…. 的属性存在!
范例五:找出档名为 passwd 这个文件
1 | find / -name passwd |
找出文件名包含了 passwd 这个关键词的文件
1 | find / -name "*passwd*" |
范例六:找出 /run 目录下,文件类型为 Socket 的檔名有哪些?
1 | find /run -type s |
范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
1 | find / -perm /7000 |
范例九:找出系统中,大于 1MB 的文件
1 | find / -size +1M |
6.Linux磁盘和文件操作
磁盘与目录的容量
df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
-i :不用磁盘容量,而以 inode 的数量来显示
范例一:将系统内所有的 filesystem 列出来!
1 | df |
1 | 文件系统 1K-块 已用 可用 已用% 挂载点 |
范例二:将容量结果以易读的容量格式显示出来
1 | df -h |
1 | 文件系统 容量 已用 可用 已用% 挂载点 |
范例三:将系统内的所有特殊文件格式及名称都列出来
1 | df -aT |
1 | 文件系统 类型 1K-块 已用 可用 已用% 挂载点 |
范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示
1 | df -h /etc |
1 | 文件系统 容量 已用 可用 已用% 挂载点 |
范例五:将目前各个 partition 当中可用的 inode 数量列出
1 | df -ih |
1 | 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 |
磁盘分区格式化
lsblk 列出系统上的所有磁盘列表
选项与参数:
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
-m :同时输出该装置在 /dev 底下的权限数据 (rwx 的数据)
-p :列出该装置的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等
1 | lsblk |
磁盘分区: gdisk/fdisk
MBR 分区表请使用 fdisk 分区, GPT 分区表请使用 gdisk 分区!
7.压缩文件的用途和技术
在 Linux 的环境中,压缩文件案的扩展名大多是:『 *.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz』
*.Z compress 程序压缩的文件;
*.zip zip 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.bz2 bzip2 程序压缩的文件;
*.xz xz 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩
gzip
gzip 可以说是应用度最广的压缩指令了!目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。
1 | gzip [-cdtv#] 檔名 |
选项与参数:
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6
范例一:将文件解压缩
1 | gzip -d services.gz |
gzip -d 会将原本的 .gz 删除,回复到原本的 services 文件。
范例四:将解开的 services 用最佳的压缩比压缩,并保留原本的文件
1 | gzip -9 -c services > services.gz |
zip 提供 1~9 的压缩等级,不过使用默认的 6 就非常好用了
-c 可以将原本要转成压缩文件的资料内容,将它变成文字类型从屏幕输出, 然后我们可以透过大于(>) 这个符号,将原本应该由屏幕输出的数据,转成输出到文件而不是屏幕,所以就能够建立出压缩挡了。只是档名也要自己写, 当然最好还是遵循 gzip 的压缩文件名
bzip2
若说 gzip 是为了取代 compress 并提供更好的压缩比而成立的,那么 bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的,两者用法几乎相同。
1 | bzip2 [-cdkzv#] 檔名 |
选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留源文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
xz
虽然 bzip2 已经具有很棒的压缩比,不过显然某些自由软件开发者还不满足,因此后来还推出了 xz这个压缩比更高的软件!这个软件的用法也跟 gzip/bzip2 几乎一模一样
1 | xz [-dtlkc#] 檔名 |
选项与参数:
-d :就是解压缩啊!
-t :测试压缩文件的完整性,看有没有错误-l :列出压缩文件的相关信息
-k :保留原本的文件不删除~
-c :同样的,就是将数据由屏幕上输出的意思!
-# :同样的,也有较佳的压缩比的意思!
8.打包指令tar
gzip, bzip2, xz仅能对单一文件进行压缩,所以诞生了tar将多个文件或目录包成一个大文件的指令功能,tar 可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2/xz 的支持,将该文件同时进行压缩
目前 Windows 的 WinRAR 也支持 .tar.gz 档名的解压缩
1 | tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包与压缩 |
选项与参数:
-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-z :透过 gzip的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
–exclude=FILE:在压缩的过程中,不要将 FILE 打包!
其实最简单的使用 tar 就只要记忆底下的方式即可:
- 压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
- 查 询:tar -jtv -f filename.tar.bz2
- 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
9.vim的使用
一般指令模式
h 或 向左箭头键(←) | 光标向左移动一个字符 |
---|---|
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
一般指令模式切换到编辑模式
i,I | 进入插入模式(Insert mode):i 为『从目前光标所在处插入』, I 为『在目前所在列的第一个非空格符处开始插入 |
---|---|
a,A | 进入插入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在列的最后一个字符处开始插入』。(常用) |
o,O | 进入插入模式(Insert mode):这是英文字母 o 的大小写。 o 为『在目前光标所在的下一列处插入新的一列』; O 为在目前光标所在处的上一列插入新的一列!(常用) |
r,R | 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次; R 会一直取代光标所在的文字,直到按下 ESC为止;(常用) |
一般指令切换到指令列模式
:W | 将编辑的数据写入硬盘文件中(常用) |
---|---|
:w! | 若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的文件权限有关啊! |
:q | 离开 vi (常用) |
:q! | 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存文件。 |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 喔!若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开! |
:w[filename] | 将编辑的数据储存成另一个文件(类似另存新档) |
:r[filename] | 在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到游标所在列后面 |