文件
sed
-
s
命令 -
s
命令, 只打印替换过的行/p
打印处理过的行-n
仅显示处理过后的结果
-
/d
命令 -
&
指代已匹配的字符 -
-e
多次执行 -
a\
在匹配到的下一行追加 -
i\
在匹配到的下一行追加 -
;
-
查看空格, tab
wc
行数, 单词数, 字节数, 文件名
l
行数w
单词数c
字符数
cut
-
按字节
-b
, 按字符-c
-
-f
sort
-o
指定文件名保存-f
忽略大小写-u
删除重复行-r
反向-R
乱序-t
分隔符,-k
-n
按数值
uniq
-c
计数-d
只输出重复-u
只输出不重复-i
忽略大小写-f
跳过前n个域-s
跳过前n个字符
awk
-
$0
当前行,$n
第n个字段 -
-F
指定分隔符 -
-f
指定文件 -
变量
NF
代表字段数 -
变量
NR
代表当前行数 -
{}
字符串使用双引号 -
toupper()
,tolower()
-
条件
tr
-
字符集1 替换为 字符集2
EXAMPLES
重复次数最多的5条命令
注意使用
-n
按数值排序
192. Word Frequency
Difficulty: Medium
Write a bash script to calculate the frequency of each word in a text file words.txt
.
For simplicity sake, you may assume:
words.txt
contains only lowercase characters and space' '
characters.- Each word must consist of lowercase characters only.
- Words are separated by one or more whitespace characters.
Example:
Assume that words.txt
has the following content:
the day is sunny the the
the sunny is is
Your script should output the following, sorted by descending frequency:
the 4
is 3
sunny 2
day 1
Note:
- Don’t worry about handling ties, it is guaranteed that each word’s frequency count is unique.
- Could you write it in one-line using ?
Solution
Language: Bash
193. Valid Phone Numbers
Difficulty: Easy
Given a text file file.txt
that contains list of phone numbers (one per line), write a one liner bash script to print all valid phone numbers.
You may assume that a valid phone number must appear in one of the following two formats: (xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit)
You may also assume each line in the text file must not contain leading or trailing white spaces.
Example:
Assume that file.txt
has the following content:
987-123-4567
123 456 7890
(123) 456-7890
Your script should output the following valid phone numbers:
987-123-4567
(123) 456-7890
Solution
Language: Bash
磁盘管理
atime, mtime, ctime
- Access:
cat
,more
,less
- Modify
- Change
- 只Change, 不Modify的情况:
mv
,chrown
/etc/passwd
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
进程管理
ps
a
: show processes for all usersu
: display the process’s ownerx
: also show processes not attached to a terminal
kill
-1
,HUP
: 中断终端-2
,ctrl + c
-9
,KILL
:强制终止-18
,CONT
: 继续, 与19相反-19
,STOP
,ctrl + z
网络
tcpdump
netstat
-a
: 包含LISTEN
的-t
: tcp-u
: udp-l
: 只包含LISTEN
-s
: 各种协议的统计信息-p
: 显示连线的进程使用-n
: 不要解析dns-c
: 隔一秒输出一次
lsof
Linux 一切皆文件
-
-u
: 某个用户打开的文件信息 -
-c
: 某个程序打开的文件信息 -
-i
: 网络连接-
所有的tcp
-
:3306
: 按端口查找
-
-
-p
: 通过进程号查找
nc
-n
: 不适用dns, 直接使用ip-u
: 扫描udp, 默认是tcp
tcpdump
-
监听指定的host
-
监听本机udp且端口为123
telnet
-
查看端口是否开放
whois
-
查看域名信息
traceroute
-m
限制跳数
mtr
ping+traceroute
iptables
- 4个表
- nat(状态转换表)
- filter(数据过滤表)
- raw(状态跟踪表)
- mangle(包标记表)
- 内置链
- input(入站)
- output(出站)
- forward(转发)
- prerouting(路由前)
- postrouting(路由后)
-t
: 指定表名-t filter
-A
: 给链追加 规则-A INPUT
-p
: 指定协议名-p tcp
-j
: option-j DROP
--dport
: 指定端口--dport 8081
-
重置已有规则
-
拒绝所有input流量
-
DNAT(Destination Network Address Translation): 目的地址转换
-
SNAT(Source Network Address Translation): 源地址转换
怕其他
gdb
g++ -g
: Produce debugging information in the operating system’s native format (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging information.run
:r
断点处停止next
: 单步运行, 不进入函数step
: 单步运行, 进入函数break/delete n
: 第n行设置/删除断点enable/disable n
: 第n行开启/暂停断点list
print
watch
: 监视的表达式值变化, 停止程序
二、主机规划与磁盘分区
2.2 磁盘分区
磁盘(按照政策顺序) /dev/sd[a-p]
分区: primary, extend
MBR(master boot recoder): 主要开机记录区, 安装开机管理程序的地方
2.2.3 BIOS 和 UEFI
固件: 写到硬件上的一个软件程序
BIOS: 计算机主动执行的第一个程序
开机到操作系统前的流程:
- BIOS:开机主动执行的固件,会认识第一个可开机的设备;
- MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
- 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
- 核心文件:开始操作系统的功能…
2.2.4 挂载
五、Linux文件权限与目录配置
5.1使用者与群组
5.2Linux文件权限概念
5.2.1 Linux文件属性
- 文件拥有者可具备的权限
- 加入此群组之帐号的权限
- 非本人且没有加入本群组之其他帐号的权限
5.2.2 改变文件属性和权限
-
chgrp: 改变文件所属群组
-
chown: 改变文件拥有者
-
chmod: 改变文件权限
u,g,o
三种身份权限- +(加入) -(除去) =(设置)
5.2.3 权限对目录的意义
内容 | r | w | x | |
---|---|---|---|---|
文件 | 详细数据 | 读文件内容 | 写文件内容 | 执行文件内容 |
目录 | 文件名 | 读文件名 | 修改文件名 | 进入该目录的权限 |
5.3 目录配置
5.3.1 Filesystem Hierarchy Stantard
可分享的,不可分享的,不变的,可变的
根目录(/)所在分区越小越好,且应用程序安装的软件最好不要与根目录放在同一个分区内
/bin
: 单人维护模式下还能执行的命令/boot
:- Linux核心文件
- 开机菜单
- 开机所需配置文件
/dev
: 外设/etc
: 系统配置文件/etc/modprobe.d/
模块装载时的配置文件/etc/passwd
/etc/fstab
系统挂载
/lib
:- 开机使用的函数库
/bin
和/sbin
指令调用的函数库
/media
: 媒体/mnt
: 暂时挂载额外设备/opt
: 第三方协力软件/run
: 开机后所产生的各项信息/sbin
: 开机过程需要的,包括了开机、修复和还原系统需要的指令/srv
: service缩写,网络服务启动后的数据目录,比如WWW,FTP/usr
: Unix操作系统软件资源,可分享的和不可变动的FHS建议 所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录。/usr/bin
: 系统可执行命令的主要目录/usr/lib
:/usr/local
: 自行安装, 非distribution默认/usr/sbin
: 非系统正常运行需要的指令/usr/share
/var
: 主要针对常态性变动的文件,包括高速缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件, 包括程序文件(lock file,run file),或者例如MySQL数据库的文件/var/cache
: 程序本身运行过程中的暂存盘/var/lib
: 程序执行过程中需要用到的数据文件放置目录/var/lock
: 确保某些文件或者硬件只会给单一软件使用/var/log
: 登陆文件目录/var/log/wtmp
: last命令
/var/run
: 程序和服务的PID
/home
/liv64
: 与/lib
不同格式的二进制函数库/root
: 系统管理员的主文件夹/lost+found
/proc
: 虚拟文件系统,放置的数据在内存中/proc/cpuinfo
/proc/interrupts
: 中断/proc/meminfo
/proc/swaps
/proc/version
: 内核版本/proc/mounts
/sys
5.3.2 目录树
六、Linux文件与目录管理
pwd -P
: 显示确实的路径,也就是link目录的原目录mkdir -m 711 test2
: 设置文件权限