马哥linux培训第三天笔记
文件系统
程序编译方式
动态编译
依赖系统共享库文件,节约内存资源
静态编译
体积大,依赖的库包含在程序内部
进程的类型
终端:硬件设备,关联一个用户接口
* 与终端相关:通过终端启动
* 与终端无关:操作引导启动过程当中自动启动
linux系统上的文件类型
-: 常规文件,即f;
d: directory,目录文件
l: 链接文件
b: 块文件
c: 字符设备
p: 管道文件
s: socket文件
bash的基础特性
命令补全
根据PATH环境变量中设定的目录,自左而右的搜索
路径补全
根据路径补全
命令行展开
~: 自动展开为用户的家目录,或指定的用户的家目录
{}: 可承载一个以逗号分割的路径列表,并能够将其展开为多个路径
/tmp/{a,b} 相当于/tmp/a,/tmp/b
[root@cloud test]# mkdir -pv /root/test/x/{y1/{a,b},y2}
mkdir: created directory ‘/root/test/x’
mkdir: created directory ‘/root/test/x/y1’
mkdir: created directory ‘/root/test/x/y1/a’
mkdir: created directory ‘/root/test/x/y1/b’
mkdir: created directory ‘/root/test/x/y2’
[root@cloud test]# mkdir -v {a,b}_{c,d}
mkdir: created directory ‘a_c’
mkdir: created directory ‘a_d’
mkdir: created directory ‘b_c’
mkdir: created directory ‘b_d’
命令的执行状态结果
bash通过状态返回值来输出此结果:
成功:0
失败:1-255
命令执行完成之后,其状态返回值保存于bash的特殊变量$?中
[root@cloud test]# ls
123.gz a_c a_d b_c b_d file1 file1.gz file2 x
[root@cloud test]# echo $?
0
命令正常执行时,有的还会有命名返回值
这个返回值会保存于bash的变量中 $(COMMAND)或`COMMAND`
[root@WH-DNS-00 named]# $(date +'%F-%H-%M-%S')
-bash: 2016-12-09-15-27-56: command not found
[root@WH-DNS-00 named]# touch /tmp/tfile-$(date +'%F-%H-%M-%S')
[root@WH-DNS-00 named]# ls /tmp/
tfile-2016-12-09-15-28-19 tfile-date +'%F-%H-%M-%S'
引用
强引用:''
弱引用:""
命令引用:``
命令别名
alias 自定义别名
alias cdnd='cd /var/named/chroot/var/named/'
这样定义的别名只对当前shell有效,如果想永久有效,需要定义在配置文件中
仅对当前用户有效:~/.bashrc
对所有用户有效:/etc/bashrc
source /etc/bashrc bash进程重新读取配置文件
快捷键
ctrl+l 相当于clear清屏
ctrl+a 跳转至命令开始处
ctrl+e 跳转至命令结尾处
ctrl+c 取消命令执行
ctrl+u 删除命令行首至光标所在处的所有内容
ctrl+k 删除光标所在处至命令行尾的所有内容
esc+. 粘贴上次输入的命令
[root@localhost opms]#echo $$
5610
[root@localhost opms]#ps-ef|grep5610
root56105608021:48pts/000:00:00-bash
root59405610021:59pts/000:00:00ps-ef
root59415610021:59pts/000:00:00grep--color=auto5610
$$ 当前进程号
文件名通配(globbing)
匹配模式: 元字符
*: 匹配任意长度的任意字符
?: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
几种特殊格式
[a-z],[A-Z],[0-9],[a-z0-9] 不区分大小写
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
[[:alpha:]] 所有字母
[[:digit:]] 所有数字
[[:alnum:]] 所有的字母和数字
[[:space:]] 所有空格
[[:punct:]] 所有标点符号
[^]: 匹配指定范围外的任意单个字符+*
IO重定向及管道
程序的数据流有三种:
输入的数据流:<-- 标准输入(stdin),键盘
输出的数据流:--> 标准输出(stdout),显示器
错误输出流: --> 错误输出(stderr),显示器
fd file descriptor :文件描述符
标准输入:0
标准输出:1
错误输出:2
IO重定向
输出重定向: >
特性:覆盖输出 追加重定向: >>
特性:追加输出
set -C 禁止覆盖输出重定向至已存在的文件
此时可使用强制覆盖输出: >|
set +C 关闭上述特性
错误输出流重定向: 2> 2>>
合并正常输出流和错误输出流:
&> &>>
command > /path/to/somefile 2>&1
command >> /path/to/somefile 2>&1
输入重定向 <
cat << EOF 一次输出
cat > /path/to/somefile << EOF 将输入的内容保存到指定文件
最后输入EOF退出
特殊设备: /dev/null 丢弃,黑洞
[root@cloud test]# cat /etc/passwd &> /dev/null
管道|
连接程序,实现将前一个命令的输出直接定向给后一个程序当作输入数据流
[root@cloud test]# cat /etc/issue |tr 'a-z' 'A-Z'
\S
KERNEL \R ON AN \M
tee 命令配合管道使用,可将输出保存至指定文件
[root@cloud test]# cat /etc/issue|tee /etc/nihao |tr 'a-z' 'A-Z'
\S
KERNEL \R ON AN \M
[root@cloud test]# cat /etc/nihao
\S
Kernel \r on an \m
基础命令
hash 记录或显示程序的位置
-d 表示清空指定的命令的缓存
-r 表示清空所有命令的缓存
history 历史命令
[root@cloud ~]# ll -a .bash_history
-rw------- 1 root root 14480 Dec 7 00:25 .bash_history
登录shell后执行的命令在缓存
登录shell时,会读取~/.bash_history
-a 追加本次会话新执行的命令到历史文件
-d 删除历史命令中指定的命令
-c 清空历史命令
!n 执行命令历史中第n条命令
!! 重复执行上次的命令
!string 调用历史中最近一个以string开头的命令
history n 显示最近的n条历史命令
man 帮助命令
[]: 可选内容
<>: 必选内容
|: 二选一
...: 同类内容可以有多个
date 显示时间
[root@WH-DNS-00 named]# date
Wed Dec 7 11:56:09 CST 2016
可以加上各种参数,自定义显示
[root@WH-DNS-00 named]# date +%T
11:55:58
[root@WH-DNS-00 named]# date +'%F | %T'
2016-12-07 | 11:55:48
%F 按照指定格式显示 2016-12-07
%D 直接显示日期 12/07/16
%H 显示小时
%M 显示分钟
%S 显示秒
%s 从1970年到现在进过的秒
%m 显示月份
ls 显示指定路径下的文件列表
-a 显示所有文件
-A 显示所有文件,但不显示.和..
-l 长格式显示文件信息
-h 用比较容易的单位来表示
-d 显示目录自身的相关属性
-r 逆序方式显示
-R 递归显示
[root@cloud ~]# ls -l
total 3208
drwxr-xr-x 5 root root 106 Dec 6 14:52 agent
-rw-r--r-- 1 root root 3215557 Oct 23 22:16 agent.tar.gz
最左侧的第一位:文件类型
cat 显示文件内容在屏幕上
-A 显示所有符号
-E 显示行结束符
-T 显示制表符
-v 显示其他非打印字符
-n 显示行编号
-b 打印出行号,空白行不打印
echo 回显命令
-n 关闭自动换行功能
-e 启用转义符
\t 制表符
\b 退格符(删除前面的字符)
\n 新添加一行
单引号 强引用 例如变量不会引用
双引号 弱引用 例如变量会引用
which 显示应用程序文件位置
--skip-alias 禁止使用命令别名
[root@cloud test]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@cloud test]# which --skip-alias ls
/usr/bin/ls
whatis 显示命令帮助信息的位置
系统管理类命令
关机:halt.poweroff.shutdown.init 0
重启:reboot,shutdown,init 6
跟用户登录相关:who,whoami,w
shutdown 关机
-r 重启
-h 关机
-c 取消关机 now: 立刻
+M: 加时间,几分钟后关机
hh:mm 具体关机时间
shutdown -r +10 "hello erveryone" 十分钟之后关机,并发广播
shutdown -c 取消关机计划
whereis 查找命令目录
-b 查找二进制文件
-m 查找帮助文件
[root@cloud test]# whereis -b ls
ls: /usr/bin/ls
[root@cloud test]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz
sort 排序
-f 忽略字符大小写
-r 逆序
-t 字段分隔符
-k 以指定字段为标准排序
-n 以数值大小进行排序
-u 排序后去重,连续且重复的行
uniq 连续且完全相同方为重复
-c 显示每行重复的次数
-d 仅显示重复的行
-u 仅显示不重复的行
[root@cloud~]#cut-d:-f7/etc/passwd|sort|uniq-c
6/bin/bash
1/bin/sync
1/bin/tcsh
1/sbin/halt
23/sbin/nologin
1/sbin/shutdown
[root@cloud~]#cut-d:-f7/etc/passwd|sort|uniq-u
/bin/sync
/bin/tcsh
/sbin/halt
/sbin/shutdown
[root@cloud~]#cut-d:-f7/etc/passwd|sort|uniq-d
/bin/bash
/sbin/nologin
cut 文本内容切割
-d 指明分隔符
-f 指明需要取出的字段
n,m逗号分隔 n-m取一段
[root@cloud ~]# cut -d: -f1,3-4,7 /etc/passwd
diff 比较两个文件
diff /PATH/OLDFILE /PATH/NEWFILE
-u 显示要修改的上下文
wc 统计命令
-c 统计字节数数
-l 统计行数
-m 统计字符数,不能与-c一起使用
-w 统计字数
-L 打印最长行的长度
tr 对位替换
[root@WH-DNS-00 etc]# tr [a-z] [A-Z]
nihao
NIHAO
过滤字符,转换字符,不会修改源文件
[root@WH-DNS-00 etc]# tr [a-z] [A-Z] < /etc/issue
\S
KERNEL \R ON AN \M
[root@WH-DNS-00 etc]# cat /etc/issue
\S
Kernel \r on an \m
[root@WH-DNS-00 etc]# tr -d 'abc' < /etc/issue
\S
Kernel \r on n \m
目录管理类命令
mkdir 创建目录
-p 自动按需创建目录
-v 显示详细过程
-m 直接给定权限
rmdir 删除空目录
只能删除空目录
tree 显示目录树形结构
-L 指定显示的层级
-d 只显示目录
[root@cloud test]# tree x/
x/
├── y1
│ ├── a
│ └── b
└── y2
文件查看类命令
分屏查看命令:more和less
more 翻屏至文件尾部后自动退出
less 同man
head 查看文件的前n行
-n 前n行
tail 查看文件的后n行
-n 后n行
-f 查看文件尾部内容并监控,不退出
stat 查看文件状态
文件:两类数据组成
* 元数据: metadata
* 数据: data
stat能看到文件的元数据
[root@cloud test]# stat file1
File: ‘file1’
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 68666229 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-06 23:18:37.841655271 +0800
Modify: 2016-12-06 23:18:35.767655289 +0800
Change: 2016-12-06 23:18:35.767655289 +0800
Birth: -
Access: 2016-12-06 23:18:37.841655271 +0800 最近访问
Modify: 2016-12-06 23:18:35.767655289 +0800 最近更改,数据
Change: 2016-12-06 23:18:35.767655289 +0800 最近改动,元数据
touch 创建文件,更改时间戳
-c 指定的文件路径不存在时不予创建
-a 仅修改access time;
-m 仅修改modify time;
-t 指定修改时间戳
文件管理工具
cp 复制
单元复制
如果目标文件不存在,会自动创建
如果已经存在,会覆盖
多源复制
目标必须是目录,分别复制每个文件至目标目录中,并保持原名
-i: 交互提醒
-f: 强制覆盖,不交互
-r: 递归复制目录
-d: 如果复制的是符号链接,不找源文件,仅复制链接本身,cp默认是会复制符号链接的源文件到目标文件的
-a: 用于实现付归档
--preserv=
mode 权限
ownership 属主和属组
timestamps 时间戳
context 安全标签
xattr 扩展属性
links 符号链接
all 上述所有属性
mv 移动
-i 交互式
-f 强制,不交互
rm 删除
-i 交互式
-f 强制 force
-r 递归 recursive
所有不用的文件建议不要直接删除,而是移动到某个专用目录。
变量
命名的内存空间;
变量类型:
字符型
数值型:
精确数值
近似数值