基础
本文为阅读鸟哥的 linux 私房菜笔记,仅记录个人觉得基础内容。想进一步深入同学请点击这里阅读
文件权限和目录配置
文件有拥有者、群组、其他人
文件类型 | r | w | x |
---|---|---|---|
文件 | 读到文件内容 | 修改文件内容 | 执行文件内容 |
目录 | 读到文件名 | 修改文件名 | 进入该目录的权限 |
文件属性
ls -a
显示所有的文件(包括隐藏的文件及以.开头命名的文件)ls -al
显示所有文件(包括文件的详细信息)第一列:文件的权限
第一位:
d
代表是文件夹,-
代表是文件,l
连接档(相当于 windows 快捷方式)(其余类型 goggle)后续每三
位【r(可读)w(可写)x(可执行)】:分别代表文件拥有者、群组、其他人的文件权限。没有权限为
-
第二列:连接到此节点的数量
第三列:文件拥有者
第四列:文件所属群组
第五列:文件大小(bytes)
第六列:最后修改日期
第七列:文档名字
改变文件权限、拥有者、群组
-R : 进行递归的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
chgrp :改变文件所属群组
chgrp [-R] 群组 dirname/filename
chown :改变文件拥有者
chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:群组名称 文件或目录
chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性
数字类型改变文件权限
r:4 w:2 x:1
例如当权限为: [-rwxrwx---] 分数则是:
> owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= --- = 0+0+0 = 0
u:拥有者 g:群组 o:其他人 a:所有
chmod u=rwx,go=rx .bashrc
符号改变文件权限
chmod +x ./test
给 test 增加可执行权限
/
和~
区别(详细介绍)/
为系统根目录,~
为默认的用户家目录,~xxx 为 xxx 的家目录
文件与目录管理
绝对路径和相对路径
- 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
- 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
目录操作
.
代表此层目录..
代表上一层目录
*
变量键盘读取与宣告
mkdir [-mp] 目录名称mkdir -p test1/test2/test3/test4 (test2不存在使用-p)mkdir -m 711 test2选项与参数:-m :设置文件的权限-p :帮助你直接将所需要的目录(包含上层目录)递归创建起来!~account
代表 account 这个使用者的主文件夹(account 是个帐号名称)cd
:变换目录pwd
:显示目前的目录参数-P :显示出确实的路径,而非使用链接 (link) 路径
mkdir
:创建一个新的目录rmdir
:删除一个空的目录rmdir [-p] 目录名称选项与参数:-p :连同上层空的目录也一起删除不是空目录使用`rm -r 目录` -r是递归删除
环境变量
env
列出当前 shell 环境下所有环境变量set
列出自定义变量和环境变量export
将自定义变量转成环境变量
复制、移动、删除
复制
cp [-adfilprsu] 来源文件(source) 目标文件(destination)cp [options] source1 source2 source3 .... directory选项与参数:-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;-f :强制(force)复制,覆盖已经存在的目标文件而不给出提示;-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)-l :不复制文件,只是生成链接文件-p :除复制文件的内容外,还把修改时间和访问权限也复制到新文件中(备份常用);-r :递归复制文件夹下所有内容(常用)-s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!移动
mv [-fiu] source destinationmv [options] source1 source2 source3 .... directory选项与参数:-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!-u :若目标文件已经存在,且 source 比较新,才会更新 (update)删除
rm [-fir] 文件或目录选项与参数:-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;-i :互动模式,在删除前会询问使用者是否动作-r :递归删除文件所有内容
获取文件名和目录名
获取文件名
basename /etc/sysconfig/network
=> network获取目录名
dirname /etc/sysconfig/network
=> /etc/sysconfig
查看文件内容
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- head 只看头几行
- tail 只看尾巴几行
- od 以二进制的方式读取文件内容!
文件预设权限:umask
若使用者创建为“文件”
默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下: -rw-rw-rw-
若使用者创建为“目录”
由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下: drwxrwxrwx
umask 无权限为 7 分,有权限为 0 分。022 => rwx-rx-rx
chmod 有 r(4)w(2)x(1)权限为 7 分
查看文件类型 file
查看文件的基本数据(属于 ASCII、data 文件、binary 、有没有使用到动态函数库 (share library),
file 文件地址
脚本文件名的搜寻
which [-a] command
搜索某个命令的完整文件名 //-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称文件搜索
whereis
whereis 文件或目录名
whereis
搜索快,因为只在特定文件夹下搜索locate/updatedb
locate keyword
查找带 keyword 的所有文件locate
搜索文件很快,是在数据库中搜索。每天执行一次,新建立的文件想要被搜索到。使用updatedb
命令更新数据库find(搜索最慢)
find [PATH] 文件
查询某个路径下的文件
文件与文件系统的压缩、打包和备份
常见被压缩的文件后缀名
*.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、bzip2、xz 讲目录内所有文件分别进行压缩
tar 将多个目录或文件打包成一个大文件
tar [-z|-j|-J] [cv] [-f 待创建的新文件名] filename... 打包与压缩tar [-z|-j|-J] [tv] [-f 既有的 tar文件名] 查看文件名tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录] 解压缩选项与参数:-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 -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
- 查 询:tar -jtv -f filename.tar.bz2
- 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
数据流重导向
>
- 文件不存在,系统会自动的将它创建起来
- 文件存在,文件内容清空,再将数据写入!
>>
- 文件不存在,系统会自动的将它创建起来
- 文件存在,添加到文件最后!
2>
同
>
不同的是,2>
存的是错误内容。>
存的是正确内容2>>
同上,将错误内容追加到文件最后
命令行执行判断依据(
; && ||
)cmd ; cmd (不考虑指令相关性的连续指令下达)
cmd1 && cmd2
- 若 cmd1 执行完毕且正确执行(\$?=0),则开始执行 cmd2。
- 若 cmd1 执行完毕且为错误 (\$?≠0),则 cmd2 不执行。
cmd1 || cmd2
- 若 cmd1 执行完毕且正确执行(\$?=0),则 cmd2 不执行。
- 若 cmd1 执行完毕且为错误 (\$?≠0),则开始执行 cmd2。
管线命令
将历史记录翻页形式打开
history | less
查漏补缺
alias
别名alias
查看当前所有别名alias 别名='xxxx'
unalias 别名
取消别名历史命令
history
历史命令存在
~/.bash_history
中history [-raw] histfiles选项与参数:n :数字,意思是“要列出最近的 n 笔命令列表”的意思!-c :将目前的 shell 中的所有 history 内容全部消除-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则默认写入 ~/.bash_history-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;-w :将目前的 history 记忆内容写入 histfiles 中!!number!command!!选项与参数:number :执行第几笔指令的意思;command :由最近的指令向前搜寻“指令串开头为 command”的那个指令,并执行;!! :就是执行上一个指令(相当于按↑按键后,按 Enter)login shell
和non-login-shell
- login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。
- 你要由 tty1 ~ tty6 登陆,需要输入使用者的帐号与密码,此时取得的 bash 就称为“ login shell ”啰;
- login shell 其实只会读取这两个配置文件:
- /etc/profile:系统整体的设置,你最好不要修改这个文件;
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设置,你要改自己的数据,就写入这里!
- non-login shell:取得 bash 接口的方法不需要重复登陆的举动
- 你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入帐号与密码,那个 bash 的环境就称为 non-login shell 了。
- 你在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入帐号密码, 那第二个 bash (子程序) 也是 non-login shell 。
- login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。
source
读入环境配置文件的指令修改了 zsh 配置之后,执行此命令就不必注销登录来使配置生效了
指令搜寻的顺序
- 以相对/绝对路径执行指令,例如“ /bin/ls ”或“ ./ls ”;
- 由 alias 找到该指令来执行;
- 由 bash 内置的 (builtin) 指令来执行;
- 通过 \$PATH 这个变量的顺序搜寻到的第一个指令来执行。
awk
、sed
和grep
shell 脚本和 expect 脚本第一行的
#!/bin/bash
、#!/usr/bin/expect -f
默认使用的 shell 为 bash
默认使用 expect 并且从文件读取命令
df -hl查看磁盘大小,已用、剩余空间