首先要感谢《鸟哥的linux私房菜》这本书,这本书对新手来说,是很好得老师,也感谢师兄郑丹,抽出时间为我们讲解它得心得,让我们学习linux起来事半功倍。希望我得总结能给广大网友们一点帮助,我想这也符合linux开源得精神。
优点:开源、安全性、多用户多任务、稳定、消耗资源较少
缺点:应用程序相对较少,图形化界面不是很理想
坚持命令行:因为x-windows会消耗很多的内存
1. 日期: date
2. 日历: cal
3. 计算器:bc
4. 中断目前程序: Ctrl + c
5. 退出:q
6. 命令与文件补全: [Tab] 键
7. 清屏: clear
8. 进入X-Windows: startx
9. 查找某命令的位置:which Command
10. 打包:tar cf tvf xf rf -f--delete
11. 压缩:gzip
12. 解压缩:gunzip
13. 管道: |
14. 输出重定向 :>(覆盖) >>(追加)
15. 新建文件:vi 、touch 或者使用管道
16. 在搜索中使用正则表达式 |grep -i ****
17. 添加组:groupadd
18. 添加用户:useradd(可以输入user+TAB键查看关于user的所有命令)
19. shell编程: shell程序的后缀名是 .sh ,运行时输入:sh ***.sh
20. 系统运行文件: proc
21. 改变用户:su username su - (是转为超级用户)
22. 安装卸载等系统程序:rmp -E(卸载) -q 查询
23. 查看系统启动时启动的服务:setup
24. 查看系统已经启动的服务:service
25. 关于redhat系统的命令:redhat+TAb 查询
26. 查看该目录下的占用硬盘空间:du -k
27. 查询硬件信息:dmsg
28. 在线求助:man 、info(Linux 系统中的说明文件汇集目录: /usr/share/doc)
man page通常是放在/usr/share/man 里头(不同的版本可能有点差异性)不过,我们可以修改它的 man page 搜寻路径来改善这个目录的问题!修改 /etc/man.config ( 有的版本为 man.conf ) !
info:在这个info page 里面,你可以输入 p 及 n 往前及往后翻页,如果看到『 * text :』的项目时,将光标移到该项目上面,按下『Enter』还可以进入次页面的说明画面中!
1. 改变所属群组:chgrp
要改变成为的群组名称必须要在 /etc/group 里面存在的名字才行
语法: chgrp 群组名称 文件或目录
范例:[root@test root]# chgrp users tmp
2. 改变所属人: chown
就是在 /etc/passwd 这个文件中有记录的使用者名称才行改变
语法: chown 账号名称 文件或目录
chown [ -R ] 账号名称:群组名称 文件或目录
范例: [root@test root]# chown test tmp
[root@test root]# chown –R root:root tmp
备注: -R是指递归对目录操作,下同。
3. 改变文件的属性、 SUID 、等等的特性:chmod
(1) 数字类型改变文件权限
语法: chmod [-R] xyz 文件或目录(xyz 为同三组 rwx 属性数值的相加 )
rwx rwx rwx 可以使用数字来代表各个属性,例如当属性为 [ -rwxrwx--- ] 则是:770。 常常我们以 vi 编辑一个 shell 的文字文件后,它的属性通常是 -rw-rwrw- 也就是 666 的属性,要将它变成可执行档,并且不让其它人修改此一文件的话,那么就需要 - rwxr-xr-x 这一个755 的属性,另外,有些文件你不希望被 其它人看到,例如 -rwxr-----,740 。
(2) 使用群
目录和文档基本上就九个属性分别是user、group、others 三类!我们可以由 u, g, o 来代表三群的属性!此外, a 则代表 all亦即全部的三群!以使用底下的方式来看:
如果要设定一个文件的属性为『-rwxr-xr-x』时à chmod u=rwx,og=rx .bashrc
如果只要增加.bashrc 这个文件的每个人均可写入的权限,那么我就可以使用:
chmod a+w .bashrc
如要拿掉所有人的 x 的属性,则
[root@test root]# chmod a-x .bashrc
(3) 改变预设的建立文件或目录时的属性umask
说明:查看 umask 数值为直接输入 umask
如何来指定文件得预设属性呢?主要还是跟 Linux 的文件属性(那九个属性, r, w, x )有关的,而且是以分数的那一个关系为例的,而有底下的规则为辅:
•若使用者建立为『文件』则预设『没有可执行 ( x ) 项目』,亦即只有 rw 这两个项目,也就是最大为 666 分--rw-rw-rw-
•若使用者建立为『目录』,则由于 x 与是否可以进入此目录有关,因此预设为所有权限均开放,亦即为 777 分drwxrwxrwx
那么 umask 指定的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是3分。而这个 umask 可以在 /etc/bashrc 里面进行修改喔!预设的情况之下,root的umask为022 ,而一般使用者则为 002 。
(4) 改变文件的特殊属性 chattr
说明:这这个指令是重要的,尤其是在系统的安全性上面!由于这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!
其中,最重要的当属 +i 这个属性了,因为它可以让一个文件无法被更动,对于需要强烈的系统安全的文件来说,真是相当的重要的!此外,如果是 log file 这种的登录档,就更需要+a 这个可以增加,但不会被杀掉的参数了!
(5) 显示文件的特殊属性:lsattr
4.搜寻文件或目录whereis、locate、find
通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻!因为 whereis 与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间。
(1)whereis 查看文件的位置
因为 Linux 系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用 whereis 或者是locate 时,都会以此数据库文件的内容为准,因而其查询速度也比较快,同时whereis 可以加入参数来找寻相关的资料,例如如果你是要找可执行档( binary )那么加上 -b 就可以啦!例如上面的范例针对 passwd 这支程序来说明!如果不加任何参数的话,那么就将所有的数据列出来!因此,有的时候你会发现使用这两个命令时,会找到已经被删除的文件!这就是因为它是一个数据库文件! Linux 每天会针对 Linux 主机的这个『数据库』文件进行 updatedb的动作,你可以在 /etc/cron.weekly/slocate.cron 这个文件找到相关的机制!当然,也可以直接使用/usr/bin/updatedb 来更新这个数据库文件!
(2)locate 配合数据库查看文件位置
locate 的使用方式就更简单了!直接键入你要找的档名即可!使用 locate 来寻找数据的时候特别的快,这是因为 locate 寻找的数据是由已建立的数据库 /var/lib/slocate里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据。
那么有什么限制呢?就是因为它是经由数据库来搜寻的,而数据库的建立预设是在每个礼拜执行一次,所以当您新建立起来的文件,却还在数据库更新之前搜寻该文件,那么 locate 会告诉您找不到!因为系统还没有要更新数据库,那么我到底要建立哪些数据库呢?是否全部都要建立?似乎不需要,这个时候,你可以自己选择需要建立文件数据库的目录呢!在 /etc/updatedb.conf 这个内即可设定了!
(3)find 实际搜寻硬盘去查询文件名称
例子:find /etc -name '*httpd*'就可将档名含有 httpd 的文件都列出来。缺点是速度慢!
(4)which 查看可执行文件的位置which
其基本功能是藉由 PATH 这个环境变量的内容,去该路径内寻找可执行文件!
5.文件目录得新建复制移动删除
(1) 删除文件(目录) : rm(rmdir很少用) 通常加上-fr 参数说明完全删除
(2) 移动(改名):mv 这个命令要慎用,因为如果目标文件已经存在的话,系统会直接替换,不做任何提示
(3) 拷贝文件或目录:cp
(4) 新建目录:mkdir
(5) 查看当前目录位置:pwd
(6) 查看目录内容:ls -ltr
(7) 更换目录:cd
6. 观看文件内容:
(1) cat 由第一行开始显示文件内容
(2) tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
(3) more 一页一页的显示文件内容
(4) less 与 more 类似,但是比 more 更好的是,它可以往前翻页!
(5) head 只看头几行
(6) tail 只看尾巴几行
(7) od 以二进制的方式读取文件内容!
例如:假如我想要显示 ~/.bashrc 的第 11 到第 20 行呢?
答: head –n 20~/.bashrc | tail –n 10
1.显示出目前的 PATH:[root@test root]# echo $PATH
2.如何增加path的目录:可以使用PATH=“$PATH”:/root
在 PATH 里面加入 . 这个目录,就可以直接在所在目录执行文件。但是为了安全起见,不建议将. 加入 PATH 的搜寻当中。
basename这个指令会将后面的[目录]取出最后面的那个目录或文件
语法:[root @test /root ]# basename [目录]
dirname这个指令恰恰与 basename 相反
语法:[root @test /root ]# dirname [目录]!
如果你有要在shell编程中使用变量,并且取出最后一个数据(不论是文件还是目录),那么使用它。
block是磁盘可以记录的最小单位,是由数个 sector 所组成的,所以它的大小通常为 n*512 bytes 。Block 是记录文件内容数据的地区,而 inode 则是记录该文件的属性、及该文件放置在哪一个 Block 之内的信息。所以,每个文件都会占用到至少一个 inode 。
当我们 Linux 系统要找到这个文件时,它会先去搜寻 inode table, 找到这个文件的属性及数据放置的地区,然后再到数据去找到数据存放的 Block 进而将数据取出利用。这个 inode 数目在一开始就会被设定好,它的设定方式通常是利用 ( 硬盘大小 / 一个容量 ),这个容量至少应该比 Block 要大一些较佳,例如刚刚的 Block 订为 4K ,那么 inode 可以订为 8K 左右。所以,一颗 1GB 的硬盘,如果以 8K 来规划它的 inode 数时,它的 inode 就会有131072 个 inode 。而一个 inode的大小为 128 bytes 。一个partition 格式化为一个 filesystem 之后,基本上,它一定会有 inode table与data area两个区块,一个用来记录文件的信息与该文件放置的 block 区块,一个用来记录文件的内容。
² 当 block 越小 ( 最小为 0.5K ) 、inodes 越多,可利用空间越多,但是大文件写入效率较差:适合文件数量多但是文件容量小的系统,例如 BBS 或者新闻群组 news 这方面的服务之系统;
² 当 block 越大 ( 最大可到 16 * 0.5K 以上 ) 、 inodes 数越少,大文件写入效率较佳,但浪费的空间较多:适合文件容量大的系统。
² Hard Links
hard link 就是直接再建立一个 inode 连结到文件放置的 block 区块。也就是说,进行 hardlink 的时候,实际上,你的文件内容不会改变,只是你在查询的时候,利用原来的 inode 与后来的 inode 均可被指定到该文件放置的地点,因此两个文件的内容会是一样的!所以读取任何一个 inode 的结果都是存取在同一个文件的内容就是了。
Hard link 有两个最大的限制:
(1)不能跨 filesystem ,因为不同的 filesystem 有不同的 inode table 。
(2)不能 link 目录,因为inode是会连结到block区域去的,而目录本身仅消耗inode 而已。
² Symbolic Links
它就是在建立一个独立的文件,而这个文件会让数据读取指向它 link 的那个文件内容。由于只是利用文件来做为指向的动作,所以,当来源档被删除之后,symboliclink 的文件会开不了。
语法:[root @test /root ]# ln [-s] [来源档] [目的档]
参数说明:-s :提供连结档的连结。如果直接以 ln 不加任何参数的话,那么就属于hard link。
注意连接文件的关系。如果你做了这样的连结:ln –s /bin /root/bin
那么如果你进入 /root/bin 这个目录下,并且将其中的数据杀掉时, /bin 里面的数据就通通不见了。这点请千万注意。并不是 /root 底下的资料都是 root 的。还需要注意一下该属性才行。
UID 代表我们的使用者代号,而 GID 则是群组的代号,保存组和用户信息的文件分别是 /etc/group和 /etc/passwd. 其中 root和root组的uid和gid都是 0,那么什么是 SUID 与 SGID 呢?
在说明之前我们先来以一般身份使用者 test 的身份登入,再来看一个文件的内容:
[test@test test]$ ll /usr/bin/passwd
-r-s--x--x 1 root root 13476 Aug 7 2001 /usr/bin/passwd
怎么会有 s 的属性在原本的 x 呀?那个就是所谓的 SUID 了。当一个文件具有 SUID 的时候,而且other的群组具有可执行的权限,那么当 others 群组执行该程序的时候,other将拥有该文件的owner的权限。
下例更好的说明这个属性的作用:
[test@test test]$ ls -l /usr/bin/passwd
-r-s--x--x 1 root root 13476 Aug 7 2001 /usr/bin/passwd
我们以账号的密码文件来说明好了。可以看到的是,/etc/passwd的权限是只有 root 才能存取。那么为什么一般使用者可以自己修改密码呀?因为修改密码一定跟/etc/passwd这个文件有关,那么使用者是如何修改 /etc/passwd 这个文件的呢?这就是使用 SUID 的功能。由此也可以知道,由于这个Set UID ( SUID ) 的主要功能是在某个文件执行的期间具有文件拥有者的权限,因此s 就是替代上面提到的 x 这个可执行的位置。那万一该文件并没有x 的属性,那么该文件的属性就会将小写的 s 变成大写的 S 。
不过, SUID 与 SGID 的关键问题就是太不安全了。因此上,在变更一个文件成为具有 SUID 或 SGID 的情况时,必须要特别小心。
Sticky bit 的属性t的最大用处在于,具有sticky bit 属性的该”目录”下的文件,其文件或目录只有文件拥有者及 root 才有权力删除。/tmp 这个目录就具有这样的特性,在该目录里面虽然你可以建立与修改任何文件,但是却仅能删除自己建立的文件(除非你是 root)
如何开启文件使成为具有 SUID 与 SGID 的权限呢,这就需要刚刚的数字更改权限的方法了。数字型态个更改权限方式为『三个数字』的组合,那么如果在这三个数字之前再加上一个数字的话,那最前的面数字就代表这几个属性了
• 4 为 SUID
• 2 为 SGID
• 1 为 Sticky bit
假设要将一个文件属性改为-rwsr-xr-x时,由于s在使用者权限中,所以是SUID ,因此,在原先的755之前还要加上4 ,也就是:『 chmod 4755 filename 』来设定。
另外,在设置s属性的时候,要给予其可执行的权限,不然文件拥有者都无法执行了,哪里来的权限给其它人使用?当然就是空的。
用来查看这个文件的类型,可以用来观看文件是否被加入 SUID 等等的信息。并且,也同时提供了是否有使用动态函式库的信息。
语法:[root @test /root ]# file [文件名]