linux_shell笔记(二)

 

文件系统:文件系统是一种数据结构,该数据结构通常驻留在磁盘上,用来组织和管理文件的目录。文件系统用来存储用户工作中用到的数据和系统运行所需的数据。

 

代表文件系统的结构图是一棵倒挂的树,树根在最上部。这些树都是从根往下生长,并且存在从根到每个文件的路径,每条路径的末端为目录文件或普通文件。向上是指靠近根,向下是指远离根。靠近根的称为父目录,远离根的称为子目录。路径名是跟踪某条从一个文件分支到另一个文件的路径所经过的所有节点名组成的序列。现在大多数文件系统要求文件名的长度不可超过 255 个字符。

 

根目录通常用 '/' 命名,并使用 '/' 这唯一一个字符来引用。其他文件都不能将 '/' 作为其文件名,也不能作为文件名中的一个字符。但是路径名中使用 '/' 作为分隔符。 linux 要求在同一目录下的文件不能同名,不同目录下的文件可以重名。若不同系统间的用户需要共享文件,那么共享文件名的前 14 个字符必须有所不同 linux 区分文件名中的大小写。文件名中最好不要使用空格(可以使用转义字符对空格进行引用) ,因为空格是用户在命令行中必须使用的特殊字符。

利用 '/' 对空格引用

>mkdir example/ example

>rm -r example/ example

利用 '' 对空格引用

>mkdir 'example2 example'

>rm -r 'example2 example'

 

文件扩展名是指文件名中跟在句点后面的部分,它用来帮助描述文件内容。一些程序于特定的文件扩展名相关联,在大多数情况下文件扩展名是可选的。文件名以 '.' 开始的文件称为不可见文件(或隐藏文件)。

每个目录下都存在两个不可见的特殊项: '.’ '..'

显示目录下所有文件,包括隐藏文件。

>ls -a

创建一个隐藏文件夹

>mkdir .example

>ls

>echo .*

>rm -r .example

 

mkdir :创建目录,参数为新创建目录的路径名。当登录到 linux 系统的字符界面后,就要在某个目录下进行操作,该目录称为工作目录或当前目录。 Pwd 显示当前工作目录。要访问当前目录下的文件直接输入文件名即可,要访问其他目录下的文件必须输入文件的路径名。 '~' 代表当前用户的主目录。

>pwd

>echo $PWD

>cd ~

>mkdir example

>mkdir ~/example2

>mkdir /home/terry/example3

利用 '-p' 选项,可以创建目录路径。

>mkdir -p ~/example4/example5/example6/example7

>ls -l example*

>rm -r example*

ls 后跟目录名为参数,则显示该目录下所有文件,不带目录参数则默认为当前工作目录。 '-F' 选项将对文件类型进行标准 '/' 表示目录,‘*’表示可执行文件。

 

cd :更改工作目录,工作目录与主目录是不同的两个概念,主目录在你与系统会话期间保持不变,而工作目录不是固定的,所以工作目录又叫当前目录。 cd 后不带参数,则默认参数为用户主目录。

>cd ~

>cd ..

>cd

>cd ..

>cd -

>cd -

 

初始化文件位于主目录下,为 shell 和其他程序提供登录系统的用户信息和设置的选项信息。通常他可以使 shell 了解到使用的终端信息,并执行 stty 工具来设置行删除键和字符删除键。无论是普通用户还是系统管理员都可在主目录下放置一个包含 shell 命令的 shell 初始化文件。每次登录时, shell 将执行此初始化文件中的命令。

 

每个文件都有路径名,文件的绝对路径名是由根从根目录到该文件节点的路径上的所有节点组成,其中各个名字之间用 '/' 隔开。绝对路径都是以 '/' 开始的。绝对路径的另一种形式,是以代字符‘ ~’ 开始,表示用户主目录,代字符 '~' 可以引用任何用户的主目录,只要将代字符后跟登录名放置在路径名开始即可。

相对路径是指从工作目录到文件的路径名。该路径名是相对于工作目录的。不以根目录开始的路径名都是现对路径名。使用相对路径时,要弄清当前工作目录。

 

目录项 . .. mkdir 在创建目录时会自动在新创建的目录下产生两项 . .. ;分别代表新建目录本身及其父目录。这两项以 . 开始所以是隐藏目录不可见。

 

FHS:Filesystem Hierarchy Standard linux 文件系统分层标准,

FSG:Free Standards Group 自由标准组织。

 

/’ 根目录 所有的 linux 系统文件的结构中,它是所有文件的祖先。

'/bin' 基本命令的二进制文件 包含启动系统和在单用户模式下运行所需的文件。

'/boot' 引导系统加载的静态文件 包含引导系统启动的大多数文件。

'/dev' 设备文件 包含代表所有外围设备的设备文件。包括 stderr stdout stdin pts/0

>pwd

>cd /dev

