全国哪个餐饮品牌的网站做的好,河口企业网站开发公司,手机上做网站php,网站栏目设置目录与路径
关于执行文件路径的变量#xff1a;$PATH
ls完整文件名为#xff1a;/bin/ls 在任何文件夹下输入ls命令可以显示出一些信息而不是找不到命令#xff0c;这就是因为环境变量PATH所致。在执行命令时#xff0c;系统会依照PATH的设置去每个PATH定义的目录下查找文…目录与路径
关于执行文件路径的变量$PATH
ls完整文件名为/bin/ls 在任何文件夹下输入ls命令可以显示出一些信息而不是找不到命令这就是因为环境变量PATH所致。在执行命令时系统会依照PATH的设置去每个PATH定义的目录下查找文件名为ls的可执行文件若在PATH中有多个同名文件则先找的同名命令先被执行。 可以echo $PATH一下查看有哪些目录被定义出来了 echo有“显示、打印”的意思PATH前加$表示后面接的是变量所以会出现目前的PATH PATH这个变量的内容是由一堆目录所组成每个目录中间用冒号隔开每个目录有顺序之分。 若要在PATH 中新增目录如将/root目录加到环境变量中可以使用命令
PATH${PATH}:/root:tips: 不同身份用户默认的PATH不同默认能够随意执行的命令也不同本目录.最好不要放到PATH中
文件与目录管理
文件相关命令
见Linux常用命令相关链接
文件内容查看
直接查看cat、tac、nl 可翻页查看more、less 数据截取head、tail
非纯文本文件od
读取数据文件或二进制文件。
修改文件时间或创建新文件touch
三个主要变动时间 修改时间【mtime】文件的“内容数据”变更时会更新这个时间。内容数据指的是文件的内容而不是文件的属性或权限状态时间【ctime】文件的“状态”改变时会更新这个时间如权限、属性被更改了会修改这个时间读取时间【atime】文件的“内容被读取”时会更新这个读取时间。如使用cat去读取时会更新
文件的时间很重要若文件时间错误的话可能会导致某些程序无法顺利运行。 若要修改文件的时间为现在则可以使用touch命令
[rootstudy ~]# touch [-acdmt] 文件
选项与参数
-a 仅修订 access time
-c 仅修改文件的时间若该文件不存在则不创建新文件
-d 后面可以接欲修订的日期而不用目前的日期也可以使用 --date日期或时间
-m 仅修改 mtime
-t 后面可以接欲修订的时间而不用目前的时间格式为[YYYYMMDDhhmm]文件与目录的默认权限与隐藏权限
除了基本的rwx权限外在Linux传统的ext2、ext3、ext4文件系统下还可以设置文件的 文件默认权限umask
umask制定目前用户在创建文件或目录是的权限默认值
查看方式 直接输入umask查看数字类型的权限设置值加上-S选项以符号类型的方式显示权限 NT 有的系统里会有四组数字第一组是特殊权限用的后面三组是常用的也就是这里显示的umask的数字指的是该默认值需要减掉的权限故如上为022而不是733 对于目录而言X权限是很重要的但是一般文件的建立不需要这个权限
文件隐藏属性
文件的隐藏属性对系统有很大帮助尤其是在系统安全上面非常重要。 NT下面的chattr命令只能在ext2、ext3、ext4的linux传统文件系统上面完整生效其他文件系统可能无法完整的支持这个命令了如xfs仅支持部分参数而已。
查看文件系统类型df -hT 这里可以看到/dev/sda1使用的是ext4类型
chattr配置文件隐藏属性 命令设置 [rootstudy ~]# chattr [-][ASacdistu] 文件或目录名称
选项与参数增加某一个特殊参数其他原本存在参数则不动。
- 移除某一个特殊参数其他原本存在参数则不动。设置一定且仅有后面接的参数A 当设置了 A 这个属性时若你有存取此文件或目录时他的存取时间 atime 将不会被修改可避免 I/O 较慢的机器过度的存取磁盘。目前建议使用文件系统挂载参数处理这个项目
S 一般文件是非同步写入磁盘的原理请参考[前一章sync](../Text/index.html#sync)的说明如果加上 S 这个属性时当你进行任何文件的修改该更动会“同步”写入磁盘中。
a 当设置 a 之后这个文件将只能增加数据而不能删除也不能修改数据只有root 才能设置这属性
c 这个属性设置之后将会自动的将此文件“压缩”在读取的时候将会自动解压缩但是在储存的时候将会先进行压缩后再储存看来对于大文件似乎蛮有用的
d 当 dump 程序被执行的时候设置 d 属性将可使该文件或目录不会被 dump 备份
i 这个 i 可就很厉害了他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据”对于系统安全性有相当大的助益只有 root 能设置此属性
s 当文件设置了 s 属性时如果这个文件被删除他将会被完全的移除出这个硬盘空间所以如果误删了完全无法救回来了喔
u 与 s 相反的当使用 u 来设置文件时如果该文件被删除了则数据内容其实还存在磁盘中可以使用来救援该文件喔
注意1属性设置常见的是 a 与 i 的设置值而且很多设置值必须要身为 root 才能设置
注意2xfs 文件系统仅支持 AadiS 而已 如 范例请尝试到/tmp下面创建文件并加入 i 的参数尝试删除看看。
[rootstudy ~]# cd /tmp
[rootstudy tmp]# touch attrtest lt;创建一个空文件
[rootstudy tmp]# chattr i attrtest lt;给予 i 的属性
[rootstudy tmp]# rm attrtest lt;尝试删除看看
rm: remove regular empty file attrtest? y
rm: cannot remove attrtest: Operation not permitted
# 看到了吗呼呼连 root 也没有办法将这个文件删除呢赶紧解除设置
由于这些属性是隐藏的故要使用lsattr才能看到这些属性。 其中较为重要的为i与a这个属性
i可以让一个文件无法被修改助于实现系统安全a应用于logfile这种日志文件实现可以增加但不能修改旧数据与删除参数
lsattr
[rootstudy ~]# lsattr [-adR] 文件或目录
选项与参数
-a 将隐藏文件的属性也秀出来
-d 如果接的是目录仅列出目录本身的属性而非目录内的文件名
-R 连同子目录的数据也一并列出来[rootstudy tmp]# chattr i attrtest
[rootstudy tmp]# lsattr attrtest
----i----------- attrtest此时若再修改这个文件 去掉这个属性后便能正删除
NT使用隐藏属性是要特别小心如若将/etc/shadow这个重要的密码记录文件设置成具有i的属性当要新增用户时就会出现问题
文件的特殊权限SUID、SGID、SBIT
除了rwx还会有s和t权限查看/tmp和/usr/bin/passwd的权限就可以看到 s和t这两个权限的意义与系统的账号及系统的进程管理较为相关。
Set UID
当s标志出现在文件拥有者的x权限上时被称为Set UID简称为SUID的特殊权限。
SUID的限制与功能为 SUID权限仅对二进制程序有效执行者对于该程序需要具有x的可执行权限本权限仅在执行该程序的过程中有效执行者将具有该程序拥有者的权限
NTSUID仅可用在二进制程序上不能用在shell脚本上。 这是因为shell脚本只是将很多的二进制执行文件调用执行而已故SUID的权限部分还是要看shell脚本调用进来的程序的设置而不是shell脚本本身。
Set GID
s在用户组的x时为SGID与SUID不同SGID可以针对文件或目录来设置。 对文件而言SGID有如下功能 SGID对二进制程序有效程序执行者对于该程序来说需要有X权限执行者在执行的过程中将会获得该程序用户组的支持 如 [rootstudy ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
-rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db当其他用户执行locate时其有x权限那么在执行过程中它将会取得slocate用户组的支持因此也就可以去读取mlocate.db
除了二进制程序外SGID也能用在目录中
当一个目录中被设置了SGID权限后他将具有如下功能 用户若对于此目录具有r与x的权限时该用户能够进入此目录用户在此目录下的有效用户组将会变成该目录的用户组用途若用户在此目录下具有w的权限可以新建文件则用户所建立的新文件该文件的用户组与此目录的用户组相同
SGID对项目开发来说非常重要因为其涉及用户权限的问题。
Sticky Bit
SBIT当前只对目录有效对于文件已经没有效果了
SBIT对于目录的作用 当用户对于此目录有w、x权限即具有写入的权限时当用户在该目录下建立文件或目录时仅有自己与root才有权利删除该文件
即当甲这个使用者于A目录时具有群组或其他人的身份且拥有该目录的w权限这表示“甲使用者对该目录内任何人创建的文件或目录均可进行‘删除/更名/搬移’等动作”。不过若将A目录加上SBIT权限项目时则甲只能针对自己创建的目录或文件进行删除/更名/搬移等动作而无法删除他人的文件
SUID/SGID/SBIT权限的设置
数字法
之前修改权限的数字方式为chmod 777 filename在三个数字之前再加一个数字的话最前面的数字就代表这几个权限了
4SUID2SGID1SBIT 如要将一个文件权限设置为【-rwsr-xr-x】时由于s在用户权限中为SUID故要在755前再加数字4即chmod 4755 filename 如 最后一个例子要注意前面都是小写s和t出现大写是因为user、group、others都没有执行权限所以这个S和T代表的就是空。也就是说SUID是代表该文件在执行的时候具有文件拥有者的权限但是文件拥有者都无法执行了也就没有权限给其他人使用也就是空了
符号法
除了数字法之外也可以像之前一样使用符号法处理。 其中SUID为usSGID为gsSBIT为ot。
观察文件类型file
命令与文件的查找
脚本文件的查找
在命令行模式中连续输入两次[Tab]按键就能知道用户有多少命令可以执行若要查找命令的完整文件可以通过which或type查找 which命令是根据PATH这个环境变量所规范的路径去查找执行文件的文件名所以重点是找出执行文件而已且which后面接的是完整文件名。若加上-a选项则可以列出所有的可以找到的同名执行文件而非仅显示第一个而已。 history是bash内置的命令但是which默认是找PATH所设置的目录所以会找不到这个命令不过可以通过type来找type命令在后面的bash中再说
文件的查找
linux下有相当优异的查找命令通常find不很常用除速度慢之外也影响硬盘性能。一般都是先用whereis或是locate检查找不到才用find找。因为whereis只找目录中某些特定目录下的文件locate用数据库来查找文件名故这俩就相当快速且没有实际查找硬盘内的文件系统状态较节省时间。
whereis由一些特定目录中查找文件
whereis只找几个特定的目录而不是全系统的去查找故速度要比find快很多。所以说whereis主要是针对于/bin/sbin下面的执行文件以及/usr/share/man下面的man pahe文件跟几个比较特定的目录来处理而已可以通过参数确定查找的目录。 不过有些文件是找不到的可以用whereis -l来查看whereis查了多少目录
locate/updatedb locate命令直接在后面输入文件的部分名称后就能得到结果中间可以加入参数设置如上加入参数-l 5表示限制只列出5个。查找passwd那么在完整文件名包括文件路径中只要有passwd在其中都会被显示出来。 这是个很好用的命令尤其是在忘记某个文件的完整文件名时。 但是这个命令还是理由使用上的限制。因为他是根据已建立的数据库/var/lib/mlocate里面的数据所查找到的所以不用直接再去硬盘当中读取数据救护及很快。但是也是因为它是由数据库查找的而数据库的建立默认是在每天执行一次linux版本不同这个时间也不相同所以当新建立文件但在数据库更新之前查找文件时就会找不到这个文件。
不过也可以手动更新数据库直接输入updatedb就可以 updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置然后再去硬盘里面进行查找文件名的操作最后去更新整个数据库文件。 因为updatedb会去查找硬盘所以执行updatedb时会等待数分钟的时间。
find 与时间相关参数 -mtime n n 为数字意义为在 n 天之前的“一天之内”被更动过内容的文件
-mtime n 列出在 n 天之前不含 n 天本身被更动过内容的文件文件名
-mtime -n 列出在 n 天之内含 n 天本身被更动过内容的文件文件名。
-newer file file 为一个存在的文件列出比 file 还要新的文件文件名范例一将过去系统上面 24 小时内有更动过内容 mtime 的文件列出
[rootstudy ~]# find / -mtime 0
#那个 0 是重点0 代表目前的时间所以从现在开始到 24 小时前
# 有变动过内容的文件都会被列出来那如果是三天前的 24 小时内
# find / -mtime 3 有变动过的文件都被列出的意思范例二寻找 /etc 下面的文件如果文件日期比 /etc/passwd 新就列出
[rootstudy ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个文件之间的新旧关系是很有用的 与使用者或用户组相关的参数 -uid n n 为数字这个数字是使用者的帐号 ID亦即 UID 这个 UID 是记录在/etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。-gid n n 为数字这个数字是群组名称的 ID亦即 GID这个 GID 记录在/etc/group相关的介绍我们会第四篇说明-user name name 为使用者帐号名称喔例如 dmtsai -group namename 为群组名称喔例如 users -nouser 寻找文件的拥有者不存在 /etc/passwd 的人-nogroup 寻找文件的拥有群组不存在于 /etc/group 的文件当你自行安装软件时很可能该软件的属性当中并没有文件拥有者这是可能的在这个时候就可以使用 -nouser 与 -nogroup 搜寻。范例三搜寻 /home 下面属于 dmtsai 的文件
[rootstudy ~]# find /home -user dmtsai
# 这个东西也很有用的当我们要找出任何一个使用者在系统当中的所有文件时
# 就可以利用这个指令将属于某个使用者的所有文件都找出来喔范例四搜寻系统中不属于任何人的文件
[rootstudy ~]# find / -nouser
# 通过这个指令可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何人的文件时
# 不要太紧张那有时候是正常的尤其是你曾经以源代码自行编译软件时。与文件权限及名称有关的参数 -name filename搜寻文件名称为 filename 的文件-size [-]SIZE搜寻比 SIZE 还要大或小-的文件。这个 SIZE 的规格有c: 代表 Byte k: 代表 1024Bytes。所以要找比 50KB还要大的文件就是“ -size 50k ”-type TYPE 搜寻文件的类型为 TYPE 的类型主要有一般正规文件 f, 设备文件 b, c,目录 d, 链接文件 l, socket s, 及 FIFO p 等属性。-perm mode 搜寻文件权限“刚好等于” mode 的文件这个 mode 为类似 chmod的属性值举例来说 -rwsr-xr-x 的属性为 4755 -perm -mode 搜寻文件权限“必须要全部囊括 mode 的权限”的文件举例来说我们要搜寻 -rwxr--r-- 亦即 0744 的文件使用 -perm -0744当一个文件的权限为 -rwsr-xr-x 亦即 4755 时也会被列出来因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。-perm /mode 搜寻文件权限“包含任一 mode 的权限”的文件举例来说我们搜寻-rwxr-xr-x 亦即 -perm /755 时但一个文件属性为 -rw-------也会被列出来因为他有 -rw.... 的属性存在范例五找出文件名为 passwd 这个文件
[rootstudy ~]# find / -name passwd范例五-1找出文件名包含了 passwd 这个关键字的文件
[rootstudy ~]# find / -name *passwd*
# 利用这个 -name 可以搜寻文件名啊默认是完整文件名如果想要找关键字
# 可以使用类似 * 的任意字符来处理范例六找出 /run 目录下文件类型为 Socket 的文件名有哪些
[rootstudy ~]# find /run -type s
# 这个 -type 的属性也很有帮助喔尤其是要找出那些怪异的文件
# 例如 socket 与 FIFO 文件可以用 find /run -type p 或 -type s 来找范例七搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
[rootstudy ~]# find / -perm /7000
# 所谓的 7000 就是 ---s--s--t 那么只要含有 s 或 t 的就列出所以当然要使用 /7000
# 使用 -7000 表示要同时含有 ---s--s--t 的所有三个权限。而只需要任意一个就是 /7000这里比较有趣的是-perm选项它重点在于找出特殊权限的文件。我们知道SUID和SGID都可以设置在二进制程序上若想找出/usr/bin、/usr/sbin这两个目录下只要具有SUID或SGID就列出该文件可以进行操作find /usr/bin /usr/sbin -perm /6000 NTfind的特性是会自行查找子目录所以所写目录里面的目录也会查找的哦~ 额外可进行的操作 -exec command command 为其他指令-exec 后面可再接额外的指令来处理搜寻到的结果。-print 将结果打印到屏幕上这个动作是默认动作范例八将上个范例找到的文件使用 ls -l 列出来
[rootstudy ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
# 注意到那个 -exec 后面的 ls -l 就是额外的指令指令不支持命令别名
# 所以仅能使用 ls -l 不可以使用 ll 喔注意注意范例九找出系统中大于 1MB 的文件
[rootstudy ~]# find / -size 1M如上范例八如图所示
{} 代表的是“由 find 找到的内容”如上图所示find 的结果会被放置到 {} 位置中-exec 一直到 ; 是关键字代表 find 额外动作的开始 -exec 到结束 ; 在这中间的就是 find 指令内的额外动作。 在本例中就是“ ls -l {} ”因为“ ; ”在 bash 环境下是有特殊意义的因此利用反斜线来跳脱。
如果要找的文件是具有特殊属性的那么用locate就不行了就需要使用find进行查找。 另外find还可以利用通配符来查找文件名。 find好用在于它不但可以指定查找的目录连同子目录还可以用额外的选项与参数来找到最正确的文件名。但是由于find在查找数据时相当消耗硬盘资源所以没事不要用find