Linux系统学习——指令三
- Linux系统学习——指令三
- `chmod` — 文件执行权限
- 添加文件执行权限
- 去除文件执行权限
- 查找文件中特定关键字
- 使用vi编辑文件并查找特定关键字
- 文本文件查找特定关键字
- 1: 使用 `grep` 命令
- 2: 使用 `find` 命令
- 3: 使用 `awk` 命令
- 4: 使用 `sed` 命令
- 5: 使用 `ag` 命令(The Silver Searcher)
- 6: 使用 `ack` 命令
- 7: 使用 `fgrep` 命令
- 8: 使用 `egrep` 命令
- 9: 使用 `cat` 和 `grep` 结合
- 10: 使用 `less` 与 `-i` 选项
- 查看文件执行权限及文件大小
- 1: 使用 `ls` 命令
- 2: 使用 `stat` 命令
- 3: 使用 `file` 命令
- 4: 使用 `du` 命令
- 5: 使用 `chmod` 查看权限
- 6: 使用 `find` 命令
- 7: 使用 `du` 和 `awk` 结合
- 8: 使用 `ls` 和 `awk` 结合
- 9: 使用 `tree` 命令
- 10: 使用 `ls` 和管道
- `find` 指令详解
- 基本语法:
- 常用选项:
- 挂载U盘
- 取消挂载
- 示例
Linux系统学习——指令三
chmod
— 文件执行权限
添加文件执行权限
要给文件添加执行权限,可以使用 chmod
命令。chmod
是 “change mode” 的缩写,用于改变文件或目录的权限。
基本语法:
chmod [permissions] [file/directory]
这里的 [permissions]
可以是数字或符号表示法。
数字表示法:
4
代表读权限(r)2
代表写权限(w)1
代表执行权限(x)
权限的数字是将对应的权限值相加得到的。例如:
- 读和写权限:
4+2 = 6
- 读、写和执行权限:
4+2+1 = 7
符号表示法:
u
代表文件所有者(owner)g
代表文件所属组(group)o
代表其他用户(others)a
代表所有用户(所有者、所属组和其他用户)
权限可以是:
+
添加权限-
移除权限=
赋予权限(同时移除其他所有权限)
具体操作:
-
给所有用户添加执行权限:
如果想要给所有用户添加对某个文件的执行权限,可以使用:chmod a+x filename
或者使用数字表示法:
chmod 1 filename
-
只给文件所有者添加执行权限:
如果只想给文件所有者添加执行权限,可以使用:chmod u+x filename
或者使用数字表示法:
chmod u=x filename
-
使用数字表示法添加执行权限:
如果知道要添加的权限的数字代码,可以直接使用数字表示法。例如,给文件所有者添加读、写和执行权限:chmod 7 filename
-
递归给目录及其内容添加执行权限:
如果想要递归地给一个目录及其所有子文件和子目录添加执行权限,可以使用:chmod +x /path/to/directory
- 执行权限 允许用户运行文件作为一个程序。对于目录,执行权限允许用户进入目录(即访问目录中的文件)。
- 添加执行权限 通常用于脚本或可执行文件,以便用户可以运行它们。
- 权限的组合 可以同时添加读、写和执行权限,具体取决于你的需求。
请注意,只有文件的所有者或具有适当权限的用户(如 root 用户)才能更改文件的权限。使用
chmod
更改权限时,要谨慎操作,以避免意外地暴露敏感文件。
去除文件执行权限
去除文件的执行权限,可以使用 chmod
命令。这个命令用于改变文件或目录的权限。要去除一个文件的执行权限,可以使用 -x
选项,如下所示:
chmod -x filename
这里的 filename
是想要去除执行权限的文件名。
例如,如果有一个名为 script.sh
的脚本文件,可以使用以下命令去除它的执行权限:
chmod -x script.sh
这将从所有用户(所有者、所属组和其他用户)中移除对该文件的执行权限。
如果只想从特定用户组或所有者中去除执行权限,可以指定 -u
(用户)、-g
(组)或 -o
(其他)选项,例如:
-
去除文件所有者的执行权限:
chmod -u-x script.sh
-
去除文件所属组的执行权限:
chmod -g-x script.sh
-
去除其他用户的执行权限:
chmod -o-x script.sh
注意,需要有足够的权限来改变文件的权限,通常这意味着需要是文件的所有者或者具有管理员权限。
查找文件中特定关键字
使用vi编辑文件并查找特定关键字
以查找关键字“img”
为例:
使用 vi
编辑器编辑文件并查找关键字 "img"
的步骤如下:
-
打开文件:
首先,使用vi
命令打开想要编辑的文件:vi filename.txt
-
进入正常模式:
vi
编辑器打开时,默认处于正常模式(Normal mode)。如果从命令模式(Command mode)进入vi
,可以通过按Esc
键回到正常模式。 -
搜索关键字:
在正常模式下,输入/
来进入搜索模式,然后输入想要查找的关键字 “img”,接着按Enter
键:/img
这将向前搜索文件中第一个出现的 “img”。
-
导航搜索结果:
- 要查找下一个出现的 “img”,按
n
键。 - 要查找上一个出现的 “img”,按
Shift
+n
。
- 要查找下一个出现的 “img”,按
-
修改内容:
- 当找到包含
"img"
的行后,可以使用正常模式下的命令来修改文本。例如,按0
可以移动到行首,按$
可以移动到行尾。 - 使用
i
进入插入模式(Insert mode),此时可以在光标位置插入或修改文本。 - 如果想要替换某个特定字符,可以使用
r
命令,然后输入想要替换的字符。 - 如果想要替换整行,可以使用
:s/old/new
命令,其中old
是要替换的文本,new
是新文本。按Enter
完成替换。
- 当找到包含
-
保存并退出:
- 完成修改后,按
Esc
键退出插入模式回到正常模式。 - 输入
:wq
保存更改并退出vi
编辑器。 - 如果想保存更改但不退出,可以只输入
:w
然后按Enter
。 - 如果想退出不保存更改,可以输入
:q!
然后按Enter
。
- 完成修改后,按
-
使用可视模式选择文本:
- 如果想要修改或复制一行或多行中的多个地方,可以使用可视模式(Visual mode)。按
v
进入可视模式,然后使用方向键选择文本。之后,可以使用y
复制选中的文本,或者直接输入字符进行替换。
- 如果想要修改或复制一行或多行中的多个地方,可以使用可视模式(Visual mode)。按
-
使用全局命令:
- 如果想要替换文件中所有出现的 “img”,可以使用全局命令
:%s//img/
。按Enter
后,vi
会询问是否替换每一处,可以输入a
来替换所有匹配项,或者逐一确认。
- 如果想要替换文件中所有出现的 “img”,可以使用全局命令
这些是在 vi
编辑器中查找和修改关键字 “img” 的基本步骤。vi
是一个功能强大的文本编辑器,具有许多高级功能,可以通过阅读其文档或使用在线资源来进一步学习。
文本文件查找特定关键字
在文本文件中搜索包含特定关键字(如 “img”)的内容,可以使用多种命令行工具。下面是一些常见的方法:
1: 使用 grep
命令
grep
是最常用的文本搜索工具之一。使用 -i
选项可以进行不区分大小写的搜索。
grep -i "img" filename.txt
如果只想打印匹配行的行号,可以使用 -n
选项:
grep -in "img" filename.txt
2: 使用 find
命令
虽然 find
主要用于搜索文件,但也可以与 grep
结合使用来搜索文本。
find . -type f -name "*.txt" -exec grep -i "img" {} +
这个命令会在当前目录及其子目录下搜索所有 .txt
文件,查找包含 “img” 的行。
3: 使用 awk
命令
awk
是一个强大的文本处理工具,可以用来搜索包含特定文本的行。
awk '/img/ { print }' filename.txt
4: 使用 sed
命令
sed
是一个流编辑器,可以用来搜索和替换文本。
sed -n '/img/ p' filename.txt
这个命令会打印所有包含 “img” 的行。
5: 使用 ag
命令(The Silver Searcher)
ag
是一个类似于 grep
的工具,但通常更快,特别是对于大型文件。
ag "img" filename.txt
6: 使用 ack
命令
ack
是另一个类似于 grep
的工具,但专为程序员设计,提供了更多的灵活性。
ack "img" filename.txt
7: 使用 fgrep
命令
fgrep
是 grep
的一个变体,它使用固定的字符串进行搜索,而不是正则表达式,这可能会更快。
fgrep "img" filename.txt
8: 使用 egrep
命令
egrep
是 grep
的扩展版本,支持扩展的正则表达式。如果需要使用正则表达式搜索 “img”,可以使用它。
egrep "img" filename.txt
9: 使用 cat
和 grep
结合
首先使用 cat
命令将文件内容输出,然后通过管道传递给 grep
。
cat filename.txt | grep -i "img"
10: 使用 less
与 -i
选项
less
是一个分页程序,可以用来查看文件内容。使用 -i
选项可以进行不区分大小写的搜索。
less -i filename.txt
然后,在 less
中输入 img
并按回车键进行搜索。
每种方法都有其特点和适用场景。grep
是最通用和强大的工具,适合大多数搜索任务。awk
和 sed
提供了更多的文本处理能力,而 ag
和 ack
提供了更快的搜索速度和额外的功能。根据具体需求和偏好,选择最适合的方法。
查看文件执行权限及文件大小
要查看 /usr/local/bin
目录下可执行文件的执行权限和文件大小等详细信息,可以使用多种不同的命令和方法。下面是一些常用的方法:
1: 使用 ls
命令
ls
命令是最常用的查看文件和目录信息的命令。使用 -l
(长列表)选项可以显示文件的详细信息,包括权限、所有者、大小和最后修改时间。
ls -l /usr/local/bin
2: 使用 stat
命令
stat
命令提供了文件的详细状态信息,包括文件大小、块大小、总块数、inode 号、权限等。
stat /usr/local/bin/appwtd
3: 使用 file
命令
file
命令用于确定文件的类型,但它也可以显示一些基本的文件权限信息。
file /usr/local/bin/appwtd
4: 使用 du
命令
du
(disk usage)命令用于查看文件或目录占用的磁盘空间。使用 -h
选项可以以易读的格式显示大小。
du -h /usr/local/bin/appwtd
5: 使用 chmod
查看权限
虽然 chmod
主要用于改变文件权限,但可以使用它来查看文件当前的权限。
chmod /usr/local/bin/appwtd
6: 使用 find
命令
find
命令可以用来查找并显示符合条件的文件列表。结合 -exec
选项,可以对找到的每个文件执行特定的命令。
find /usr/local/bin -type f -exec ls -l {} \;
7: 使用 du
和 awk
结合
如果想要获取所有文件的大小并进行排序,可以使用 du
命令结合 awk
进行处理。
du -Sh /usr/local/bin/* | sort -h
这里 -S
表示不包括子目录的大小,-h
表示以易读的格式显示。
8: 使用 ls
和 awk
结合
类似于 du
,ls
也可以与 awk
结合使用,以提取和格式化输出。
ls -l /usr/local/bin | awk '{print $5, $9}'
这将打印出文件的大小和名称。
9: 使用 tree
命令
tree
命令以树状图的形式显示目录的内容,包括文件大小。
tree -h /usr/local/bin
-h
选项使文件大小以易读的格式显示。
10: 使用 ls
和管道
可以将 ls
命令的输出通过管道传递给其他命令,如 grep
或 awk
,以进一步处理或筛选信息。
ls -l /usr/local/bin | grep '^-' | awk '{print $5, $9}'
这将只显示具有常规文件权限的文件的大小和名称。
find
指令详解
find
是一个在 Unix 和 Unix-like 系统(包括 Linux 和 macOS)中非常强大的命令行工具,用于在文件系统中搜索符合条件的文件或目录。下面是 find
命令的一些基本用法和选项的详细解释:
基本语法:
find [path] [expression]
path
:指定搜索的起始目录。如果不指定,默认为当前目录。expression
:定义搜索条件的表达式。
常用选项:
-
-name
或-iname
:按照文件名搜索。-iname
是不区分大小写的版本。- 例如:
find / -name "*.txt"
搜索根目录下所有以.txt
结尾的文件。
- 例如:
-
-type
:指定文件类型,如f
为普通文件,d
为目录。- 例如:
find / -type d
搜索根目录下的所有目录。
- 例如:
-
-user
或--group
:按照文件所有者或所属组搜索。- 例如:
find / -user john
搜索属于用户 john 的所有文件。
- 例如:
-
-mtime
或-ctime
:按照文件内容最后修改时间或最后状态改变时间搜索。时间格式为天数。- 例如:
find / -mtime 0
搜索过去 24 小时内被修改过的文件。
- 例如:
-
-perm
:按照文件权限搜索。- 例如:
find / -perm 755
搜索权限为 755 的文件。
- 例如:
-
-size
:按照文件大小搜索。单位可以是c
(字节)、k
(千字节)、M
(兆字节)等。- 例如:
find / -size +10M
搜索大于 10MB 的文件。
- 例如:
-
-maxdepth
或--mindepth
:限制搜索的目录深度。- 例如:
find / -maxdepth 2
限制搜索深度不超过 2 级子目录。
- 例如:
-
-exec
:对每个匹配的文件执行指定的命令。- 例如:
find / -type f -exec ls -l {} \;
对每个找到的文件执行ls -l
命令。
- 例如:
-
-print
:打印每个匹配的文件名(默认行为,通常不需要显式指定)。 -
-o
或-or
:逻辑或操作符,用于连接多个搜索条件。- 例如:
find / -name "*.txt" -or -name "*.pdf"
搜索以.txt
或.pdf
结尾的文件。
- 例如:
-
-prune
:排除搜索结果中的某些目录。- 例如:
find / -path /tmp -prune -o -print
打印所有文件,除了/tmp
目录下的。
- 例如:
示例:
find /home/user/docs -type f -name "*.txt" -mtime -7 -exec grep "keyword" {} +
这个命令在 /home/user/docs
目录下搜索过去 7 天内修改过的以 .txt
结尾的文件,并在这些文件中搜索包含 “keyword” 的行。
find
命令非常灵活,可以结合各种选项和操作符来满足复杂的搜索需求。
下面是 find
命令的一些常用选项及其示例说明:
-
-name
:按照文件名搜索。find /path/to/search -name "*.txt"
这个命令搜索指定路径下所有扩展名为
.txt
的文件。 -
-iname
:不区分大小写地按文件名搜索。find /path/to/search -iname "*.txt"
这个命令搜索指定路径下所有扩展名为
.txt
的文件,忽略大小写。 -
-type
:指定文件类型搜索。find /path/to/search -type f
这个命令搜索指定路径下所有类型为普通文件的文件。
-
-user
:按文件所有者搜索。find /path/to/search -user username
这个命令搜索指定路径下所有者为
username
的文件。 -
--group
:按文件所属组搜索。find /path/to/search -group groupname
这个命令搜索指定路径下所属组为
groupname
的文件。 -
-mtime
:按文件内容最后修改时间搜索(单位为天)。find /path/to/search -mtime -7
这个命令搜索指定路径下过去 7 天内被修改过的文件。
-
-ctime
:按文件状态最后改变时间搜索。find /path/to/search -ctime +7
这个命令搜索指定路径下超过 7 天前状态被改变的文件。
-
-atime
:按文件最后访问时间搜索。find /path/to/search -atime 2
这个命令搜索指定路径下恰好 2 天前被访问过的文件。
-
-perm
:按文件权限搜索。find /path/to/search -perm -644
这个命令搜索指定路径下权限为
-rw-r--r--
(即 644)的文件。 -
-size
:按文件大小搜索。find /path/to/search -size +100k
这个命令搜索指定路径下大于 100KB 的文件。
-
-maxdepth
:限制搜索的目录深度。find /path/to/search -maxdepth 1
这个命令限制搜索深度不超过指定路径的第一级子目录。
-
--mindepth
:设置搜索的最小目录深度。find /path/to/search -mindepth 2
这个命令不搜索指定路径下至少 2 级子目录内的文件。
-
-exec
:对匹配的文件执行命令。find /path/to/search -type f -exec rm {} \;
这个命令删除指定路径下找到的所有普通文件。
-
-print
:打印匹配的文件名(通常不需要指定,因为这是find
的默认行为)。find /path/to/search -print
-
-o
或-or
:逻辑或操作符,用于连接多个条件。find /path/to/search -name "*.txt" -or -name "*.pdf"
这个命令搜索指定路径下所有扩展名为
.txt
或.pdf
的文件。 -
-prune
:排除搜索结果中的某些目录。find /path/to/search -path /path/to/search/logs -prune -o -print
这个命令打印指定路径下的所有文件,除了
logs
目录及其内容。 -
-not
或!
:逻辑非操作符,用于排除某些条件。find /path/to/search ! -name "*.txt"
这个命令搜索指定路径下所有除了扩展名为
.txt
的文件。
在Linux系统中,挂载U盘(即USB闪存驱动器)是一个常见的操作,用于访问U盘上的文件。以下是挂载和取消挂载U盘的基本指令及其参数的详细说明:
挂载U盘
-
lsblk - 列出所有可用的块设备,包括U盘。
- 作用:显示所有存储设备及其分区的列表。
- 使用示例:
lsblk
-
fdisk -l 或 parted -l - 列出所有磁盘分区表。
- 作用:显示磁盘分区信息,包括U盘的分区。
- 使用示例:
fdisk -l
或parted -l
-
mkdir - 创建挂载点。
- 作用:创建一个目录,作为挂载U盘的挂载点。
- 参数:
-p
确保目录存在,如果不存在则创建它。 - 使用示例:
mkdir -p /mnt/usb
-
mount - 挂载文件系统。
- 作用:将设备或分区挂载到指定的挂载点。
- 参数:
-o
指定挂载选项,如rw
(读写模式)、ro
(只读模式)等。-U
指定U盘的UUID(通用唯一识别码)。-L
指定U盘的标签。
- 使用示例:
mount -t vfat /dev/sdb1 /mnt/usb
(假设U盘的分区是/dev/sdb1
,文件系统类型是vfat
)
取消挂载
-
umount - 卸载文件系统。
- 作用:从挂载点卸载文件系统。
- 参数:
-f
强制卸载。-l
懒卸载,仅在文件系统不再忙碌时卸载。
- 使用示例:
umount /mnt/usb
-
lsof - 列出打开的文件。
- 作用:检查是否有进程正在使用挂载点的文件。
- 使用示例:
lsof /mnt/usb
在使用umount
命令之前,确保没有进程正在使用挂载点的文件。如果有,可以使用lsof
命令查找并关闭这些进程。
示例
- 插入U盘。
- 使用
lsblk
或fdisk -l
找到U盘的设备名,例如/dev/sdb1
。 - 使用
mkdir -p
创建挂载点,例如/mnt/usb
。 - 使用
mount
命令将U盘挂载到挂载点,例如mount -t vfat /dev/sdb1 /mnt/usb
。 - 访问U盘文件:
cd /mnt/usb
。 - 完成操作后,使用
umount
命令卸载U盘,例如umount /mnt/usb
。
具体的文件系统类型(如vfat
、ntfs
、ext4
等)和挂载选项可能根据U盘的文件系统有所不同。在挂载之前,确保系统中已经安装了相应的文件系统驱动。