>echo 'Hello linux' > stdout

>w

>echo 'Hello linux' > pts/0

>cd /

>echo 'Hello terry' > /dev/pts/1

stderr stdin stdout pts/0 都是文件 上面的命令将 echo 的显示输出被重新定位到了指定的文件,只是这些文件是特殊的设备文件。

'/etc' 本地计算机系统配置文件 包含管理文件 配置文件和一些系统文件, '/etc/passwd' 包含使用系统的所有授权用户列表。

'/etc/X11' X windows 系统的本地计算机配置文件。

'/etc/opt' 包含 '/opt' 目录下附加软件包的配置文件。

'/home' home 目录 一般地每个用户主目录都是 home 目录的子目录。

'/lib' 共享库和内核模块

'/lib/modules' 可加载内核模块

>lspci

>lsusb

>lshw

>lsmod

>modinfo usbhid

>readelf -a jffs2.ko

>lsof

lspci:list all pci devices

lsusb:list usb devices

lshw: list hardware

lsmod:show the status of modules in the Linux Kernel

modinfo:Prints out the information about one or more modules.

lsof:list open files

 

'/mnt' 临时文件系统挂载点

'/opt' 附加软件包

'/proc' 虚拟文件系统的内核和进程信息

slabinfo swaps buddyinfo cgroups timer_list cmdline cpuinfo modules filesystems iomem interrupts locks meminfo modules schedstat timer_stats vmallocinfo vmstat zoneinfo 等等

'/root' root 用户的主目录

'/sbin' 基本的二进制系统文件 用于系统管理的工具都存储在 /sbin /usr/sbin 中,前者中包含引导进程所需的工具,后者包含系统启动后运行的工具。

'/tmp' 临时文件夹 存取临时文件

'/usr' 第二主文件层次 包含存放系统所需信息的子目录,这些子目录内的文件不经常改动,可由多个系统共享。

'/usr/bin' 大多数用户命令 包含标准的 linux 工具,对应的二进制文件在单用户模式下不需要。

'/usr/include' C 程序包含的头文件

'/usr/lib' 库文件

'/usr/man' 联机手册

'/usr/sbin' 非关键的用于系统管理的二进制文件

'/usr/share' 体系结构无关数据

'/usr/share/doc' 各种各样的文档

'/usr/share/info' GNU info 系统的主要目录

'/usr/src' 源代码文件

 

'/var' 变量数据,子目录包含系统运行时内容会改变的文件,这些文件多数是临时文件

'/var/log' 日志文件

'/var/spool' 假脱机应用数据

 

rmdir :删除目录,在工作目录下,无法删除工作目录和除 . .. 项外还有其他文件的目录。若删除包含其他文件的目录,需要 rm 将其中的文件删除后,再删除该目录。 . .. 不必显示删除, rmdir 会自动将它们删除。

rm '-r' 选项可以递归地删除目录,即删除目录中包含的目录和文件,还有目录自身。

>mkdir example

>cp example.JPG example/

>cp example.JPG example/example2.JPG

>rmdir example

>rm -r example

 

touch:Update the access and modification times of each FILE to the current time.

A FILE argument that does not exist is created empty.

>pwd

>ls -l

>touch example.c

>ls -l

转到当前登录用户的主目录

>cd ~

转到用户 'terry' 的主目录下的 'example' 子目录

>cd ~terry/example

 

mv 将文件从一个目录移动到另一个目录,可改变文件路径,同时也可改变文件名。

mv existing-file-list directory

mv 可以使用绝对路径也可使用相对路径。工具 cp mv 具有相同的语法,不同的是 cp 是将 existing-file-list 中的文件复制到指定目录下。

>pwd

>cd ~

>mkdir example

>touch example.c example1.c example2.c

>mv example*.c ~/example

>cd ~/example

>ls

>mkdir ../example2

>cp example* ../example2
>ls ../example2

>pwd

>cd ..

>ls

>rm example2

>mv example example2

>cp -r example2 example

 

mv 也可移动目录。语法格式也很类似,只要将文件列表变为目录列表即可:

mv existing-directory-list new-directory

new-directory 不存在,则 existing-directory-list 中仅能包含一个目录名, mv 将其改名为 new-directory mv 不带任何选项即可将目录重命名,而 cp 必须带 '-r' 选项才能将某个目录包含的所有文件复制到另一个目录下。

 

访问文件的用户有 3 种类型 : 文件所有者 (owner) ,文件所有者所在组的成员用户 (group) ,和其他用户 (other) 。每个用户有 3 种方式:读 写 执行。 9 种访问方式。

Chmod 改变访问权限,用 a 代表所有用户,用 o 代表其他用户,用 g 代表组用户,用 u 代表文件所有者。

>pwd

>ls -l

>cd example

>ls -l

>chmod a+rwx example.c

>chmod g+rw example1.c

