http://www.chengzhier.com
<a href="http://www.chengzhier.com">橙汁儿网</a>
1. date 显示系统里面的时间 这里有一个特别要注意的地方,当你需要格式化时间的时候要在%Y%m%d 加一个加号'+'
date -r info.php +%Y-%m-%d 查看info.php最后的修改时间
2. chgrp :改变档案所属群组 chang group 缩写, 用法 chgrp admin test.txt 把test.txt文件的档案所属群组改为admin组
chown :改变档案拥有者 chown root test.txt 把test.txt文件的档案拥有者改为admin
chmod : 修改档案的权限
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
chmod 741 text 则是修改 text为 rwxr----x权限, 拥有者有读写执行的权限,所属群组有读的权限, 其他有执行的权限
r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等;
w (write):可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
x (eXecute):该档案具有可以被系统执行的权限。
注意: 1. 当自己的home/XX 目录下就是没有rwx权限也有删除权限
2. 当有x执行权限时,如果是目录,则可以进入该目录。
x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案或目录, 是个很重要的参数啊!
3. pwd 查看当前的工作目录, 如果遇到有链接文件 则用 pwd -P 显示即可
4. mkdir 创建目录, mkdir -p test/p/p 连级创建文件夹 mkdir -m 711 test 分配权限创建
5. rmdir 删除空目录, -p :连同上层『空的』目录也一起删除, rm 删除文件, -r 递归删除目录及其内容
6. cp 发现一个 -i 如果目标目录有要赋值的文件,则会提示覆盖否. -a 会把被复制的文件和复制的文件一模一样,包括文件的修改时间。(这个比较重要)
范例七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下
[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!
由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限档案, 例如密码文件 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制档案权限的选项才行!另外,如果你想要复制档 案给其他的使用者, 也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等), 否则,其他人还是无法针对你给予的档案进行修订的动作喔!注意注意!
7. linux下的档案时间
① mtime (modification time) 档案内容变更时间,是指档案的内容,不是属性和权限。
② ctime (status time) 状态改变时,更新的时间
③ atime (access time) 档案最后一次的读取时间。
ls 默认显示的是 档案内容的变更时间。 mtime
touch 修改文件的 将每个文件的访问时间和修改时间改为当前时间。 touch -t 0709150202 bashrc bashrc 日期改为 2007/09/15 2:02
ll /etc/man.config -time=ctime --time-style="+%Y-%m-%d %H:%M:%S" 查看文件的状态的改变时间。和显示的时间格式。
8. umask 查看我们新建的文件和目录的预设权限.
umask默认是 0022 意思是 默认值需要减去的权限。
新建文件 (-rw-rw-rw-) - (------w--w) => (-rw-r--r--)
新建目录 (drwxrwxrwx) - (d-----w--w) => (drwxr-xr-x)
umask 002 预设 新建文件 (- r-- rw- r--) 目录 (d rwx rwx r-x)
9. 文件的隐藏属性 chattr +aij attrtest 给attrtest这个文件添加隐藏属性,不能删除,只能添加不能修改,root用户也不可以。
lsattr attrtest 查看attrtest文件的隐藏属性 ----ia---j--- attrtest (结果) 这个属性可以自己查文档。 (这里还有个笑话,我但是设了一个+ai 后面要删除那个文件,删除了半天,最后才发现时这个隐藏属性。好操蛋)
+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。
10. 判断文件类型 file 文件名
11. 搜索文档 whereis (寻找特定档案, 大多查找软件的安装目录,例如whereis svn) locate 搜索文件 locate svn 搜索跟svn 相同的目录名和文件名
find / -name httpd.conf whereis 和 locate都是在linux的文件数据库里面搜索,如果要更新文件数据库,命令: updatedb. find则是到硬盘里面去读取。
+4 代表大于等于5 天前的檔名:ex> find /var -mtime +4
-4 代表小于等于4 天内的档案档名:ex> find /var -mtime -4
4 则是代表4-5 那一天的档案档名:ex> find /var -mtime 4
find /home -user zhouhai 查找home目录下输入zhouhai的文件
find / -nouser 不输入任何人的文件
find / -name httpd.conf -exec ls -l {} ; 把find找到的目录和文件用 ll显示。
该范例中特殊的地方有 {} 以及 ; 还有 -exec 这个关键词,这些东西的意义为:
{} 代表的是『由 find 找到的内容』,如上图所示,find 的结果会被放置到 {} 位置中;
-exec 一直到 ; 是关键词,代表 find 额外动作的开始 (-exec) 到结束 (;) ,在这中间的就是
find 指令内的额外动作。 在本例中就是『 ls -l {} 』啰!
因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜杠来跳脱。
find /etc -name '*httpd*' 模糊搜索
12. df 查看硬盘使用情况 df -a -h -a:查看系统内的所有文件格都列出来 -h: 用易读的方式来显示通常用G表示大小
du 查看当前目录一共有多大 du -sbh /etc 查看/etc目录一共有使用了多少硬盘
13. 压缩,解压。 gzip
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数; (解压缩)
-t :可以用来检验一个压缩文件的一致性~看看档案有无错误;
-v :可以显示出原档案/压缩文件案的压缩比等信息; (这个经常用)
注意: 直接用 gzip -v httpd.conf 这样会把源文件httpd.conf删除,生成httpd.conf.gz
可以用 gzip -v -c httpd.conf > httpd.conf.gz 来保证源文件不被删除
解压缩 gzip -d httpd.conf.gz
读取 zcat httpd.conf.gz 读取压缩中的文件信息
bzip2 的用法和gzip相同,文件扩展名xx.bz2 当你要解开一个压缩文件时, 这个档案的名称为 .bz, .bz2, .tbz, .tbz2 等等, 那么就可以尝试使用 bzip2 来解看看啦!
14. 打包
[root@www ~]# tar [-j|-z] [cv] [-f 建立的檔名] filename... <==打包与压缩
[root@www ~]# tar [-j|-z] [tv] [-f 建立的檔名] <==察看檔名
[root@www ~]# tar [-j|-z] [xv] [-f 建立的檔名] [-C 目录] <==解压缩
选项与参数:
-c :建立打包档案,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包档案的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 tar -zxv -f test.tar.bz2 -C /tmp 解压到/tmp目录下
其他后续练习会使用到的选项介绍:
-p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
tar -jcv -f test.tar.bz2 test 打包当前目录下的test目录为test.tar.bz2 -f 一直以来不知道什么意思, -f的意思是要紧接着生成的文件名,所以建议-f单独写着,后面跟要生成的文件包
tar -zcv -f test.tar.bz2
15. 备份 dump
dump支持单一文件系统(filesystem) 例如,/dev/hdc2。 也可以直接备份目录
待备份的数据只是目录,并非单一文件系统:
例如你仅想要备份 /home/someone/ ,但是该目录并非独立的文件系统时。此时备份就有限制
包括:
①所有的备份数据都必须要在该目录 (本例为:/home/someone/) 底下;
②且仅能使用 level 0 ,亦即仅支持完整备份而已; (这里的话就是不能备份级别,就是跟Svn一样的版本差不多。所以的话配备目录时不要用 -u)
③不支持 -u 选项,亦即无法建立 /etc/dumpdates 这个各别 level 备份的时间记录文件;
选项与参数:
-S :仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕;
-u :将这次 dump 的时间记录到 /etc/dumpdates 档案中;
-v :将 dump 的档案过程显示出来;
-j :加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为 2
-level:就是我们谈到的等级,从 -0 ~ -9 共十个等级;
-f :有点类似 tar 啦!后面接产生的档案,亦可接例如 /dev/st0 装置文件名等
-W :列出在 /etc/fstab 里面的具有 dump 设定的 partition 是否有备份过? (查看文件系统的配备信息)
dump -S /home 备份该目录需要多少空间大小
dump -0u -f /root/boot.dump /boot 将完整备份的文件名记录成为 /root/boot.dump ,同时更新记录文件,该/boot是一个文件系统
16. 回复 restore , dump相反的操作。
[root@www ~]# restore -t [-f dumpfile] [-h] <==用来察看 dump 檔 这里学会了 -f 如果命令有-f且是 -f后面必须是要跟文件名,就一定不要省略-f
[root@www ~]# restore -C [-f dumpfile] [-D 挂载点] <==比较dump 与实际档案
[root@www ~]# restore -i [-f dumpfile] <==进入互动模式
查看dump的文档内容 restore -t -f /home/zhouhai.dump
看使进行文件系统与备份文件之间的差异!restore -C -f /root/boot.dump (我没有用到)
restore -i -f /home/zhouhai.dump 进入此时你就已经进入 restore 的互动模式画面中!要注意的是: 你目前已经在 zhouhai.dump 这个档案内了!所有的动作都是在 zhouhai.dump 内!
① 可以用 ls 查看当前目录数据
② pwd 当前目录
③ add 添加要解压缩的数据 add home/zhouhai
④ ls 当有添加要解压缩的数据后,ls 下面的数据要被解压缩就会在前面 多一个*号
⑤ extract 开始进行解压缩去! 第一个提示要输入 Specify next volume # (none if no more volumes): 1 写1 set owner/mode for '.'? [yn] n <==不需要修改权限
⑥ quit 推出
17. shell
①变量 name=hello 等号两边不能有空格, 变量在 "" 中会使用变量的值, 在 '' 号则不会,这个和PHP一样
②ls -l `locate httpd.conf` 这个是用 ` ~键上边的键。 这个命令是 先locate命令找到httpd.conf文件的路径,然后在 ls -l 执行找到的这个路径。
③ env 查看环境变量与常见的环境变量(自定义的看不见)
④ set 查看所有的变量(含环境变量和自定义变量)
PS1:提示字符的设定 默认是 PS1='[u@h W]$ ' 下面是每个 符号的说明
o d :可显示出『星期 月 日』的日期格式,如:"Mon Feb 2"
o H :完整的主机名。举例来说,鸟哥的练习机为『www.vbird.tsai』
o h :仅取主机名在第一个小数点之前的名字,如鸟哥主机则为『www』后面省略
o :显示时间,为 24 小时格式的『HH:MM:SS』
o T :显示时间,为 12 小时格式的『HH:MM:SS』
o A :显示时间,为 24 小时格式的『HH:MM』
o @ :显示时间,为 12 小时格式的『am/pm』样式
o u :目前使用者的账号名称,如『root』;
o v :BASH 的版本信息,如鸟哥的测试主板本为 3.2.25(1),仅取『3.2』显示
o w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以 ~ 取代;
o W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
o # :下达的第几个指令。
o $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~
当你把PS1改成这样 PS1='[u@h w A ##]$ '
你的字符设定就是 [root@iZ94b0jng2rZ ~ 14:35 #18]# 这样的,哈哈是不是很好玩。
⑤ $ , 这个也是一个变量。 echo $$ 表示Shell的线程代号
⑥ ? echo $?; 上一个执行的指令所回传的值. 也就是我们PHP里面方法,rentrun 的值,啊哈哈;
例如: 12name=hello; echo $?; 返回127;这个就是错误代码。如果是正常的话,就返回0;
⑦ export 把自定义变量换成环境变量 export name=hello;; 如果export直接使用不带后面的参数,就是显示所有的环境变量。
这样写的话,不会永久保存这个变量。当logout后,下次链接就会失效。
在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效
⑧ read 读取,键盘输入的变量。 read -p 'Please keyin your name:' -t 30 named
⑨ [root@www ~]# declare [-aixr] variable 选项与参数:
-a :将后面名为 variable 的变量定义成为数组 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x :用法与 export 一样,就是将后面的 variable 变成环境变量; 如果是 +x 就是环境变量-》自定义变量
-r :将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset
圈圈10. 定义数组 var[1]=hello1; var[2]=hell02; echo {$var[1]}; //数组输出。
圈圈11. 变量内容的删除 echo {$test#/*:} 代表要被删除的部分,由于 # 代表由前面开始删除,所以这里便由开始的 / 写起。需要注意的是,我们还可以透过通配符 * 来取代 0 到无穷多个任意字符,到 : 结尾.
这是重点!代表『从变量内容的最前面开始向右删除』,且仅删除最短的那个. 最长的那个用##
test=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; echo {$test#/*:} 结果是/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin;
test=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; echo {$tes##/*:} 结果是/root/bin
从左开始的就用 % 代替 #号就可以了
变量内容的替换 echo ${test/sbin/test} 替换第一个sbin为test, 去不替换echo ${test//sbin/test}
unset ddd; echo ${ddd:-hello}; 和 unset ddd; echo ${ddd-hello} 效果是一样的,看着鸟哥的书不一样,不知道什么原因。这里结果都是hello,且ddd没有被赋值。
unset ddd; echo ${ddd:+hello}; 和 unset ddd; echo ${ddd+hello} +号的话,这里结果都是空,但是前面如果ddd被定义了,就会输出hello
圈圈12. 命令别名的设定 alias,unalias,
直接alias可以查看现在已有的命令别名, alias dir='ls -l'; 创建一个dir(windows中的查看文件)命令别名; unalias dir 删除命令别名