第三部分:这部分题目内容涉及到w、who、users、last、lastlog、mkdir、chmod、cut、awk、sed、setup、ifconfig、route、date、sudo、which、whereis、locate、find、shutdown、reboot、useradd、chage、grep、echo、stat。
口头表达部分:
1、描述linux系统从开机到登录界面的启动过程。
1)开机BIOS自检,加载硬盘。
根据开机启动项,启动系统
2)读取MBR,MBR引导。
磁盘的0柱面0磁道1扇区(512字节)的前446字节中有引导程序,通过 引导程序加载gurb菜单,剩余66字节中,64字节记录分区信息,还有2 字节作为分区结束标识(AA55)
3)gurb引导菜单(开始启动菜单)
4)加载内核kernel。
5)启动init进程,
查看进程
[root@tdf shizhi]# ps -ef |grep ssh |grep -v grep
6)在init进程中读取inittab文件,执行rc.sysinit文件。
/etc/inittab文件决定开机启动级别→3→/etc/rc.d/rc3.d
/etc/rc.sysinit 脚本,(定义了主机名,开机启动项等等)
7)启动mingetty,进入系统登陆界面。
2、描述linux下软链接和硬链接的区别。
①默认不带参数的情况下,ln创建的是硬链接,带-s参数的ln命令创建的是软链接。
②硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号,与源文件不同,
③ln命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。
④删除软链接文件,对源文件和硬链接文件无任何影响。
⑤删除文件的硬链接文件,对源文件及软链接文件无任何影响。
⑥删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。
⑦同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
⑧很多硬件设备的快照功能,使用的就是类似硬链接的原理。
⑨软链接可以跨文件系统,硬链接不可以跨文件系统。
3、描述linuxshell中单引号、 双引号及不加引号的简单区别。
单引号:所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就输出什么。
双引号:把双引号里面的内容给输出出来,如果内容中有命令、变量等,会先把,变来那个、命令解析出结果,然后输出最终内容。
双引号内的命令或者变量写法’命令或变量’或$(命令或变量)
无引号:把内容输出出来,可能不会键含有空格的字符串,视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出来,然后输出最终内容,如果字符串中带有空格等特殊字符,则不能完整输出,需要改加双引号。一般连续的字符串,数字,路径等可以用,不过最好用双引号,替代之。
4、描述linux下文件删除的原理
Linux系统是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说每个文件两个link计数器来控制i_count和i_nlink。当一个文件被一个程序占用的时候i_count就加1。当文件的硬链接多一个的时候i_nlink也加1。删除一个文件,就是让这个文件,没有进程占用,同时i_link数量为0。
i_count的意义是当前文件使用者(或被调用)的数量i_nlink的意义是介质连接的数量(硬连接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器
当一个文件被某一个进程引用时,对应i_count数就会增加,当创建文件的硬连接的时候,对应i_nlink数就会增加。
技能操作部分:
1、如何取得/shizhi文件的权限对应数字内容,如-rw-r--r--为644,要求使用命令取得644或0644这样的数字。
环境:touch /shizhi
方法一
[root@tdf/]# stat shizhi |sed -n 4p |sed -nr 's#^.*\(0(.*)/-rw.*$#\1#gp'
644
方法二
[root@tdf/]# stat shizhi |sed -n 4p |sed -nr 's#^.*\(0([0-9]{,3})/-rw.*$#\1#gp'
644
方法三
[root@tdf/]# stat shizhi |sed -n 4p |sed -nr 's#^.*\(0##gp'|sed -nr 's#/-rw.*$##gp'
644
[root@tdf/]# stat shizhi |sed -n 4p |sed -r 's#^.*\(0##'|sed 's#/-rw.*$##'
644
只有一行的情况下-n可加可不加,加了的话结尾+p
方法四
[root@tdf/]# stat -c %a /shizhi
644
-c自定义输出格式
%a以8进制形式获取字符权限
方法五
[root@tdf/]# stat shizhi | awk -F "[0/]" 'NR==4{print $2}'
644
方法六
ll-dshizhi | cut -c 2-10 |tr "rwx-" "4210" | awk -F"" '{print$1+$2+$3""$4+$5+$6""$7+$8+$9""}'
cut剪切 -c 字符 -d 定义分割符 -f制定区域
tr 替换
思路:
1、stat输出含有目标的内容
2、可以通过head tail grep sed awk 这些命令来取行
3、通过cutawk 取得相应的内容
4、当命令结果中含有需要的内容时,可以尝试使用命令的参数进一步获取想要的内容
2、linux下通过mkdir命令创建一个新目录/shizhi/ett,ett的硬链接数是多少,为什么?如果在ett目录下在创建一个新的目录呢?ett的硬链接数是多少?为什么?
[root@tdf/]# tree shizhi
shizhi
└── ett
[root@tdfshizhi]# ll
total 4
drwxr-xr-x.2 root root 4096 Jun 28 10:25 ett
硬链接数为2个,分别为.(自己本身)和/shizhi/etc
[root@tdfett]# mkdir test
[root@tdfshizhi]# ll
total 4
drwxr-xr-x.3 root root 4096 Jun 28 10:32 ett
硬链接数为3个,分别为.(自己本身)和/shizhi/etc和/shizhi/etc/test/..
3、请执行命令取出linux中eth0的IP地址(请用cut,也可以使用awk.sed等命令至少给出4种答案)
方法一
[root@tdf/]# ifconfig eth0 |sed -n 2p|sed -nr 's#^.*addr:(.*) Bcast.*$#\1#gp'
192.168.0.46
方法二
[root@tdf/]# ifconfig eth0 |sed -n 2p|awk -F "[ :]+" '{print $4}'
192.168.0.46
方法三
[root@tdf/]# ifconfig eth0 |sed -nr's#^.*addr:([0-9]{,3}.[0-9]{,3}.[0-9]{,3}.[0-9]{,3}) Bc.*$#\1#gp'
192.168.0.50
方法四
[root@tdf/]# ifconfig eth0 |sed -n 2p |cut -d ":" -f2 |cut -d " "-f1
192.168.0.46
对上面的结果以:为分割符,然后取第2个字段,接着以为分割符取第1个字段
4、请给出默认情况eth0网卡配置文件的路劲及客户端DNS的路径。
eth0网卡配置路径:/etc/sysconfig/network-scripts/ifcfg-eth0
客户端DNS的路径 :/etc/resolv.conf
5、查找当前目录下所有文件,并把文件中的www.52lab.com字符串替换成www.baidu.com.
环境:touch {1..4}.txt
echo www.52lab.com > 1.txt
echo www.52lab.com >2.txt
echo www.52lab.com > 3.txt
echo www.52lab.com >4.txt
方法一
[root@tdftest]# find . -type f |xargs sed -i 's#52lab#baidu#g'
6、如何赋予shizhi文件 -rw-r--r-x权限属性
[root@tdftest]# chmod 645 shizhi
[root@tdftest]# ll shizhi
-rw-r--r-x.1 root root 0 Jun 28 11:32 shizhi
7、执行下面命令时提示需要输入密码,请问提示用户的密码是哪个用户的密码?
[hh@shizhi~]$sudo su - oldboy
su- : 切换用户
sudosu - : 以当前用户的身份执行 su - 命令
不管你以什么身份执行 su - 命令,结果都是一样的,所以sudo su - 没意义,直接 su - 即可
密码应该是oldboy用户的
8、8、请问在一个命令上加什么参数可以实现下面命令的内容在同一行输出??
[root@shizhi~]# echo "shizhi"; echo "shizhi"
shizhi
shizhi
方法一:加参数 -n (不在结尾处自动换行)
[tdf@tdf~]$ echo -n "shizhi"; echo "shizhi"
shizhishizhi
如果想要在同行显示,并在中间加上空格,可以使用-e参数
[tdf@tdf~]$ echo -ne "shizhi\t"; echo"shizhi" 中间空出一个tab键的距离
[tdf@tdf~]$ echo -ne "shizhi\n"; echo"shizhi" 换行
-e参数:如字符串出现以下字符,加以特殊处理;
\t 表示插入一个tab键
\n 表示换行,相当于回车,并把光标移动到行首
9、请给出如下格式的date命令,例:17-04-17。再给出实现按周输出。
比如:周六输出为6,请分别给出命令。
[tdf@tdf~]$ date +%y-%m-%d
17-06-28
[tdf@tdf~]$ date +%A
Wednesday
[tdf@tdf~]$ date +%A%u
Wednesday3
[tdf@tdf~]$ date +%u
3
补充:
%n: 下一行
%t: 跳格
%H: 小时(00..23)
%I: 小时(01..12)
%k: 小时(0..23)
%l: 小时(1..12)
%M: 分钟(00..59)
%p: 显示本地 AM 或 PM
%r: 直接显示时间 (12 小时制,格式为hh:mm:ss [AP]M)
%s: 从 1970 年 1 月1 日 00:00:00 UTC 到目前为止的秒数
%S: 秒(00..61)
%T: 直接显示时间 (24 小时制)
%X: 相当于 %H:%M:%S
%Z: 显示时区 %a : 星期几(Sun..Sat)
%A: 星期几 (Sunday..Saturday)
%b: 月份 (Jan..Dec)
%B: 月份 (January..December)
%c: 直接显示日期与时间
%d: 日 (01..31)
%D: 直接显示日期 (mm/dd/yy)
%F:相当于%Y-%m-%d
%h: 同 %b
%j: 一年中的第几天 (001..366)
%m: 月份 (01..12)
%U: 一年中的第几周 (00..53) (以Sunday 为一周的第一天的情形)
%w: 一周中的第几天 (0..6)
%W: 一年中的第几周 (00..53) (以Monday 为一周的第一天的情形)
%x: 直接显示日期 (mm/dd/yy)
%y: 年份的最后两位数字 (00.99)
%Y: 完整年份 (0000..9999)
工作情况下使用最多的就是年月日(date %F或者date+%Y-%m-%d)
====================================================================
tar命令==>压缩或解压或打包
常用参数:
z 表示以gzip的方式压缩
j 表示以bz2的方式压缩
c 表示创建
v 表示显示过程
f 表示自定义名称,必须放在最后,后面接文件名
x 表示解压
===================================================================
以时间为打包后的文件名,实现按天打包
[root@tdfshizhi]# tar zcvf test.txt.`date +%F`.tar.gz test.txt
[root@tdfshizhi]# tar zcvf test.txt.`date +%y-%m-%d`.tar.gz test.txt
10、打印三天前的日期格式如:2017-04-13
环境:使用date命令设置到当前时间 date -s
同步时间:ntpdate ntp1.aliyun.com
[tdf@tdf~]$ date +%F
2017-06-28
[tdf@tdf~]$ date -d '-3 day' +%F
2017-06-25
[root@tdfshizhi]# date +%Y-%m-%d --date="-1 day"
扩展
day天 hour小时 min分钟
11、当创建一个文件并给这个文件执行的权限后,为什么只有指定路径才能使用,而系统的命令如ls之类的可以直接使用呢?ls 的文件在/bin/ls 可以直接使用ls呢?例子如下:
[root@shizhi~]# echo 'echo hello world!!!' >shizhi
[root@shizhi~]# cat shizhi
echohello world!!!
[root@shizhi~]# chmod +x shizhi
[root@shizhi~]# ll shizhi
-rwxr-xr-x1 root root 20 Apr 15 05:12 shizhi
[root@shizhi~]# ./shizhi
helloworld!!!
[root@shizhi~]# shizhi
-bash:shizhi: command not found
linux系统在运行程序时,若不指定具体文件路径,则系统会在环境变量PATH所指定的搜索路径中搜索该程序,如果找到,则执行该程序,如果找不到会报告:command not found (命令未找到)
因此,若想不加路径名运行当前目录下的程序,必须在PATH中进行搜索路径设置,如:
exportPATH=$PATH:.
点(.)是指当前目录,点点(..)是指上一级目录
如果,没有在PATH中指定当前目录,则运行程序,必须要加上路径名,如:
./myprog
/tmp/test_prog
出现这种情况是由于环境变量PATH路径导致的,如果想要让自己创建的文件像系统命令一样,就可以将文件所在的路劲加入到PATH变量中。
方法一:临时变量
PATH=“$PATH:文件所在的路径(/root)” 将文件所在的路径加入到PATH
exprot PATH=$PATH:/root
which 工作原理基于PATH变量
方法二:永久生效
/etc/profile 将方法一中的命令写入/etc/profile
./etc/profile 应用这个配置文件
/etc/profile的意思是全局变量
12、已知/shizhi/test.txt文件内容为:
shizhi
xinxi
linux
请问如何把文件中的空行过滤掉?
[root@tdfshizhi]# cat test.txt |grep -v “^$” test.txt
shizhi
xinxi
linux
[root@tdfshizhi]# sed '/^$/'dtest.txt 删除空行
13、请描述下列路径的内容是做什么的?
/var/log/message 系统日志文件
/var/log/secure 系统安全日志
/proc/interrupts 查看中断信息
文件中列出当前系统使用的中断的情况,所以某个中断处理没有安装,是不会显示的。
/etc/fstab 开机自动挂载文件
存放的是系统中的文件系统信息;它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。fstab可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等
/etc/profile 全局环境变量文件
这个文件是每个用户登录时都会运行的环境变量设置,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
14、如何快速查找ifconfig的全路径,请给出命令。
方法一:
[root@tdfshizhi]# find / -type f -name "ifconfig" -print
/sbin/ifconfig
不同于locate,find是从整个文件中查找,耗资源
方法二:
[root@tdf/]# which ifconfig 基于PATH变量来查找
/sbin/ifconfig
方法三:
[root@tdf/]# whereis ifconfig
ifconfig:/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@tdf/]# whereis -b ifconfig -b查看二进制文件
ifconfig:/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
方法四:
[root@tdf/]# locateifconfig
/sbin/ifconfig
/usr/sbin/pifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/man8/pifconfig.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
locate命令类似于find,不过是从数据库中查找相关的项,每天凌晨4点更新,如果数据库没有更新,可以通过updatedb命令,手动更新。
15、请给出正确的关机和重启服务器的命令。
关机:
shutdown命令安全地将系统关机。
shutdown 参数说明:
[-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。
[-r] 重启计算器。
[-k] 并不真正关机﹐只是送警告信号给每位登录者〔login〕。
[-h] 关机后关闭电源〔halt〕。
[-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。
[-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。
[-f] 在重启计算器〔reboot〕时忽略fsck。
[-F]在重启计算器〔reboot〕时强迫fsck。
[-time] 设定关机〔shutdown〕前的时间。
halt----最简单的关机命令(立即停止系统,需要人工关闭电源)
其实halt就是调用shutdown-h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。
参数说明:
[-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。
[-w] 并不是真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。
[-d] 不写wtmp纪录〔已包含在选项[-n]中〕。
[-f] 没有调用shutdown而强制关机或重启。
[-i] 关机〔或重启〕前﹐关掉所有的网络接口。
[-p] 该选项为缺省选项。就是关机时调用poweroff。
poweroff————立即停止系统,并关闭电源
init
init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机﹐init1为重启。关于init可以长篇大论﹐这里就不再叙述。另外还有telinit命令可以改变init的运行级别﹐比如﹐telinit -iS可使系统进入单用户模式﹐并且得不到使用shutdown时的信息和等待时间
重启:
reboot
reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机。它的参数与halt相差不多。
init6
shutdown-r
注销:
logout
exit
Ctrl+ d 最常用
16、请写出下面命令行快捷键的功能。
Ctrl+ a 移动光标到开头(行首)
Ctrl+ e 移动光标到结尾(行尾)
Ctrl+ c 中断当前程序(命令或脚本)
Ctrl+ d 退出当前窗口或当前用户
Ctrl+ l 清屏 相当与clear
Ctrl+ u 剪切、删除(光标以前的)内容
Ctrl+ k 剪切、删除(光标以后的)内容
Ctrl+ r 查找(最近用过的命令)
tab 所有路径以及补全命令
Ctrl+shift+c命令行复制内容
Ctrl+shift+v命令行粘贴内容
Ctrl+ q 取消屏幕锁定
Ctrl+ s 执行屏幕锁定