>chmod o-r example2.c

>touch example3.c

>chmod 0777 example3.c

>ls -l

 

setuid set user ID ):当执行一个具有 setuid 权限的文件时,文件的执行过程将具有文件所有者的特权。类似地, setgid set group ID )权限表示在文件的执行过程中具有该文件所属组的特权。

ls 工具将 s 放置在文件属性中表示文件所有者可执行权限的位置上,以表明 setuid 权限。放置在表示文件组用户可执行权限的位置上则表明 setgid 权限。

>pwd

>chmod u+s example1.c

>chmod g+s example2.c

>ls -l

>cd ..

>ls -l

>rm -r example

对于 shell 脚本具有可执行权限的前提是要有读取权限,由于 shell 脚本在执行其中的命令前必须先要读取脚本内容,所以, shell 脚本具有可执行权限的前提是要有可读权限。二进制(程序)文件可直接执行而不必先读,所以对二进制(非 shell )程序可仅需要执行权限。

 

>su

>cd ~

>cd ..

>ls

>chown root -R person

 

与文件的访问权限相比,目录的访问权限稍有不同。 3 种类型的用户都可读写目录,但不能执行目录。对目录的执行权限定义为:可以使用 cd 转到目录下,并可查看目录下具有读取权限的文件,但不一定能执行目录中的文件。

 

 

链接:表示指向文件的指针。通过为文件创建附加的链接可使其他用户对文件进行访问。链接共分两种:硬链接和符号链接。文件的硬链接以另一个文件的形式出现在文件结构中(通过引用同一个文件 inode ):

ln existing-file new-link

ln 工具为已存在的文件创建了附加的指针,而不是创建原来文件的副本。由于所有链接都只对应一个文件,所以所有链接文件的属性信息都相同,只是文件名不同。

>pwd

>cd ~

>mkdir example

>cd example

>touch example.c example1.c

>ls -li

>ln example.c example2.c

>ls -li

>rm example.c

>ls -li

>cd ..

>rm -r example

ls 后跟 '-i' 选项可以将文件对应的 inode 编写显示出来,当两个文件的 inode 编号相同,表明两个文件共共享同一个文件节点,即链接到同一个文件。同一个文件的所有链接文件都是等价的,只有当所有链接文件都删除时,该文件才被删除。

 

符号链接:硬链接是直接指向文件的指针,符号链接是间接指向文件的指针。无法创建目录的硬链接,但可创建目录的符号链接;文件的所有硬链接都必须在同一个文件系统上,而符号链接可指向任何文件。

符号链接最大的优势是它可以指向不存在的文件。此优势使得可以为某个间断性地被删除和创建的文件建立链接。符号链接可以指向一个每运行一次 make c 编译器重新创建的 .o 文件,或者指向一个周期性存档的日志文件。与硬链接不同,文件的符号链接与文件自身具有不同的属性信息。

ln 带‘ -s’ 选项即可创建一个符号链接。创建符号链接要使用绝对路径名 ,符号链接不能感知‘目录’,指向相对路径名的符号链接认为相对路径名是相对于符号链接所在目录的(而不与创建链接时所在目录相对)。对符号链接的解析实际上是先根据该符号链接文件数据 ( 含有链接到的文件路径名 ) ,得到被链接文件的路径名,再按照得到的路径名查找相应文件。所以如果对应的路径名所指定的文件被删除 ( 即使还存在其他硬链接文件指向该相同的文件节点 ) ,符号链接将不被正确解析。

>cd ~

>mkdir example

>cd example

>touch example.c example1.c

>ln -s ~/example/example.c ~/example/example2.c

>ln -s ~/example/example2.c ~/example/example3.c

>ls -li

>echo 'hello linux' > example.c

>cat example3.c

>rm example2.c

>cat example3.c

>ls -li

>touch example2.c

>echo 'hello linux' > example2.c

>cat example3.c

>cd ..

>rm -r example

 

当创建文件时,便相应地创建了一个到该文件的硬链接。当使用 rm 工具删除文件时, rm 删除了文件对应的链接。当把文件对应的最后一个硬链接删除后,就再也不能访问存储在该文件位置处信息,即使文件的符号链接仍然存在,空间还是将被释放。如果文件的所有硬链接都被删除,那么通过符号链接将无法访问到文件。当删除某个文件时要同时删除该文件的所有符号链接。

>cd ~

>mkdir example

>touch example1.c

>ln example1.c example2.c

>echo 'I Writing example2.c' >example2.c

>cat example1.c

>ln -s ~/example/example1.c ~/example/example3.c

>ln -s ~/example/example2.c ~/example/example4.c

>cat example3.c

>cat example4.c

>ls -li

>rm example1.c

>cat example2.c

>ls -li

>cd ..

>rm -r example

 

 

 

 

你可能感兴趣的:(数据结构,linux,工作,shell,脚本,工具)