背景
玩转PostgreSQL前,首先要了解的最最基本的Linux操作。
本章大纲
1. 如何访问命令行
2. 使用命令行下的工具
非编辑模式
进入编辑模式
3. 正则表达式、管道和I/O 重定向
4. 管理用户账户
5. 文件访问控制
6. 管理进程
1, 如何访问命令行
1.1 本地命令行的访问
在图形界面中,访问命令行的方法:打开Terminal,Console。
或者:Ctrl+Alt+F1 ~ F6
1.2 使用SSH 访问命令行
同上
2, 使用命令行下的工具
2.1 使用硬链接
硬链接,指在同一个文件系统中,对inode的引用,只要文件上存在至少1个硬链接,就可以找到对应的inode。
[digoal@digoal01 ~]$ echo "abc" > ./a
[digoal@digoal01 ~]$ stat a
File: `a'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 656374 Links: 1 -- 硬链接数量
Access: (0664/-rw-rw-r--) Uid: ( 500/ digoal) Gid: ( 500/ digoal)
Access: 2017-04-11 13:18:14.292848716 +0800
Modify: 2017-04-11 13:18:14.292848716 +0800
Change: 2017-04-11 13:18:14.292848716 +0800
创建硬链接
[digoal@digoal01 ~]$ ln -L ./a ./b
[digoal@digoal01 ~]$ stat a
File: `a'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 656374 Links: 2
Access: (0664/-rw-rw-r--) Uid: ( 500/ digoal) Gid: ( 500/ digoal)
Access: 2017-04-11 13:18:14.292848716 +0800
Modify: 2017-04-11 13:18:14.292848716 +0800
Change: 2017-04-11 13:18:34.631855044 +0800
[digoal@digoal01 ~]$ stat b
File: `b'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 656374 Links: 2
Access: (0664/-rw-rw-r--) Uid: ( 500/ digoal) Gid: ( 500/ digoal)
Access: 2017-04-11 13:18:14.292848716 +0800
Modify: 2017-04-11 13:18:14.292848716 +0800
Change: 2017-04-11 13:18:34.631855044 +0800
删除一个硬链接,还能通过其他硬链接找到对应的inode。
[digoal@digoal01 ~]$ rm a
rm: remove regular file `a'? y
[digoal@digoal01 ~]$ cat b
abc
2.2 归档和解压
常用的归档命令tar
归档-c (常用压缩库-j bz2, -z gzip)
[digoal@digoal01 ~]$ tar -jcvf test.tar.bz2 b
b
解压-x
[digoal@digoal01 ~]$ tar -jxvf test.tar.bz2
b
[digoal@digoal01 ~]$ cat b
abc
2.3 VIM 简介
Linux下的命令行文本编辑器。
2.4 基本的VIM 工作流程
使用vi打开文件
vi 文件名
非编辑模式
进入vi帮助
:help
退出vi帮助
:q
显示行号
:set nu
向后find
/需要查找的词
转义符号为\
向前find
?需要查找的词
转义符号为\
find下一个
向下定位下一个目标词 n
向上定位下一个目标词 N
查找时忽略大小写
/abc\c
?abc\c
光标移动
上i下k
左h右l
翻页
Ctrl+f 向下翻页
Ctrl+b 向上翻页
行尾
Shift+$
行头
Shift+|
文件开始
按两次小写g
文件结尾
大写G
按词移动光标
向下移动 w
向上移动 b
删除行
删除当前行 dd
向下删除两行(包括当前行) d2d
删除字
x
删除到词尾(直到下一个词的第一个字)
dw
删除2个词 d2w
粘贴刚刚删除的行、字符等
向下粘贴 p
向上粘贴 P
粘贴
Shift+Insert
替换
只替换每行的第一个命中词 :%s/原词/替换为目标词/
替换每行所有的命中词 :%s/原词/替换为目标词/g
反悔
回退 u
前滚 Ctrl+R
进入编辑模式
插入
i
追加
a
向前插入行
O
向后插入行
o
换行
Enter
退出编辑模式
ESC
保存
:w
保存并退出
:wq!
:x!
3, 正则表达式、管道和I/O 重定向
3.1 基本的正则表达式
以grep为例,使用正则查找
查找以a开头的行
$grep -E "^a" file
abc
查找以b结束的行
$grep -E "b$" file
查找包含数字的行
grep -E "[0-9]" a
查找包含2个连续数字的行
$grep -E "[0-9]{2}" a
3.2 使用grep
同上
3.3 管道和重定向
管道符
|
使用管道,将一个命令的标准输出,作为另一个命令的标准输入
$echo "abc" | grep "a"
abc
重定向命令的标准输出
重定向到空设备,并覆盖重定向目标
$cat a >/dev/null
重定向到某个文件,并覆盖重定向目标
$cat a >./b
追加方式重定向目标
$cat a >>./b
重定向命令的标准错误
$cat 1 > /dev/null 2>./err
$cat err
cat: 1: No such file or directory
4, 管理用户账户
4.1 什么是用户
Linux是多用户系统,多用户同时也便于权限的管理。
查找已有的用户
$cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
4.2 管理本地用户
新增、删除用户
useradd 用户名
userdel 用户名
4.3 管理密码
设置用户密码
passwd digoal
Changing password for user digoal.
New password:
Retype new password:
5, 文件访问控制
5.1 管理用户组
创建、删除组
[root@digoal01 ~]# groupadd 组名
[root@digoal01 ~]# groupdel 组名
5.2 管理文件系统访问控制列表
Linux中文件、目录的权限分为用户权限、组权限、其他用户权限。
例如
[root@digoal01 ~]# ls -l
total 18744
-rw-------. 1 root root 1048 Mar 8 2016 anaconda-ks.cfg
-rw-r--r-- 1 root root 9579 Mar 26 23:00 install.log
-rw-r--r--. 1 root root 3384 Mar 8 2016 install.log.syslog
drwxrwxrwx. 6 1107 1107 4096 Sep 27 2016 postgresql-9.6.0
第1个字符:表示这个文件是目录、普通文件。
2-4字符:owner的权限
5-7字符:group的权限
8-10字符:other的权限
r 读
w 写
x 普通文件表示可以运行, 目录表示可以进入目录
修改文件、目录的user:group
chown digoal:root postgresql-9.6.0
ls -l postgresql-9.6.0
drwxrwxrwx. 6 digoal root 4096 Sep 27 2016 postgresql-9.6.0
修改文件、目录的权限
r 4
w 2
x 1
[root@digoal01 ~]# chmod 700 install.log
[root@digoal01 ~]# ls -l install.log
-rwx------ 1 root root 9579 Mar 26 23:00 install.log
6, 管理进程
6.1 监控进程
查看系统TOP(f进入field选择)
top
打印系统进程
ps -efwL
统计每个进程的开销
pidstat -d -r -u -w -l -h -p ALL 5 1
打印进程stack
pstack -p pid
打印进程系统调用
strace -p pid
6.2 结束和管理进程
结束进程
kill pid
强制结束进程(用户进程无法捕获-9信号,可能崩溃)
kill -9 pid
6.3 管理周期进程
任务调度进程的管理
查看当前用户的当前调度任务
crontab -l
配置当前用户的调度任务(命令一定要有user:x权限,否则不会被执行)
crontab -e
# * 表示所有,支持-号范围,支持,号枚举
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
6.4 调整进程
进程优先级,Linux在分配计算资源时,优先分配给nice值低的进程。
nice等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。
启动时调整进程的优先级
启动时设置为-5
nice -n -5 命令 &
调整已存在进程的优先级
renice -5 -p 5200
#PID为5200的进程nice设为-5
查看进程优先级
top -p pid
NI 字段表示
调整进程的CPU亲和(绑定CPU)
numactl --physcpubind=1,2,3 命令
将命令的CPU绑定到1,2,3号核
6.5 系统状态监控
IO监控
iostat
cpu,disk,net,system资源使用监控
dstat
每个CPU核的使用监控
mpstat