第1章 Linux入门

首先要感谢《鸟哥的linux私房菜》这本书,这本书对新手来说,是很好得老师,也感谢师兄郑丹,抽出时间为我们讲解它得心得,让我们学习linux起来事半功倍。希望我得总结能给广大网友们一点帮助,我想这也符合linux开源得精神。

1    Linux的特点

优点:开源、安全性、多用户多任务、稳定、消耗资源较少

缺点:应用程序相对较少,图形化界面不是很理想

坚持命令行:因为x-windows会消耗很多的内存

2   常用命令

2.1      杂项

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』还可以进入次页面的说明画面中!

2.2 关于目录和文件

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

2.3环境变量 PATH

1.显示出目前的 PATH:[root@test root]# echo $PATH

2.如何增加path的目录:可以使用PATH=“$PATH”:/root 

在 PATH 里面加入 . 这个目录,就可以直接在所在目录执行文件。但是为了安全起见,不建议将. 加入 PATH 的搜寻当中。

2.4 basename和dirname

basename这个指令会将后面的[目录]取出最后面的那个目录或文件

语法:[root @test /root ]# basename [目录]

dirname这个指令恰恰与 basename 相反

语法:[root @test /root ]# dirname [目录]!

如果你有要在shell编程中使用变量,并且取出最后一个数据(不论是文件还是目录),那么使用它。

3    连接档

3.1  inodes

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 数越少,大文件写入效率较佳,但浪费的空间较多:适合文件容量大的系统。

3.2  ln

²        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 的。还需要注意一下该属性才行。 

4    SetUID, SetGID, Sticky bit 与 file 指令

4.1  SUID 与 SGID

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 的情况时,必须要特别小心。

4.2  Sticky bit

Sticky bit 的属性t的最大用处在于,具有sticky bit 属性的该”目录”下的文件,其文件或目录只有文件拥有者及 root 才有权力删除。/tmp 这个目录就具有这样的特性,在该目录里面虽然你可以建立与修改任何文件,但是却仅能删除自己建立的文件(除非你是 root)

4.3  SUID, SGID, Sticky bit 的设定方法:

如何开启文件使成为具有 SUID 与 SGID 的权限呢,这就需要刚刚的数字更改权限的方法了。数字型态个更改权限方式为『三个数字』的组合,那么如果在这三个数字之前再加上一个数字的话,那最前的面数字就代表这几个属性了

• 4 为 SUID

• 2 为 SGID

• 1 为 Sticky bit 

假设要将一个文件属性改为-rwsr-xr-x时,由于s在使用者权限中,所以是SUID ,因此,在原先的755之前还要加上4 ,也就是:『 chmod 4755 filename 』来设定。

另外,在设置s属性的时候,要给予其可执行的权限,不然文件拥有者都无法执行了,哪里来的权限给其它人使用?当然就是空的。

4.4  file

用来查看这个文件的类型,可以用来观看文件是否被加入 SUID 等等的信息。并且,也同时提供了是否有使用动态函式库的信息。

语法:[root @test /root ]# file [文件名]

Linux_第1章 Linux入门相关推荐

  1. 第1章 Kali Linux入门 一篇就够了

    文章目录 第1章 Kali Linux入门 1.1 Kali的发展简史 1.2 Kali Linux工具包 1.3 下载Kali Linux 1.4 使用Kali Linux 1.4.1 Live D ...

  2. cups源码下载 linux_【正点原子FPGA连载】第九章Linux显示设备的使用-领航者ZYNQ之linux开发指南...

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  3. Linux入门到精通:第 1 关——创建/删除新用户(第二章:Linux之用户管理)

    第 1 关--创建/删除新用户 任务描述 相关知识 Linux创建用户命令 案例演示 Linux删除用户命令 案例演示 编程要求 评测说明 任务描述 恭喜你已经完成了Linux入门的实训,接下来让我们 ...

  4. linux 入门教程

    linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统 ...

  5. linux vim配置c,Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE

    C语言在Linux系统中的重要性自然是无与伦比.不可替代,所以我写Linux江湖系列不可能不提C语言.C语言是我的启蒙语言,感谢C语言带领我进入了程序世界.虽然现在不靠它吃饭,但是仍免不了经常和它打交 ...

  6. 【Nginx】第一章 快速入门

    第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.引入 2.什么是 Nginx 3.Nginx 作用 二.Windows 下使用 1.启动 Nginx 2.配置监听 3.关闭 nginx 三 ...

  7. 嵌入式Linux入门13:应用层调试

    本文主要介绍应用程序的调试方法. 很多网友问我怎么调试内核,怎么查找代码bug.其实我的方法不多.一是靠经验,掉入的坑多了,做笔记回顾,自然就有了经验.二是靠printf/printk大法跟踪.三是利 ...

  8. Linux学习教程,Linux入门教程(超详细)| 网址推荐

    今天发现一个Linux中文教程,再此收藏备份. 目录 第1章 Linux简介 第2章 Linux安装 第3章 Linux文件和目录管理 第4章 Linux打包(归档)和压缩 第5章 Vim文本编辑器 ...

  9. Kali Linux入门

    文章目录 第1章 Kali Linux入门 1.1 Kali的发展简史 1.2 Kali Linux工具包 1.3 下载Kali Linux 1.4 使用Kali Linux 1.4.1 Live D ...

最新文章

  1. 大数加法分析及C语言实现(加数可为负数)
  2. python中append的用法_Python 列表 append() 使用方法及示例
  3. 网络安全堪忧 员工上网受限
  4. OpenCV在水平线上校准3个摄像机的实例(附完整源代码)
  5. document write的用法
  6. JSF Struts Spring Hibernate 整合
  7. zoj 3811 untrusted patrol
  8. linux系统管理Linux系统实验,实验三 linux系统管理
  9. 我最喜欢的模板jade(pug)学习和使用
  10. CodeForces413E Maze 2D
  11. Objective-C Runtime那点事儿
  12. ICH E2B | ICSR 电子传输网关对接解决方案(CDE EDI)
  13. 计算方法——C语言实现——LU分解法求解非线性方程
  14. Deep Learning(深度学习)学习笔记
  15. linux内存查看命令
  16. word2010撤销功能的恢复方法
  17. 【K最近邻法(KNN)】的Python和R语言简单实现鸢尾花分类
  18. matplotlib之pyplot模块——饼图(pie():圆环图(donut)、二层圆环图、三层圆环图(旭日图))
  19. 3G到来将全面颠覆SP、CP游戏规则
  20. QT Designer

热门文章

  1. “C语言” 编译密码:按规则将电文译成密码”A-Z a-z B-Y b-y C-X c-x … 即第一个字母变成第26个字母,第i个
  2. opt-in与opt-out及中文翻译
  3. A题 海岛争霸
  4. 流量并不仅仅只是存在于互联网时代,更重要的是一种模式
  5. 常用单片机编程思想及例程2——串口接收断帧
  6. 瀑布模型,冯.诺依曼结构——摘自百科
  7. 理想运放传递函数的求解
  8. Windows更新策略配置
  9. 血族手游研发手记:突破战斗与操作
  10. php命名空间非限定名称,PHP命名空间 - osc_nnp3dgfb的个人空间 - OSCHINA - 中文开源技术交流社区...