Linux 基本工具(权限管理)
本篇文章将详细介绍下 Linux
环境的文件系统权限的基本信息,便于我们在使用过程中,对权限有合理的规划和使用.
每一个文件(目录)均有一个拥有者(Owner)
root@server:~# ll /bin/bash
-rwxr-xr-x 1 root root 1037528 May 10 04:20 /bin/bash*
这里第一个 root
即为拥有者,也即为系统的可登陆账户名,每个文件(目录)均有一个拥有者(Owner)
本篇文章将详细介绍下 Linux
环境的文件系统权限的基本信息,便于我们在使用过程中,对权限有合理的规划和使用.
root@server:~# ll /bin/bash
-rwxr-xr-x 1 root root 1037528 May 10 04:20 /bin/bash*
这里第一个 root
即为拥有者,也即为系统的可登陆账户名,每个文件(目录)均有一个拥有者(Owner)
我们在 Linux 环境中常用的 Shell 环境大多都是 Bash Shell, 即使是 MacOS , 默认 Shell 环境也是 Bash Shell, 了解 Bash Shell 的快捷键将有助于我们快速和 Shell 环境交互.
Ctrl + b
向后移动一个字符Ctrl + f
向前移动一个字符Alt + b
or Ctrl + ←
向后移动一个单词Alt + f
or Ctrl + →
向前移动一个单词Ctrl + a
移动到行首Ctrl + e
移动到行尾Shell 环境一般在我们输入之前, 会有部分提示信息, 快速让使用者知道当前环境的信息,比如当前用户/当前路径等. Bash Shell 同样给我们提供了定制这部分的逻辑,在 Bash Shell 下使用 PS1
来设置 Shell 提示信息.
PS
原意是 Prompt String
, 当然有 PS1
, 至少还会有其他的, 比如 PS2
.
PS1
默认 Shell 提示符PS2
多行命令的默认提示符, 一个非常长的命令可以通过在末尾加 \
使其分行显示 , 多行命令提示默认值是 >
PS3
选择输入时的提示符, 默认值为 #?
PS4
配合set -x
用来修改跟踪输出的前缀, set -x
一般用在调试过程, 显示整个脚本的执行过程, 默认值为 ++
了解 Bash Shell 环境初始化流程的最好的办法是查看 man bash
, 中间有部分专门描述 Bash Shell 相关的环境配置文件.如下:
FILES
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
/etc/bash.bashrc
The systemwide per-interactive-shell startup file
/etc/bash.bash.logout
The systemwide login shell cleanup file, executed when a login shell exits
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
我们看到 bash man page 中提到 login shells
的概念, 我们先来了解下, 什么是 login shells
? 什么是 no login shells
.
Linux
是个多用户操作系统,在操作系统上,有非常多用户, 同时为了便于同类用户的管理,有一系列的用户组。每个用户,都有自己的名称和ID, 称为 uid
。每个用户组同样也有其名称和ID
,称为 gid
。每个用户至少从属于一个用户组,每个用户皆从属于一个主组。各个 Linux
发行版默认的管理账户为 root
, uid
为 0
.
id
命令用于展示用户 uid
、 gid
、 groups
root@server:~# id root
uid=0(root) gid=0(root) groups=0(root)
前面我们介绍过, 通过 top
或者 htop
命令能够查看服务器的物理机内存和 Swap
的使用情况, 除了这两种工具, 我们其实还会有些其他工具,完成类似的任务.
free
命令用于显示内存的使用信息, 比如
root@server:~# free -h
total used free shared buff/cache available
Mem: 3.9G 1.5G 1.1G 5.9M 1.3G 2.1G
Swap: 974M 0B 974M
除了类似 top
命令显示的 total
、 used
、 free
、 buff/cache
,还显示了 shared
、available
等信息。
这里有些内存概念需要我们知道:
前一篇文章介绍了 top
命令的一些使用方式, top
命令相对来说是个很古老的命令了, 某些场景下,表现并不好, 因此社区为了改变这一现状, 新开发了 htop
命令, 我们先来认识下 htop
:
htop 在顶部区域更直观的列出所有CPU/内存/Swap等等使用信息, 同时列出所有进程信息, 以及线程使用信息. 提供简单便捷的方式对内容进行排序/搜索/标记/关闭进程等等处理.
大多数发行版上 htop
均未作为默认包安装, 需要用户手动安装
apt -y install htop
yum -y install htop
top
是一个命令行程序, 用于实时监视系统的运行情况, top
命令展示的信息比较丰富, 我们分类介绍下, 先来看看top命令展示的信息
root@server:~# top [2/1909]
top - 18:41:48 up 1 day, 2:21, 3 users, load average: 0.12, 0.08, 0.09
Tasks: 157 total, 1 running, 156 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.1 us, 0.2 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4045996 total, 1009596 free, 1579968 used, 1456432 buff/cache
KiB Swap: 998396 total, 998396 free, 0 used. 2164548 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1627 rabbitmq 20 0 2205672 57648 5204 S 3.3 1.4 67:14.58 beam.smp
23655 root 20 0 0 0 0 S 0.3 0.0 0:04.69 kworker/0:1
1 root 20 0 38068 6032 3948 S 0.0 0.1 0:02.93 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.43 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root 20 0 0 0 0 S 0.0 0.0 2:11.68 rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root rt 0 0 0 0 S 0.0 0.0 0:00.24 migration/0
10 root rt 0 0 0 0 S 0.0 0.0 0:01.31 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 0:01.26 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:00.24 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:02.09 ksoftirqd/1
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
......
ps
命令用于展示进程信息,在查看进程是否存在,或者进程的启动命令,或者是进程运行环境信息。
查看所有进程, 仅包含进程名称
root@server:~# ps -e
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:01:49 rcu_sched
8 ? 00:00:00 rcu_bh
9 ? 00:00:00 migration/0
10 ? 00:00:01 watchdog/0
11 ? 00:00:01 watchdog/1
12 ? 00:00:00 migration/1
13 ? 00:00:01 ksoftirqd/1
15 ? 00:00:00 kworker/1:0H
16 ? 00:00:01 watchdog/2
17 ? 00:00:00 migration/2
18 ? 00:00:00 ksoftirqd/2
20 ? 00:00:00 kworker/2:0H
21 ? 00:00:00 watchdog/3
22 ? 00:00:00 migration/3
23 ? 00:00:00 ksoftirqd/3
25 ? 00:00:00 kworker/3:0H
26 ? 00:00:00 kdevtmpfs
......
在 Linux
上启动一个程序, 我们可能经常通过前台启动, 但是前台启动之后, 终端被占用, 不能同时开展其他工作, 因此就希望将程序变成后台运行,接下来我们介绍下, 类似场景的任务控制.
任务控制实际是Shell程序提供的功能,使用更多的是bash
/sh
,当然还有其他Shell程序,比如tcsh
、ksh
、csh
等, 对任务管理功能各个实现都大致类似, 这里我们主要介绍接触最多的 bash
Shell。
cmd &
让程序后台运行Ctrl + c
关闭当前前台运行程序(一般是发送SIGINT
给程序处理)Ctrl + z
终端当前前台运行程序(一般是发送SIGTSTP
给程序处理)jobs
查看所有后台运行程序bg %number
将程序切换到后台运行fg %number
将后台运行程序切换到前台运行disown %number
将任务从当前的任务表中移除,移除后程序依然在后端运行,只是不被当前会话管理。