乙巳🐍年

acc8226 的博客

用户身份与能力

Linux 系统的管理员之所以是 root,并不是因为它的名字叫 root,而是因为该用户的身份号码即 UID(User IDentification)的数值为 0。

管理员 UID 为 0:系统的管理员用户。

系统用户 UID 为 1~999:Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围。

普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)。

为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。假设一个公司中有多个部门,每个部门中又有很多员工,如果只想让员工访问本部门内的资源,则可以针对部门而非具体的员工来设置权限。例如,通过对技术部门设置权限,使得只有技术部门的员工可以访问公司的数据库信息等。

另外,在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。

1. id 命令
id 命令用于显示用户的详细信息,语法格式为 “id 用户名”。
这个 id 命令是一个在创建用户前需要仔细学习的命令,它能够简单轻松地查看用户的基本信息,例如用户 ID、基本组与扩展组 GID。

1
2
~$ id linuxprobe
uid=1004(linuxprobe) gid=1005(linuxprobe) groups=1005(linuxprobe)
阅读全文 »

内建命令与外部命令之分

help , man , info 命令的使用以及区别

内建命令与外部命令
内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在 bash 源码的 builtins 里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。

外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在 /bin,/usr/bin,/sbin,/usr/sbin 等等。比如:ls、vi 等。

1
2
3
4
5
6
# 得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的 .def 中
xxx is a shell builtin
# 得到这样的结果说明是外部命令,正如上文所说,外部命令在 /usr/bin or /usr/sbin 等等中
xxx is /usr/bin/xxx
# 若是得到 alias 的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx

help 命令
因为 help 命令是用于显示 shell 内建命令的简要帮助信息。帮助信息中显示有该命令的简要说明以及一些参数的使用以及说明,一定记住 help 命令只能用于显示内建命令的帮助信息,不然就会得到你刚刚得到的结果。

那如果是外部命令怎么办,不能就这么抛弃它呀。其实外部命令基本上都有一个参数–help,这样就可以得到相应的帮助,看到你想要的东西了。试试下面这个命令是不是能看到你想要的东西了。

阅读全文 »

top 是我们常用的一个查看工具,能实时的查看我们系统的一些关键信息的变化:

1
top

top 是一个在前台执行的程序,所以执行后便进入到这样的一个交互界面,正是因为交互界面我们才可以实时的获取到系统与进程的信息。在交互界面中我们可以通过一些指令来操作和筛选。在此之前我们先来了解显示了哪些信息。

我们看到 top 显示的第一排,

内容 解释
top 表示当前程序的名称
11:05:18 表示当前的系统的时间
up 8 days,17:12 表示该机器已经启动了多长时间
1 user 表示当前系统中只有一个用户
load average: 0.29,0.20,0.25 分别对应 1、5、15 分钟内 cpu 的平均负载

load average 在 wikipedia 中的解释是 the system load is a measure of the amount of work that a computer system is doing 也就是对当前 CPU 工作量的度量,具体来说也就是指运行队列的平均长度,也就是等待 CPU 的平均进程数相关的一个计算值。

我们该如何看待这个 load average 数据呢?

阅读全文 »

iptables

在 RHEL7 之前的版本中关闭防火墙等服务的命令是

1
service iptables stop

/etc/init.d/iptables stop

firewalld

redhat7 之后使用了 firewalld 代替了原来的 iptables。

查看防火墙状态:systemctl status firewalld

  • 如果防火墙的状态参数是 inactive,则防火墙为关闭状态。
  • 如果防火墙的状态参数是 active,则防火墙为开启状态。本示例中防火墙为开启状态,因此需要关闭防火墙。

启动防火墙:systemctl start firewalld
关闭防火墙。如果防火墙为关闭状态可以忽略此步骤。

  • 如果您想临时关闭防火墙,运行命令 systemctl stop firewalld

说明 这只是暂时关闭防火墙,下次重启 Linux 后,防火墙还会开启。

  • 如果您想永久关闭防火墙,运行命令 systemctl disable firewalld
阅读全文 »

小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用 alternatives.log 日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是 年-月-日 的格式。alternatives.log 在 /var/log/ 下面。

1
2
3
4
sudo cron -f &
crontab -e 添加一下内容
0 3 * * * sudo rm /home/shiyanlou/tmp/*
0 3 * * * sudo cp /var/log/alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d)

挑战:历史命令

介绍

在 Linux 中,对于文本的处理和分析是极为重要的,现在有一个文件叫做 data1,可以使用下面的命令下载:

1
2
cd /home/shiyanlou
wget http://labfile.oss.aliyuncs.com/courses/1/data1

data1 文件里记录是一些命令的操作记录,现在需要你从里面找出出现频率次数前 3 的命令并保存在 /home/shiyanlou/result

目标

  1. 处理文本文件 /home/shiyanlou/data1
  2. 将结果写入 /home/shiyanlou/result
  3. 结果包含三行内容,每行内容都是出现的次数和命令名称,如 “100 ls”

提示

  1. cut 截取 (参数可以使用 -c 8-,使用 man cut 可以查看含义)
  2. uniq -dc 去重
  3. sort 的参数选择 -k1 -n -r
  4. 操作过程使用管道,例如:
1
2
cd /home/shiyanlou
cat data1 |....|....|.... > /home/shiyanlou/result

来源

2016 年百度校招面试题

参考答案

注意:请务必自己独立思考解决问题之后再对照参考答案,一开始直接看参考答案收获不大。

1
cat data1 | cut -c 8- | sort | uniq -dc | sort -rn -k1 | head -3 > /home/shiyanlou/result

挑战:数据提取

介绍

小明在做数据分析的时候需要提取文件中关于数字的部分,同时还要提取用户的邮箱部分,但是有的行不是数组也不是邮箱,现在需要你在 data2 这个文件中帮助他用正则表达式匹配出数字部分和邮箱部分。

数据文件可以使用以下命令下载:

1
2
cd /home/shiyanlou
wget http://labfile.oss.aliyuncs.com/courses/1/data2

下载后的数据文件路径为 /home/shiyanlou/data2

目标

  1. 在文件 /home/shiyanlou/data2 中匹配数字开头的行,将所有以数字开头的行都写入 /home/shiyanlou/num 文件。
  2. 在文件 /home/shiyanlou/data2 中匹配出正确格式的邮箱,将所有的邮箱写入 /home/shiyanlou/mail 文件,注意该文件中每行为一个邮箱。

提示

  1. 邮箱的格式匹配
  2. 注意符号 . 的处理

来源

2016 年 TapFun 校招面试题

参考答案

注意:请务必自己独立思考解决问题之后再对照参考答案,一开始直接看参考答案收获不大。

1
2
3
grep '^[0-9]' /home/shiyanlou/data2 > /home/shiyanlou/num

grep -E '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$' /home/shiyanlou/data2 > /home/shiyanlou/mail
0%