Skip to content

导航

在 Linux 中导航、创建、移动、编辑和删除文件和文件夹并在操作系统上找到它们

查看当前目录

$ pwd
/home/dark

查看当前文件夹中的内容

$ ls
$ ls -l /var/

切换目录

切换到 /var/ 目录下
$ cd /var/
切换到上次所在目录
$ cd -
切换到家目录
$ cd ~

使用文件和目录

创建、移动和复制

创建文件

$ touch <name>

创建目录

$ mkdir <name>

查看目录结构

查看当前目录结构
$ $ree .
.
├── 1.png
├── 2.png

编辑文件 编辑文件的方法有很多种,最常见的文本编辑器是vivim ,简单一点的nano。编辑器指定文件名可直接创建。

创建并编辑文件 notes.txt
$ nano notes.txt

^G Get Help    ^O Write Out   ^W Where Is    ^K Cut Text    ^J Justify     ^C Cur Pos     M-U Undo
^X Exit        ^R Read File   ^\ Replace     ^U Uncut Text  ^T To Spell    ^_ Go To Line  M-E Redo

^ 代表 [CTRL] [CTRL + O] 并回车确认 保存 [CTRL + X] 退出编辑

查看文件

$ cat notes.txt

查找文件和目录

找到我们需要的文件和文件夹至关重要,当我们获取Linux系统的访问权限后,就必须找到配置文件、用户或管理员创建的脚本以及其他文件和文件夹。

which 返回应执行文件或者链接的路径,可确认某些工具在系统上是否可用。

$ which python
/usr/bin/python
$ which abcd

find 查找文件和文件夹,过滤结果。过滤参数:文件大小、日期等

$ find <location> <options>
$ find / -type f -name *.conf -user root -size +20k -vewermt 2022-09-17 -exec ls -al {} \; 2>dev/null
选项 描述
-type f 定义搜索对象的类型。'f' 代表 'file'
-name *conf 定义文件名称,*通配符代表以.conf结尾的文件
-user root 过滤出所有者为root用户的所有文件
-size +20k 查看大于20kib的文件
-newermt 2022-09-17 仅显示比指定日期新的文件
-exec ls -al {} \; 执行指定的命令,大括号作为每个结果的站位符,反斜杠使下一个字符不会被shell作为指令执行,否则分号将终止命令并且不会到达重定向
2>dev/null STDERR标准错误重定向到null device,确保终端不显示任何错误信息,不是find命令的选项。

locate

更新本地数据库
$ sudo updatedb
搜索.conf扩展名文件
$ locate *.conf

文件描述和重定向

文件描述符

Unix/Linux 操作系统中的文件描述符(FD)是由内核维护以执行输入/输出操作的连接指示器

1、输入数据流 STDIN - 0 2、输出数据流 STDOUT - 1 3、与发生错误相关的输出数据流 STDERR - 2

认识标准输入和标准输出
$ cat 
I am j    #标准输入
I am j    #标准输出
认识标准错误
$ find /etc/ -name shadow
find: '/etc/dovecot/private': Permission denied  #标准错误'Permission denied'

标准输出和标准错误重定向

将标准错误重定向至 /dev/null 等于丢弃
$ find /etc/ -name shadow 2>/dev/null

将标准输出重定向到文本文件
$ find /etc/ -name shadow 2>/dev/mull > results.txt
将标准输出重定向给grep
$ find /etc/ -name *.conf 2>/dev/null | grep systemd
标准输出标准错误重定向到不同文件
$ find /etc/ -name shadow 2>stderr.txt > stdout.txt
将标准输出追加到stdout.txt,而不是覆盖文件内容
$ find /etc/ -name passwd >> stdout.txt 2>/dev/null

标准输入重定向

将 stdout.txt 的文件内容作为标准输入
$ cat < stdout.txt

将标准输入流重定向到文件,EOF函数定义了输入的结束
$ cat << EOF > stream.txt

内容过滤

页面形式浏览文本文件
$ more /etc/passwd
$ less /etc/passwd  #文本不会保留在终端

查看文本文件的部分信息
$ head /etc/passwd  #默认显示前10行
$ tail /etc/passwd  #默认显示最后10行

给输出内容排序
$ cat /etc/passwd | sort  #默认字母顺序

使用分隔符进行分隔
$ cat /etc/passwd | grep -v "false\|nologin" | cut -d":" -f1

替换
$ cat /etc/passwd | grep -v "false\|nologin" | tr ":" " "  #将 ":" 替换成空格

以表格形式显示
$ cat /etc/passwd | column -t

指定要显示的行
$ cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " | awk '{print $1, $NF}'  #展示第一行和最后一行

sed 替换 regex查找 并替换
$ cat /etc/passwd | grep -v "false\|nologin" | tr ":" " " | awk '{print $1, $NF}' | sed 's/bin/HTB/g'  #s代表替换命令 g代表替换所有匹配项

计数 行数
wc -l 


权限管理

Linux 中每个文件和目录都属于特定用户和特定组,每个用户和组创建的文件都归属于自己。分为三种不同类型的权限 r(读), w(写), x(执行),分别赋给owner(当前用户), group(当前用户所属组), others(其他用户或组) 角色。

$ ls -l /etc/passwd

- rwx rw- r--   1 root root 1641 May  4 23:42 /etc/passwd
- --- --- ---   |  |    |    |   |__________|
|  |   |   |    |  |    |    |        |_ Date
|  |   |   |    |  |    |    |__________ File Size
|  |   |   |    |  |    |_______________ Group
|  |   |   |    |  |____________________ User
|  |   |   |    |_______________________ Number of hard links
|  |   |   |_ 其他用户组权限 (read)
|  |   |_____ 组权限 (read, write)
|  |_________ 用户权限 (read, write, execute)
|____________ 文件类型 (- = File, d = Directory, l = Link, ... )

更改权限

设置 owner, group, others 权限

$ ls -l text
-rw-r----x 1 root root 0 Sep 22 15:58 text

$ chmod a+r text && ls -l text  #给所用角色分配读权限
-rw-r--r-- 1 root root 0 Sep 22 15:58 text
$ chmod 754 text && ls -l text  #8进制分配
-rwxr-xr-- 1 root root 0 Sep 22 15:58 text

更改所有者

语法
$ chown <user>:<group> <file/directory>

SUID & GUID

https://cloud.tencent.com/developer/article/1728129

linux