linux基础学习2

时间:2023-03-08 16:43:31

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 \t :显示时间,为 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 删除命令别名