linux基础知识个人总结
第一章:
1. Linux发展史略,有代表性的Linux发行版:Suse、slackware、ubuntu、RedHat、CentOS
2. GNU是Richard Stallman在1983年发起的一项自由软件运动,目标是为了创建一套完全自由的操作系统,它要求我们可以自由使用,自由更改,自由发布软件,GPL是用来规定如何自由的协议。
3. vim、emacs、gcc等
4. 略
第二章
1. 我们所谓的32位、64位指的是CPU的GPRs(General-Purpose Registers,通用寄存器)的数据宽度。64位的cpu较之32位可以进行更大范围的整数运算;可以支持更大的内存。不能因为数字上的变化,而简单的认为64bit处理器的性能是32bit处理器性能的两倍。实际上在32bit应用下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit应用下性能更强。
而操作系统也是区分32位和64位的,目前主流的计算机硬件大多都是64位的cpu,所以都支持安装64位的操作系统,当然安装32位操作系统也是可以的,至于安装32位还是64位系统主要看我们的计算机内存有多大,如果超过4G就安装64位,否则就安装32位反而会更好。
查看系统是32位还是64位使用命令 uname -a 如果显示有X86_64则是64位系统,而显示 i386,i586或者i686则是32位系统。
2. swap分区也就是windows下面的虚拟内存,它的作用主要在于,当系统内存不够用时,或者说快用完时,那么系统会把内存里面的较老的数据临时放到swap中,这样就可以腾出一部分内存分配给其他程序使用。一般我们安装系统的时候,都要分一部分磁盘空间给swap,通常我们分内存大小的2倍给swap,但有时您的服务器内存量很大比如说32G甚至64G,那么没有必要分内存大小的2倍给swap了,因为那样太浪费了。我的建议是,当内存不大于8G时,就分内存的2倍,如果大于8G就分16G即可。
3. grub是基于GUN的一个boot loader, 它是一个多操作系统管理器,用来引导不同的系统。grub可以管理windows系统也可以管理linux系统。
4. 在分区之前,在左下角有一个选项“加密系统”,如果勾选则设置grub密码。
5. 略
第三章
1. sshd默认监听22端口,这个端口我们可以自定义更改,更改/etc/ssh/sshd_config配置文件,port 22 改为 port 1122 ,那么sshd就会监听1122端口了。
2. PuTTY, SecureCRT, Xshell等
3. 需要修改 /etc/sysconfig/network-scripts/ifcfg-eth0, 一般需要修改IPADDR, NETMASK, GATEWAY, DNS1, DNS2
4. service network restart 或者 /etc/init.d/network restart
5. 临时关闭selinux: setenforce 0 永久关闭selinux的方法是: vim /etc/selinux/config 打开这个配置文件后,使: SELINUX=disabled
6. 查看有几块网卡可以使用 ifconfig -a 查看网卡IP使用 ifconfig
7. 使用密钥登录Linux系统会比密码更加安全。
第四章
1. rmdir -p 不能成功删除非空目录,rmdir -p 删除一个不存在的目录时会报错,提示“没有那个文件或目录”
2. 直接回车不会删除,如果输入的不是'y' 也 不是'n'也不会删除
3. mkdir -p /home/1/2/3/4
4. 会提示,是否要覆盖那个文件
5. 一共出现了4次‘root',按n可以向下一行一行的移动,按N可以向上移动。
6. 因为读一个目录,可以说是打开该目录,然后才能查看里面的文件,这个打开的过程就是在执行这个目录,所以必须要有执行权限才能读取到里面的文件。
7. 通过umask计算默认权限的公式是:
1)目录 (rwxrwxrwx)-(umask)=(目录权限),本例中umask=001=(--------x),所以目录的权限是(rwxrwxrwx)-(--------x)=(rwxrwxrw-)=776
2)文件 (rw-rw-rw-)-(umask)=(文件权限),本例中umask=001=(--------x),所以文件的权限是(rw-rw-rw-)-(--------x)=(rw-rw-rw-)=666
所以得出结论,当umask为001时,目录权限是776,文件权限是666
8. find /var/ -type f -mtime -1
find /root/ -type f -mmin -60
9. find /etc/ -type f ! -mtime -365
10. 因为每个目录下面都会有一个.和..也就是说每个目录下面的子目录肯定会有它本身和它上一级目录,那么一旦设置了硬链接则会造成一种混乱,设置会导致死循环。硬链接的文件并不会占用空间大小,它只是复制了该文件的一份inode信息,硬链接文件是不可以跨分区创建的。
11. 普通文件和二进制文件用-表示,目录用d表示,链接文件(应该说是软连接)用l表示,块设备用b表示,套接字用s表示,串行端口设备用c表示。
12. chown -R user1:users dira
13. 默认目录权限是755,文档权限是644,目录默认权限=(rwxrwxrwx)-(umask),文件默认权限=(rw-rw-rw-)-(umask)
14. chmod 750 dirb
15. chattr +a file 这样就可以使文件只能写不能删除
chattr +i file 使文件不能被删除、重命名、设定链接接、写入、新增数据
16. 一个点表示当前目录,两个点表示上级目录。
17. cd - 表示进入到上一次所在的目录
18. 第二列数值表示有几个文件使用相同的inode,如果一个目录的这列为3,我们可以通过使用 ls -al dir/ |grep '^d'|wc -l 这条命令得到
19. 没有locate命令,需要安装mlocate包,yum install -y mlocate, 初次使用报错,是因为对应的数据库文件还没有生成,手动生成的命令是:updatedb
20. 使用 /bin/cp 进行拷贝: /bin/cp a.txt b.txt
21. tail -f file
22. chmod 用来更改文件权限,find ./ -type f |xargs chmod 644
23. echo $HOME
24. chmod o+wt dir
25. 软连接可以理解为,源文件的快捷方式,软连接文件记录的是源文件的路径,占用空间非常小。当把源文件删除后,那么软连接文件也就变成一个坏文件了,不能使用了。
硬链接和源文件的inode信息是一模一样的,可以说硬链接文件只是复制了一份源文件的inode信息,在我们看来硬链接文件和源文件没有什么区别,删除任何一个文件对方都不受影响,唯一的是少了一份inode,硬链接只能在同一个分区下创建,而软连接不受限制。硬链接文件和源文件虽然看起来像是两个文件,但是只占用一个文件的磁盘空间。
26. cat 修改atime, chmod 会更改ctime, vim会更改atime,ctime,mtime, touch也会更改三个时间。
第五章
1. 查看配置文件/etc/shadow第一行中root账号的第三个字段(以':'分隔)中的数字,请算一下这个数字是怎么来的?
距离1970年1月1日到上次更改密码的时间的间隔天数。例如root密码日期更改时间为2013年9月1日星期日,那么配置文件/etc/shadow中root的第三个字段为15949,计算如下:
15949 = (2013-1970)*365+MOD((2013-1970)/4)+(5*31+2*30+28)+1=15695+10+241+1=15949
2. 写出一个您认为很强悍的密码.
2ZbzHsi4#?fega8
3. 查资料搞明白 /sbin/nologin 和 /bin/false 的区别,您知道他们用在什么场合吗?
/sbin/nologin 不允许账号登陆,但是可以使用在ftp账号上,也就是说ftp账号即使设置了该项也可以通过ftp登陆
/bin/false 严格禁止用户登录系统,禁止使用一切服务
4. 请想一想,当我们创建一个新的账号时,系统会修改哪几个文件呢?
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
5. 假如我们已经创建了一个普通用户user1, 默认这个用户的家目录为/home/user1, 做实验证明能否直接修改/etc/passwd配置文件中user1的家目录那个字段而改变user1的家目录呢? (提示: 您可以使用 “cd ~ ”命令来进入当前用户家目录的方法来验证)
[root@uhza006714 ~]# useradd user1
[root@uhza006714 ~]# grep user1 /etc/passwd
user1:x:502:503::/home/user1:/bin/bash
[root@uhza006714 ~]# sed -i 's#/home/user1#/tmp#' /etc/passwd
[root@uhza006714 ~]# grep user1 /etc/passwd
user1:x:502:503::/tmp:/bin/bash
[root@uhza006714 ~]# su - user1
-bash-3.2$ echo $HOME
/tmp
-bash-3.2$ cd
-bash-3.2$ pwd
/tmp
证明可以通过更改/etc/passwd而更改用户的家目录
6. /etc/passwd 文件以":"为分隔符,第三和第四个字段表示什么含义?如果把某一行的第三个字段改为'0' 会发生什么?
第三个表示用户id,第四个为组id,如果把第三个字段改为0,则该用户变成root
7. 先新增一个组group11,然后再新增一个账号user12, 使该账号所属组为刚刚新增的组。
groupadd group11; useradd -g group11 user12
8. 如果删除一个组时报错: “cannot remove the primary group of user 'aming'” 这是什么意思?如何解决该问题呢?
这是因为删除的组内有用户,需要先删除该组内的账号,再删除组
9. 如何删除某个账户时,连带这个账户的家目录一并删除?
userdel -r username
10. 如果您的Linux没有命令"mkpasswd", 需要安装哪个包?
yum install -y expect
11. 普通账户可以修改自己的密码吗?
可以修改
12. 使用su时,后面加了 '-' 表示什么含义?
加上- 表示,切换用户时,使用该用户的所有用户环境变量,例如$HOME, $BASH
13. sudo的作用是什么呢?
使用sudo可以使普通账户不用知道root的密码而临时拥有root的权限,这是为了提高安全性
14. 创建系统账号时,帐户名要符合什么样的规范?
可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。
15. Linux系统里,你知道最大uid能有多大吗?默认创建一个普通帐号的uid最小是多少?
普通用户的uid最大为65535,目前的 linux 核心 (2.6.x 版)已经可以最大支持到 4294967295 (2^32-1) 。默认普通账号的最小uid为500
16. 请思考,一个用户可以同时属于多个用户组吗?如果可以,如何把一个用户加入到另外的组里? 同时加入多个组怎么做?
可以同时属于多个用户组,usermod -G GROUP1,GROUP2,GROUP3 username
第六章
1. 请查资料了解这些术语:/dev/hda, /dev/hdb, /dev/sda, /dev/sdb, 他们之间有什么区别?
/dev/hda, /dev/hdb是IDE接口硬盘的块文件。/dev/hda表示第一块IDE磁盘,/dev/hdb表示第二块IDE磁盘。
/dev/sda, /dev/sdb是SCSI接口硬盘的块文件。/dev/sda表示第一块SCSI磁盘,/dev/sdb表示第二块SCSI磁盘。
2. 为什么 du -b /etc/passwd 和 du -k /etc/passwd 所得到的结果不一致呢?按道理讲1024b 等于 1k 阿铭的 /etc/passwd 为 1181b 而 使用k为单位表示它竟然是 4k.
因为默认格式化磁盘的块大小是4096字节即4K,即使是一个很小的文件也会分得一个块大小为4k。du -b则会以文件大小的b单位来统计,所以结果不一致。
3. 请查资料,了解磁盘的这些概念: heads, sectors, cylinders.
磁头(heads): 磁头固定在可移动的机械臂上,用于读写数据。现代硬盘都是双面可读写,因此磁头数量等于盘片数的2倍。磁头数最大值为 255 (8 个二进制位)。用第几磁头可以表示数据在哪个磁面。
扇区(sectors): 从磁盘中心向外画直线,可以将磁道划分为若干个弧段。每个磁道上一个弧段被称之为一个扇区。扇区是硬盘的最小组成单元,通常是512字节。磁道上的扇区数最大为63(6个二进制位)。
柱面(cylinders): 所有磁片中半径相同的同心磁道构成“柱面"。柱面数最大为1023 (10个二进制位)。柱面是磁盘分区的最小单位。
4. 请计算磁盘分区的时候,每一个柱面空间是多大? 阿铭的第二块磁盘是8589 MB (8589934592 bytes),总共有1044个柱面。
柱面空间大小=磁头数*每磁道扇区数*扇区大小=255*63*512(bytes)=8225280 bytes
5. 查资料了解ide和scsi接口的磁盘有什么不一样,scsi 磁盘(sda, sdb)最多可以分多少个逻辑分区(这个了解即可)?
SCSI硬盘和普通IDE硬盘相比有很多优点:接口速度快,并且由于主要用于服务器,因此硬盘本身的性能也比较高,硬盘转速快,缓存容量大,CPU占用率低,扩展性远优于IDE硬盘,并且支持热插拔。
关于最多可以分多少个逻辑分区的问题,了解即可。
6. 把磁盘格式化成ext4文件系统时,如果指定块大小并不是 1024 2048 4096 会发生什么?指定块大小最小是多少,最大又是多少?
当格式化文件系统时,如果指定块大小不是1024、2048、4096这几个标准值,会出现下面几种情况:
(1)当指定块小于1024时,则提示错误“无效的块大小”,不能格式化。
(2)当指定块大于1024且小于2048时,则实际以1024的块大小进行格式化。
(3)当指定块大于2048且小于4096时,则实际以2048的块大小进行格式化。
(4)当指定块大于4096且小于或等于65536时,则提示块值太大,是否继续,选择y继续,则以不大于指定块的4K的整数倍值(从4K到32K)进行格式化。
(5)当指定块大于等于65536时,则提示块值太大,是否继续,选择y继续,则以65536字节进行格式化。
(6)当指定块大于65536时,则提示错误“无效的块大小”,不能格式化。
7. 如何查看当前系统里各个分区都是什么类型的文件系统?
mount 或者 df -T
8. /dev/zero 和 /dev/null 在linux系统中是什么文件,有什么作用?
/dev/zero 是一个造零器,它可以源源不断的提供0,它可以用于向设备或文件写入字符串0,可以用它来创建一个指定长度用于初始化的空文件,比如临时交换文件等。
/dev/null 它是空设备,也称为位桶(bit bucket),任何写入它的输出都会被抛弃。常用来禁止标准输出和标准错误的输出。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
9. Linux下df 和 du 两个命令主要用来做什么?
df 查看磁盘分区和文件系统信息
du 查看目录或文件所占用的磁盘空间大小
10. 在Linux系统下,用什么命令为一个新磁盘分区呢?又用什么命令格式化磁盘?
fdisk 为新磁盘分区,可以使用mkfs.ext2、mkfs.ext3、mkfs.ext4、mke2fs等命令格式化磁盘。
11. 如果不能使用mount 挂载磁盘时,我们需要使用什么命令获取相关错误信息?
dmesg
12. 当卸载某个磁盘或者分区时,报错: “umount: /newdir: device is busy.” 我们如何做?
报这个错,可能是因为当前用户在/newdir目录下,可以先退出这个目录来,也可以使用命令 umount -l /newdir
13. 如何获取某个分区的UUID?
blkid
14. 如何使用dd命令生成一个大小为500M的文件?
dd if=/dev/zero of=/bigfile bs=1024K count=500
15. 查看内存大小的命令是? 如何以M为单位显示?
free -m
16. 如何查看各文件系统的inode数使用情况?
df -i
17. 使用vmware虚拟机分配一块1G的虚拟磁盘,并使用fdisk 分区工具给新加的磁盘分3个主分区,分别200M,然后再分3个逻辑分区,分别100M.
fdisk /dev/sdb 回车后,先按n,按p,输入1,再输入1,再输入+200M;按n,按p,输入2,再回车,再输入+200M;按n,按p,输入3,再回车,再输入+200M;按n,按e,接着按两次回车;按n,接着回车,输入+100M;按n,接着回车,输入+100M;按n,接着回车,输入+100M;
18. 给磁盘分区的时候,最多可以分几个主分区,最多可以分几个扩展分区,扩展分区和逻辑分区的关系时什么?
最多4个主分区,最多一个扩展分区,只有划分了扩展分区后,才可以在扩展分区内划分逻辑分区,也就是说逻辑分区是在扩展分区内的。
19. 我使用fdisk -l /dev/sdb 查看磁盘分区状况的时候,发现有这么几个分区: sdb1, sdb3, sdb5, sdb6, sdb7, 那么请推算一下,这个磁盘,共有几个主分区和几个逻辑分区?
一个主分区,三个逻辑分区(sdb5,sdb6,sdb7)
20. 有什么方法可以查看某个分区格式化时指定的块大小为多少(1024,2048,4096)?
有两种方法:
第一个是个笨方法,touch 1; echo 1 > 1; du -sh 1 看看1的大小事几k,是1k块大小就是1024,2k块大小就是2048,4k块大小就是4096
第二个方法是,tune2fs -l /dev/sda1 |grep 'Block size'
第七章
1. vi 与 vim 有什么区别呢,它们之间有什么关系?
Vim是从Vi发展出来的一个文本编辑器,可以看作是vi的升级版。Vim的主要功能与原始的Vi完全兼容,与Vi不同的是,vi不会显示颜色,而vim会根据文件内容显示不同颜色,方便阅读和编辑。而且Vim具有代码补完、编译及错误跳转等方便编程的丰富功能,在程序员中被广泛使用。( Vim和Emacs并列成为类Unix系统用户最喜欢的编辑器。)
2. 如何查看当前系统vim的版本?
vim --version
3. 如果想把文档中出现的全部"abc"替换成"def"怎么做?又如何只替换每行中出现的第一个"abc"呢?
:1,$s/abc/def/g
:1,$s/abc/def
4. 当搜索某个关键词时,光标所定位的关键词所在的行是如何决定的?也就是说,光标是定位到最顶端出现的关键词的那行还是最底端关键词出现的那行,还是另外的情况?如果想从当前关键词移动到下一个关键词怎么操作?移动到上一个关键词又怎么操作?
需要看vim进入文档时,光标所在位置,定位关键词是依据于光标所在的位置。
如果使用/搜索关键词,则按‘n'向下移动,按shift + n 向上,如果使用?搜索关键词,和前者正好相反。
5. 当编辑完文档后,按ESC进入命令模式,输入命令 :x 会怎么样?
输入命令:x后也能保存文件并退出,有点类似:wq ,但两者有区别。
:x #写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。
:wq #强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。
6. 在一般模式下如何快速的把光标快速的向右或向左移动10个字符?
向右:10空格
向左:10l
7. vim + filename 表示什么含义, vim +10 filename 将会发生什么?
vim + 进入文档后,定位到最后一行
vim +10 进入文档后,光标定位到第10行
8. 用vim打开一个文档后,我想让光标跳到第20行,怎么做?跳到最后一行怎么做?
跳到20行,输入20G
最后一行,输入G
9. vim 打开文档后,默认是不显示行号的,如何做让它显示行号?
:set nu
10. vim打开文档后,我想把20-50行中的第一个'abc' 替换为 'efg' 怎么操作?如果是想替换所有呢?
:20,50s/abc/efg 只替换第一个
:20,50s/abc/efg/g 替换全部
11. vim打开文档后,如何快速删除前100行?
先按'gg' 到第一行,然后输入100d
12. vim打开文档后,如何复制一行,并粘贴到第20行的下面?
定位到要复制的行,然后输入yy,然后输入20G,再输入p
第八章
1. gzip, bzip2 能否直接压缩目录呢?
不能直接压缩目录
2. 请快速写出,使用gzip和bzip2压缩和解压一个文件的命令。
gzip 1.txt
gzip -d 1.txt.gz
bzip2 1.txt
bzip2 -d 1.txt.bz2
3. tar 在打包的时候,如果想排除多个文件或者目录如何操作?
tar cvf 123.tar --exclude a.txt --exclude b.txt 123/
4. 请实验,如果不加 "-" 是否正确, 如 tar zcvf 1.tar.gz 1.txt 2.txt ?
不加 - 一样没有问题
5. 如何使用tar打包和解包 .tar.gz, .tar.bz2 的压缩包?
tar zcvf 1.tar.gz 1
tar zxvf 1.tar.gz
tar jcvf 1.tar.bz2 1
tar jxvf 1.tar.bz2
6. 找一个大点的文件,使用tar 分别把这个文件打成 .tar.gz和.tar.bz2 压缩包,比较一下哪个包会更小,从而得出结论,是gzip压缩效果好还是bzip2压缩效果好?
理论上.tar.bz2的压缩包小一些,但个别时候,有相反的情况。但大多时候bzip2压缩效果好。
7. 使用tar打包并压缩的时候,默认压缩级别为几? 想一想如何能够改变压缩级别呢?(提示,tar本身没有这个功能哦,可以尝试拆分打包和压缩)
tar打包压缩时,是按照gzip和bzip2的默认压缩级别来的,gzip工具默认压缩级别为6,bzip2默认压缩级别为9.
改变默认压缩级别可以这样来做,首先tar打包,然后再使用gzip或者bzip2压缩工具来压缩,压缩的时候指定压缩级别。如: tar cvf 1.tar 123/; gzip -2 1.tar
第九章
1. 区分 rpm -qi -qf -ql -qa四个不同选项组合的作用?
rpm -qi //查询已经安装的某个RPM软件包的信息
rpm -qf //查询某个程序文件是由哪个RPM软件包安装的
rpm -ql //查询某个RPM软件包的所有安装文件
rpm -qa //查询所有已经安装的RPM软件包
2. rpm -qi 后面如果跟一个未安装的包名,会显示什么信息?
会提示该软件包没有安装
3. 请找出 vim 这个命令是由哪个rpm包安装来的?
rpm -qf `which vim`
4. 使用rpm安装和卸载某个包的命令是什么?
rpm -ivh rpm包文件名
rpm -e 包名
5. rpm安装某个包有依赖关系时,如何忽略依赖关系,强制安装该包?
rpm -ivh --nodeps
6. 如何使用rpm升级一个包?
rpm -Uvh
7. 使用yum搜索包含关键词 "tidy" 的rpm包,并安装,安装后再使用yum将其卸载。
yum list |grep tidy
yum install -y tidy tidy-devel
yum remove -y tidy tidy-devel
8. 如何使用yum来下载一个rpm包?
yum install -y --downloadonly --downloaddir=/usr/local/src
9. 请到php的官方网站下载一个php的源码包,动手试试编译安装它?(php官网地址 http://www.php.net/)
10. 查资料搞明白 yum upgrade 以及 yum update 两者的区别?它们在什么情况下使用?
yum upgrade与yum update都能更新系统的所有软件包,不同的就是upgrade相当一次大规模的升级,连带了旧的要淘汰的包也升级。update 和 upgrade 的侧重点不一样,update主要是使软件达到最新,但upgrade更侧重的是软件功能得到一个很大的提升,区别于频繁的发布最新的补丁。upgrade不改变软件设置和系统设置,系统版本升级,内核不改变;update改变软件设置和系统设置,系统版本内核都升级。
yum upgrade : 用于大规模的版本升级,更新Linux系统和整个软件版本
yum update : 用于安装补丁文件,更新内核和软件包到最新
11. 如何查看Linux系统中(CentOS)是否安装过某个包?
rpm -qa | grep 包名
12. ./configure 完成后,并不知道到底有没有成功,用什么命令可以验证呢?
echo $?
13. 如果在./configure 这一步出现这样的错误"configure: error: no acceptable C compiler found in $PATH" 我们该怎么办?
yum install -y gcc
14. 有时,你忘记某个编译参数是如何写的,你怎么办?
./configure --help
15. 如何使用光盘构建yum仓库?
a)挂载光盘 mount /dev/cdrom /mnt
b)删除/etc/yum.repos.d目录所有的repo文件 rm -rf /etc/yum.repos.d/*
c) 创建新文件dvd.repo
[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo
加入以下内容:
[dvd]
name=install dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0
d) 刷新 repos 生成缓存 # yum makecache
本文出自 “tangjiLinux” 博客,谢绝转载!