Linux 对文件进行了一个树状的抽象。/代表根目录,每一节目录也用/分开,所以在上图所展示 的/usr/bin/rm中,第一级目录是/根目录,第二级目录是usr目录,第三级是bin目录。最后的rm 是一个文件。
ls -F
查看当前目录下的文件和他的类型:1. * 结尾的是可执行文件; 2. = 结尾的是 Socket 文件; 3. @ 结尾的是软链接; 4. | 结尾的管道文件; 5. 没有符号结尾的是普通文件; 6. / 结尾的是目录。pwd
指令查看工作目录。cd
指令切换工作目录。which
指令查找一个执行文件所在的路径。 例如which rmls
显示文件信息。(list)rm
删除文件。(remove) rm hello
删除目录hellotouch
修改一个文件的时间戳,如果文件不存在会触发创建文件。vi
和nano
可以用来编辑文件。cat
查看完成的文件的内容适合小型文件。 大文件可以搭配 | moremore | less
查看一个文件但是只读取用户看到的内容到内存,因此消耗资源较少,适合在服务器上看日志。head
| tail
可以用来看文件的头和尾。grep
指令搜索文件内容。g 就是 global,全局;re 就是find
指令全局查找文件。find / -iname "*.txt"
查找所有的txt文件,-iname这个参数是用来匹配查找的,i 字母代表忽略大小写,这里也可以 用-name替代。ps
查看当前进程 p :processes 进程 s :snapshotps -ef
查看所有进程 -f
可以带上更多的描述字段.UID 指进程的所有者;
PID 是进程的唯一标识;
PPID 是进程的父进程 ID;
C 是 CPU 的利用率(就是 CPU 占用);
STIME 是开始时间;
TTY 是进程所在的 TTY,如果没有 TTY 就是 ?号;
TIME;执行的时间
CMD 是进程启动时的命令,如果不是一个 Shell 命令,而是用方括号括起来,那就是系统进程或者 内核过程。
>
符号叫作覆盖重定向;>>
叫作追加重定向。>每次 eg.ls -l > out
ls1
是错误指令,输出错误流, 单纯使用 > 无法 写到文件out 需要 ls1 &> out
sort a.txt| uniq
cat xx.cpp
or ls
统计行数xargs
从标准数据流中构造并执行一行行的指令。mkfifo pipe1
cat pipe1 & 然后 echo "xx" > pipe1
&符号代表指令在后台 执行,不会阻塞用户继续输入。group 组 里面的每个用户拥有一样的权限 。
root 超级管理员
1.读权限(r):控制读取文件。 2. 写权限(w):控制写入文件。 3. 执行权限(x):控制将文件执行,比如脚本、应用程序等。
问题一:初始权限问题。
文件被创建后的权限通常是: rw-rw-r-也就是用户、组维度不可以执行,所有用户可读
ls -l /usr/bin/ls
组维度不可读写 所有用户可读写
可以通过输入路径的方式执行文件 但是必须要在系统配置的路径下执行
echo $PATH
查看系统配置路径
不行,看内核态的总结
Linux 提供了权限包围的能力。比如一个应用,临时需要高级权限,可以利用交互界面(比如让用户输 入 root 账户密码)验证身份,然后执行需要高级权限的操作,然后马上恢复到普通权限工作。这样做可 以减少应用在高级权限的时间,并做到专权专用,防止被恶意程序利用。
查看用 less 因为太多了 比如nginx的access_lo日志
左到右依次是: IP 地址;时间;HTTP 请求的方法、路径和协议版本、返回的状态码;User Agent
根据今天的 access_log 分析出访问量 Top 前三的网页
/是文件系统根目录; rm是删除指令; -r是 recursive(递归); -f是 force(强制),遇到只读文件也不提示,直接删除。 所以rm -rf /就是删除整个文件系统上的所有文件,而且不用给用户提示。
sudo find / -name "*std*.h"
sudo find / -name "*.h" |grep std
xargs 将标准输入流中的字符串分割成一条条子字符串,然后再按照我们自己想要的方式构建 成一条条指令,大大拓展了 Linux 指令的能力。
比如我们可以用来按照某种特定的方式逐个处理一个目录下所有的文件;根据一个 IP 地址列表逐个 ping 这些 IP,收集到每个 IP 地址的延迟等
mkfifo pipe1
mkfifo pipe2
echo -n run | cat - pipe1 > pipe2 &
cat <pipe2 > pipe1
【解析】 Linux 遵循最小权限原则。
1.每个用户掌握的权限应该足够小,每个组掌握的权限也足够小。实际生产过程中,最好管理员权限 可以拆分,互相牵制防止问题。
2.每个应用应当尽可能小的使用权限。最理想的是每个应用单独占用一个容器(比如 Docker),这 样就不存在互相影响的问题。即便应用被攻破,也无法攻破 Docker 的保护层。
3.尽可能少的root。如果一个用户需要root能力,那么应当进行权限包围——马上提升权限(比如 sudo),处理后马上释放权限。
4.系统层面实现权限分级保护,将系统的权限分成一个个 Ring,外层 Ring 调用内层 Ring 时需要内 层 Ring 进行权限校验。
只读是指 r-- 还是 r-x,后者才能写目录下的文件.
host 指令提供了一个-t参数指定需要查找的记录类型。我们可以使用host -t ns {网址}。 另外 dig 也提供了同样的能力。如果你感兴趣,还可以使用man对系统进行操作。
【解析】 注意,这里有个小坑,就是 netstat 会有两行表头,这两行可以用 tail 过滤掉,下面tail -n +3就是告诉你 tail 从第 3 行开始显示。-a代表显示所有的 socket。
netstat -a | tail -n +3 | wc -l
包管理安装很方便,但是有两点劣势
第一点是需要提前将包编译好,因此有一个发布的过程,如果某个包没有发布版本,或者在某个平台上找不到对应的发布版本,就需要编译安装,第二点就是如果一个软件的定制程度很高,可能会在编译阶段传入参数,比如利用configure传入配置参数,这种时候就需要编译安装