欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索...

发布时间:2025/3/20 65 豆豆
生活随笔 收集整理的这篇文章主要介绍了 more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

linux

目录结构及文件基本操作

linux文件结构:

FHS(英文:Filesystem Hierarchy Standard

中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS

定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。

FHS 定义了两层规范:

第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin

则应该要放置可执行文件等等。

第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share

放置共享数据等等。

文件路径:

命令pwd获取当前文件路径

文件基本操作:

创建文件:

touch test

创建目录(用-p创建多层目录):

mkdir  -p

father/son/grandson

复制文件:

cp test father/son/grandson

复制目录(-r 表示递归复制):

cp -r father family

删除文件:

rm -f test  (-f 忽略一些提示,强制删除文件)

删除目录

rm -r family

移动文件:

mv file1 Documents

重命名:将文件"file1"重命名为"myfile"mv

旧的文件名 新的文件名

mv file1 myfile

批量重命名:用rename(需要使用到perl正则表达式来作为参数)

# 使用通配符批量创建 5 个文件

$touch file{1..5}.txt

# 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件

$rename 's/\.txt/\.c/' *.txt

# 批量将这 5 个文件,文件名改为大写

$rename 'y/a-z/A-Z/' *.c

查看文件:

cat -n file1.txt  (-n 参数可以显示行号)

使用more和less命令分页查看文件

如果说上面的 cat

是用来快速查看一个文件内容的,那么这个more和less就是天生用来"阅读"一个文件的内容的,比如说"man"手册内部就是使用的

less 来显示内容。其中more命令比较简单,只能向一个方向滚动,而"less"为基于"more"和"vi"(一个强大的编辑器,我们有单独的课程来让你学习)开发,功能更强大。less

的使用基本和 more 一致,具体使用请查看 man 手册,这里只介绍 more 命令的使用。

打开后默认只显示一屏内容,终端底部显示当前阅读的进度(百分比)。可以使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出。

使用head和tail命令查看文件

tail -n 5 file.txt  (看最后5行,head一样)

环境变量

要解释环境变量,得先明白变量是什么,准确的说应该是 Shell

变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell

中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。

示例:

$declare tmp

$tmp=shiyanlou

$echo $tmp

简单理解了变量的概念,就很好解释环境变量了,环境变量就是作用域比自定义变量要大,如Shell

的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX

系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell

程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell

的子进程的方式运行。

通常我们会涉及到的环境变量有三种:

1、当前Shell进程私有用户自定义变量,如上面我们创建的temp变量,只在当前shell中有效

2、Shell 本身内建的变量

3、从自定义变量导出的环境变量

关于环境变量,可以简单的理解成在当前进程的子进程是否有效,有效则为环境变量,否则不是。我们这里用export命令来体会一下,先在

Shell 中设置一个变量temp=shiyanlou,然后再新创建一个子

Shell 查看temp变量的值:

注意:为了与普通变量区分,通常我们习惯将环境变量名设为大写

添加自定义路径到“PATH”环境变量

在前面我们应该注意到PATH里面的路径是以:作为分割符,所以我们可以这样添加自定义路径:

$PATH=$PATH:/home/shiyanlou/mybin

注意这里一定要使用绝对路径

现在你就可以在其他任意目录执行那两个命令了。你可能会意识到这样还并没有很好的解决问题,因为我给

PATH 环境变量追加了一个路径,它也只是在当前 Shell

有效,我一旦退出终端,再打开就会发现又失效了。有没有方法让添加的环境变量全局有效?或者每次启动 Shell

时自动执行上面添加自定义路径到 PATH 的命令?下面我们就来说说后一种方式——让它自动执行。

在每个用户的 home 目录中有一个 Shell

每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是.zshrc,相应

Bash 的配置文件为.bashrc。它们在etc下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。

我们可以简单的使用下面命令直接添加内容到.zshrc中:

$echo "PATH=$PATH:/home/shiyanlou/mybin" >>.zshrc

上述命令中>>表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。

变量修改

变量的修改有以下几种方式:

变量设置方式

说明

${变量名#匹配字串}

从头向后开始匹配,删除符合匹配字串的最短数据

${变量名##匹配字串}

从头向后开始匹配,删除符合匹配字串的最长数据

${变量名%匹配字串}

从尾向前开始匹配,删除符合匹配字串的最短数据

${变量名%%匹配字串}

从尾向前开始匹配,删除符合匹配字串的最长数据

${变量名/旧的字串/新的字串}

将符合旧字串的第一个字串替换为新的字串

${变量名//旧的字串/新的字串}

将符合旧字串的全部字串替换为新的字串

比如要修改我们前面添加到 PATH 的环境变量。为了避免操作失误导致命令找不到,我们先将 PATH 赋值给一个新的自定义变量

path:

$ path=$PATH

$ echo $path

$ path=${path%/home/shiyanlou/mybin}

# 或使用通配符,*表示任意多个任意字符

$ path=${path%*/mybin}

变量删除

可以使用unset命令删除一个环境变量:

$ unset temp

搜索文件

与搜索相关的命令常用的有如下几个whereis,which,find,locate。

whereis简单快速

$whereis who

你会看到它找到了三个路径,两个可执行文件路径和一个 man

在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用locate命令。

locate快而全

通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次updatedb命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如查找

/etc 下所有以 sh 开头的文件:

$locate /etc/sh

注意,它不只是在

etc 目录下查找并会自动递归子目录进行查找

查找 /usr/share/ 下所有 jpg

文件:

$ locate /usr/share/\*.jpg

注意要添加*号前面的反斜杠转义,否则会无法找到

如果想只统计数目可以加上-c参数,-i参数可以忽略大小写进行查找,whereis

的-b,-m,-s同样可以是使用。

which小而精

which本身是 Shell 内建的一个命令,我们通常使用which来确定是否安装了某个指定的软件,因为它只从PATH环境变量指定的路径中去搜索命令:

$ which man

find精而细

find应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find命令强大到,要把它将明白至少需要单独好几节课程才行,我们这里只介绍一些常用的内容。

在指定目录下搜索指定文件名的文件:

$ find /etc/ -name interfaces

注意 find

命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option]

[action]

与时间相关的命令参数:

参数

说明

-atime

最后访问时间

-ctime

创建时间

-mtime

最后修改时间

下面以-mtime参数举例:

-mtime n: n 为数字,表示为在n天之前的”一天之内“修改过的文件

-mtime +n: 列出在n天之前(不包含n天本身)被修改过的文件

-mtime -n: 列出在n天之前(包含n天本身)被修改过的文件

newer file: file为一个已存在的文件,列出比file还要新的文件名

列出 home 目录中,当天(24

小时之内)有改动的文件:

$find ~ -mtime 0

列出用户家目录下比Code文件夹新的文件:

$find ~ -newer /home/shiyanlou/Code

总结

以上是生活随笔为你收集整理的more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。