丙午🐎年

acc8226 的博客

这一节我们将介绍这几个命令 tr(注意不是 tar),col,join,paste。实际这一节是上一节关于能实现管道操作的命令的延续,所以我们依然将结合管道来熟悉这些命令的使用。

tr

tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。

使用方式

1
tr [option]...SET1 [SET2]

常用的选项

选项 说明
-d 删除和 set1 匹配的字符,注意不是全词匹配也不是按字符顺序匹配
-s 去除 set1 指定的在输入文本中连续并重复的字符
阅读全文 »

内建命令与外部命令之分

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,这样就可以得到相应的帮助,看到你想要的东西了。试试下面这个命令是不是能看到你想要的东西了。

阅读全文 »

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
阅读全文 »

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 数据呢?

阅读全文 »

小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用 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

参考答案

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

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%