20150830 课后练习

一、作业(练习)内容:

1、总结文本编辑工具vim的使用方法;

Vim

(1).命令解释:模式化的编辑器

(2). 有多种不同的模式:

编辑模式:命令模式

输入模式:插入模式

末行模式:vim有许多内置命令,此模式作为命令的接口

编辑模式=====输入模式:

i:在当前光标所在处,转换为输入模式

I:在当前光标行行首,转换为输入模式

a:在当前光标所在处的后方,转换为输入模式

A:在当前光标所在行的行尾转换为输入模式

o:在当前光标所在行的下方新建一个空白行,并转换为输入模式

O:在当前光标所在行的上方新建一个空白行,并转换为输入模式

输入模式=====>编辑模式:ESC

编辑模式====>末行模式:“:”

末行模式====>编辑模式:ESC

(3).退出vim

末行模式:

q! 强制退出,不保存编辑的内容退出

wq 保存退出

x 保存退出

xq! x!  强制保存退出

编辑模式:

ZZ 保存退出

(4).编辑命令

光标移动:

字符间移动:

h:光标向左移动

l:光标向右移动

k:光标向上移动

j:光标向下移动

单词间移动:

w:移动到下一个单词的词首

e:移动到下一个单词的词尾

b:当前或者前一个单词的词首

#:一次跳n个单词

行首行尾间跳转:

0:跳转至非tab字符上绝对行首

^: 跳转至第一个非空白字符

$: 跳转至绝对行尾

句子间跳转:

):跳转到下一个句子的句首

(:跳转到前一个句子的句首

段落间移动:

}: 跳转到下一个段落

{: 跳转到上一个段落

行间快速移动:

#G #表示想要跳转的行数

G:文章尾部

1G:文章首部

末行模式:n 跳转至n行

编辑操作:

x:删除光标所在处的字符

#x:删除光标所在处以及向后的#个字符

r: 替换光标所在处的字符

d:删除命令:

dd:删除光标所在行 #dd:删除光标所在行以及下行的共#行:

与跳转命令一同使用

d$:删除光标所在处至行尾的内容; D:相同

d^:删除光标所在处至行行首的内容

dw,de,db:这3个命令支持前面使用#来指明涵盖的单词个数

p:粘贴:

行级别:

p:粘贴在光标所在行下方

P:粘贴在光标所在行上方

y:复制

yy:复制光标所在行 Y:复制一整行

#yy:复制光标所在行以及下行共#行

d$:复制光标所在处至行尾的内容

d^:复制光标所在处至行行首的内容

yw,ye,yb:这3个命令支持前面使用#来指明涵盖的单词个数

c:修改

cc:删除光标所在行整行内容,并立即转为输入模式

#cc:

c$,C,c^,c0,cw,cb,ce

撤销操作:

u:撤销

#u:撤销#次操作

取消上一次操作:

Ctrl+r

重复前一次命令

(5).可视化模式:

v:选择光标所在行光标左侧的内容

V:选择光标所在行向有右侧的内容

(6).编辑模式下的翻屏命令

Ctrl+f:向文件尾部翻一屏

Ctrl+b:向文件首部翻一屏

Ctrl+d:向文件尾部翻半屏

Ctrl+u:向文件首部翻半屏

(7).文本查找

/PATTERN

?PATTERN

n:向文本尾部查找

N:向文本首部查找

(8).文本替换

末行模式:内置命令接口,有命令历史记录功能

有部分内置命令用于编辑操作,此时可使用地址定界法进行

地址定界:

Startline[,endline]

#:第#行

.:当前行

$:最后一行

%:全文

相对定界:

+#:从指定位置向下#个行

-#:从指定位置向上#个行

文本替换命令:s

s/要查找的内容/替换为的内容/修饰符

/:分隔符,用于分割“查找的内容”和“替换为的内容”:此分隔符可使用 其他字符,如@,#等:

要查找的内容:可使用正则表达式:此部分可以后面“替换为的内容”部分 中使用“&”全部引用:

替换为的内容:不可使用正则表达式,一般为正常文本,但可以使用正则表

修饰符:

i:查找时不区分字符大小写

g:global,全局替换;

(9).多文件模式:

打开文件:

vim [OPTION]...[FILE]...

+#:快速定位至#行

+/PATTERN 快速定位至被模式第一次匹配至行

多文件:

vim FILE1 FILE2 FILE3...

末行模式:

:next 下一个

:prev 上一个

:last 最后一个

:first 第一个

退出所有文件:

wqall 保存所有并退出

wall   保存所有

qall 退出所有

多窗口:

-o 水平分割窗口 ctrl+s 水平分割文档

-O 垂直分割窗口 ctrl+v 垂直分割文档

(10).界面特性

开启关闭行显示:

Set nu

Set nonu

开启语法高亮功能:

synatx (on|off)

开启搜索高亮功能:

set hlsearch

set nohlsearch

开启自动缩进功能:

set autoindent:set ai

set noautoindent: set noai

字符大小写是否区分功能:

set ignorecase: set ic

Set noignorecase: set noic

(11).配置文件

全局:/etc/vimrc

个人:~/.vimrc

2、总结文件查找命令find的使用方法;

find

(1).命令解释:

通过遍历指定的目标目录,实施查找符合条件指定属性的文件

(2)命令语法:

find[OPTIONS] [查找路径][查找条件][处理动作]

查找路径:默认为当前路径

查找条件:默认为指定路径下的所有文件

处理动作:默认为打印至屏幕

查找条件:

-name: “文件名”:文件名支持使用globbing

-iname: “文件名”不区分大小写

-user:根据属主查找

-group:根据属组查找

-uid:根据uid号来查找

-gid:根据gid号来查找

-nouser:查找没有属主的文件

-nogroup:查找没有属组的文件

组合查找:

与 -a (找出/tmp目录下属主有写权限,并且是root的文件:

或 -o (找出/tmp目录下名字包含123的文件,或者uid是600的文件

非 -not (找出/tmp目录下既不属于root用户,并且也不属于hzm用户的文件

非A或非B = 非(A且B)

非A 且非B = 非(A或B)

查找条件:

根据类型查找:

-type:

f:普通文件

d:目录文件

l:符号连接

b:块设备

c:字符设备文件

p:命名管道文件

s:套接字文件

根据文件大小查找:

-size:+|-

常用单位有:k,M,G

#:#-1< x <= #  实例:2k: 结果:1.8k ,1.9k ,1.1k都符合

+: x > #        实例:+2k:结果:2.1k,3.1k都符合 2k不符合

-: x <= #-1      实例:-2k:结果:1k,0.9k都符合

根据时间查找:

以“天”为单位:

-atime:[+|-] :访问时间:

#:#- < x < #+1    表示#+1天的时间段被访问过的文件

-#:x < #          表示#天之内的被访问过的文件

+#: x >= #+1      表示#+1天之外被访问过的文件

-mtime:  [+|-] :修改时间

-ctime:  [+|-] :改变时间

以“分钟”为单位:

-amin:[+|-]

-mmin: [+|-]

-cmin: [+|-]

实例:查找/tmp下5分钟以内被访问过的文件:

以“权限”为单位:

-perm:[+|-]mode

mode::精确匹配

+mode:满足任何一类用户的任何以为权限即可  +或关系

-mode:每类用户的任何一位都需匹配        -且关系

所有都没有 相反:至少有一个有

所有都有  相反:至少有一个没有

实例:查找/tmp下包含666权限的文件,或者是精确匹配666的文件

3、总结bash环境变量的相关内容;

总结Bash变量的类型:

本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括当前shell进程的子进程。             VAR_NAME=VALUE

变量赋值:向变量的存储空间保存数据

变量引用:${VAR_NAME}

“”:弱引用,里面的变量会被替换

‘’:强引用,里面的所有祖父都是字面量,直接输出

环境变量:对当前shell进程及其子shell有效,对其他shell进程无效。

定义环境变量: export VAR_NAME=VALUE

导出:      export VAR_NAME

撤销变量:unset VAR_NAME

局部变量:对shell脚本中某代码片段有效,通常用于函数本地:

Loacl export VAR_NAME=VALUE

位置变量:$1,$2,....${10}

特殊变量:$?

查看当前shell进程中的所有变量:set

查看当前shell进程中的所有环境变量:export,printenv,env

变量命名规则:

1.不能使用程序中的关键字(保留字) if,case,for

2.只能使用数字,字母和下划线,且不能以数字开头

3.要见名之意

变量类型:

数值型:

精确数值:整数

近似数值:浮点型

单精度浮点

双精度浮点

字符型:

char

string

布尔型:

ture,false

类型转换:

显式转换

隐式转换

bash是弱类型的语言,一切皆字符

配置文件,生效范围划分,存在两类:

Profile类:为交互式登陆的用户提供配置:

全局配置: /etc/profile, /etc/profile.d/*.sh

个人配置: ~/.bash_profile

功用:1.设定环境变量

2.运行命令或脚本

bashrc类:为非交互式登陆的用户提供配置:

全局配置: /etc/bashrc

个人配置: ~/.bashrc

功用:1.设定本地变量

2.定义本地别名

登录类型:

交互式:直接通过终端输入账号和密码登陆

使用su -l username 或 su - username

非交互式:su username

图形界面下打开的终端

交互登录用户:

/etc /profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登陆用户:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

4、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;

特殊权限:suid

展示于文件属主的执行权限位

如果属主本来有执行权限,显示为s,否则为S;

功能:对一个可执行文件来讲,任何用户运行此程序为进程时,进程的属主不在是发起者本人,而是可执行程序文件自己的属主。

管理文件suid权限的方法:

Chmod u+|-s FILE

特殊权限:sgid

展示文件属组的执行权限为;

如果属主本来有执行权限,则展示为s,否则为S;

功能:当目录的属组有写权限,且有sgid权限时,那么所有属于次此目录的属组,且以属组身份在此目录文件或目录时,新文件或目录的属组不是创建者所属的基本组,而是目录自己的属组;

Chmod g+|-s

特殊权限:stick

展示于目录其他用户的执行权限位

如果其他用户本来有执行权限,则展示为t,否则,展示位T

功能:对于全局可写,或某组全局可写目录,所有用户都于此目录创建文件或删除自己为属主的那些文件,但不能删除非自己为属主文件或目录:

Chmod o+|-t

5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;

磁盘设备文件:

IDE接口:并行,133MB/s /dev/hda,/dev/hdb

Scsi接口:并行,320MB/s

SATA接口:串行,6Gpbs

Usb接口:串行,480MB/s

SAS接口:串行

设备文件:/dev/sd[a-z][#]

链接文件:访问同一个文件数据,不同路径

硬链接:两个文件路径指向了同一个inode。

创建方法:cp -l SRC DEST

ln SRC DEST

特性: 1)目录不支持硬链接;

2)链接不能跨文件系统;

3)硬链接文件与源文件是指向同一个inode,创建硬链接文件只会增加

inode计数;删除硬链接只会减少一次;

符号连接:链接文件是一个完全独立的新文件,但其指向了原文件的访问路径;

创建方法:ln -s SRC DEST

特性:(1)符号链接文件与原文件是两个各自独立的文件;

(2)目录可以创建符号链接;

(3)可以跨文件系统;

(4)删除链接不影响原文件,但删除原文件,符号链接指向的路径不存在,因此,此时链接文件变成错误链接;其大小不是真正原文件大小,而是指向的原文件的文件路径字符串所包含的字节数;

磁盘设备:

MBR:用来存放当前分区表 。(主引导扇区)

446bytes:bootloader

64bytes:分区表

16bytes:标记一个分区:4个主分区:3主分区,1个扩展分区

2bytes:55AA,当前MBR信息是否有效的标记

VFS:virtual file system

Linux文件系统:ext2,ext3,ext4,xfs,btrfs

日志文件系统:加速文件检测并修复过程

光盘文件系统:iso9660

网络文件系统:nfs,cifs

集群文件系统:gfs2,ocfs2

分布式文件系统:ceph

Windows文件系统:ntfs,vfat

伪文件系统:tmpfs

Swap:虚拟文件系统

创建文件系统:

文件系统:

元数据:每个索引项称一个inode

根在内核中,其需要被关联制根文件系统,即rootfs

创建分区:

fdisk命令:查看已经识别的磁盘设备

P:显示当前分区表

N:创建一个分区

W:保存退出

L:查看支持的分区ID:

D:删除现有分区

T:修改分区ID

Q:不保存退出

M:显示帮助信息

分区流程:fdisk /dev/sd* ---> n新建 ---> (e扩展)|(p主分区) --->柱面或者分区大小 --->P 查看是否成功 ---> cat /proc/partitions 查看内核是否识别 --->如果未识别让内核强制读取分区表(partx -a /dev/sd*)

文件系统管理工具:

创建文件系统:

mkfs.ext2 mkfs.ext3 mkfs.ext4,mkfs.xfs

检测文件系统:

fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs

查看其属性:

dumpe2fs,tune2fs

创建文件系统:

mkfs.FSTYPE /dev/DEVICE

blkid /dev/DEVICE

ext系列:

mke2fs

mke2fs:mke2fs[OPTION].../dev/DEVICE

-t :[ext2|ext3|ext4]:要创建的文件系统类型;

-b :[1024|2048|4096]:上限由page fram决定;

-L: label:卷标;

-j: 相当于 -t ext3 将文件系统格式化为日志文件系统;

mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3

-i#:指定inode与字节的比率;没多少个字节给创建一个inode;

-N#:直接知名给此文件系统创建多少个inode;

-m#:指定预留空间的百分比,默认为5;

-O :指明额外选项

UUID:全局唯一标识符

e2label /dev/DEVICE:修改卷标

tune2fs:查看或者修改ext系列文件系统某些属性

tune2fs -l /dev/DEVICE

修改指定文件属性:

-L:修改卷标

-m#:调整预留空间百分比

-O[^]FEATURE:开启或关闭某种特性

-o[^]mount_options:开启或关闭某种属性

-o acl

-o ^acl

dumpefs:显示ext系列文件系统属性信息

dumpe2fs [-h] /dev/DEVICE

文件系统检测:

因进程意外终止或系统崩溃等原因导致写入操作非正常终止时,可能会导致文件损坏,此时应该修复系统。

fsck:

-t:fsck -t ext4 /dev/sdb1

-a:自动修复所有错误

-r:交互式修复错误

ext系列文件系统的专用工具

e2fsck:

-y:对所有问题自动修复yes;

-f:强制检测

Windows无法识别linux上专用的文件系统,因此,有存储设备需要两种系统之间交叉使用,应该使用Windows文件系统。

swap文件系统:

Linux上 创建交换分区必须使用独立的磁盘分区

fdisk /dev/DEVICE

t命令调整id:82

创建交换分区系统:mkswap

mkswap[-L] /dev/DEVICE

文件系统挂载:

Linux系统上,所有文件系统必须通过根文件系统的某个分区来访问;

其余所有的其他文件系统如果想要被访问,都只能通过关联至根文件系统上的某个目录来实现;

mount:mount DEVICE MOUNT_POINT

mount[option]...[-t fstype][-o option] device mount_point

-r:只读挂载

-w:读写挂载

-t:fstype 被挂载的设备上的文件系统类型:可省略 此时mount会自动使用blkid来判断

-L:以卷标的方式指定要挂载的设备,因此,DEVICE可省

-U:以UUID的方式指定要挂载的设备,因此,DEVICE可省

-n:默认情况下,设备挂载与否的改变结果会被保存于/etc/mtab中,-n选项用于变动时不更新此文件。

-o:option 挂载选项

async:异步写入

sync:同步写入

atmin/noatime:文件或目录在被访问时是更新访问时间戳

diratime/nodiratime:文件或目录在被访问时是更新访问时间戳

auto/noauto:设备是否支持mount-a选相时是否自动挂载

dev/nodev:此设备上是否创建设备文件

exec/noexec:是否允许执行此文件系统上的程序文件

suid/nosuid:是否支持此设备上的文件使用suid权限

remount:重新挂载

acl:mount -o or tune2fs -o acl /dev/device

ro:只读

rw:读写

user/nouser:是否允许普通挂载此文件系统

defaults

mount -a 自动读取fstab中每一个支持自动挂载的文件系统并把其挂载至每一个挂载目录下。

另外一个技巧:

将某目录绑定到指定目录下,作为临时访问入口

mount --bind 源目录 目标目录

查看所有已经挂载设备的方法:

#mount

#cat /etc/mtab

#cat /proc/mounts

挂载点

1.事先存在

2.使用别的进程未使用的目录

umont MOUNT_POINT

某进程访问的设备不能卸载,查看方法:

lsof 挂载目录

fuser -v:挂载目录

-k: fuser -km 挂载目录:强制杀掉访问挂载目录的进程

df:用来检查linux服务器的文件系统的磁盘空间占用情况

[OPTINE]...[FILE]

-l:仅显示本地文件系统的相关系统

-h:单位换算

-i:显示indoe的使用情况

du:用于评估文件大小

-s:统计整个目录以及内部所有文件总体大小

-h:单位换算

du -sh/*

free:查看内存使用状况

-m

-g

交换分区:创建交换分区:mkswap

swapon -a 启用/etc/fstab文件中定义的所有交换分区

启用:swapon /dev/sd*

禁用:swapoff /dev/sd*

文件系统相关配置文件:/etc/fstab

定义开机自动挂载的文件系统;

第一列:挂载设备:设备文件,卷标,uuid,伪文件系统

第二列:挂载点:swap挂载点仍为swap

第三列:文件系统类型

第四列:挂在选项:defaults表示默认挂载选项,多个挂载选项用,分割。比如defaults,acl,noatime

第五列:转储频率:0:从不备份,1:每天备份,2:每隔一天备份

第六列:自检次序:0:不自检,1:首先自检,只有根文件系统可首先自检,2:次级自检。

6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;

%s/^[[:space:]]\+//g

7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

%s/^[[:space:]]/#&/g

8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

%[email protected]/etc/sysconfig/[email protected]/var/log/g

%s/\/etc\/sysconfig\/init/\/var\/log/g

9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;

%s/^#[[:space:]]\+//g

10、查找/var目录属主为root,且属组为mail的所有文件;

find /var -user root -a -group mail -ls

11、查找/usr目录下不属于root、bin或hadoop的所有文件;

find /usr -not -user root -a -not -user bin -a -not -user hadoop

Find /usr -not \( -user root -o -user bin -o -user hadoop \)

12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;

find  /etc -not  \( -user root -o -user hadoop \)  -a -mtime  -7

13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;

find / -not \( -nouser -a -nogroup \) -a -atime -7

14、查找/etc目录下大于20k且类型为普通谁的的所有文件;

find /etc -size +20k -a type f

15、查找/etc目录下所有用户都没有写权限的文件;

find /etc -not -perm +222

16、查找/etc目录下至少有一类用户没有执行权限的文件;

find /etc -not -perm -111

17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;

find /etc/init.d -perm -113

18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;

(1)当前用户为hzm查看/etc/shadow文件没有权限,无法访问。

(2)切换到root账户下将cat程序给予s权限;

chmod u+s /bin/cat

(3)在切换回hzm账户来访问/etc/shadow文件就不受限制了;

19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;

(1)新建hzm和gley两个用户,附加组都为testgroup,并且创建/test/data目录也加入到testgroup组中;

useradd -a -G testgroup hzm

useradd -a -G testgroup gley

mkdir /test/data

chown :testgroup /test/data

(2)登陆hzm用户,在/test/data目录下创建一个hzm.txt文件,登陆gley用户,在/test/data目录下创建一个gley.test文件

hzm:touch hzm.txt /test/data

gley:touch gley.txt /test/data

(3)然后给于该目录gid权限后,在切换两个用户各自创建.word文件,这样就能看到.word创建的文件所属组都是testgroup组。

chmod g+s /test/data

hzm:touch hzm.word /test/data

gley:touch gley.word /test/data

(4)然后在给与改目录sticky权限,这样用户只能删除自己创建的所属文件;

chmod o+t /test/data

时间: 2024-10-13 03:06:06

20150830 课后练习的相关文章

20150830 课后练习 待完善

一.作业(练习)内容: 1.总结文本编辑工具vim的使用方法: Vim (1).命令解释:模式化的编辑器 (2). 有多种不同的模式: 编辑模式:命令模式 输入模式:插入模式 末行模式:vim有许多内置命令,此模式作为命令的接口 编辑模式=====输入模式: i:在当前光标所在处,转换为输入模式 I:在当前光标行行首,转换为输入模式 a:在当前光标所在处的后方,转换为输入模式 A:在当前光标所在行的行尾转换为输入模式 o:在当前光标所在行的下方新建一个空白行,并转换为输入模式 O:在当前光标所在

问题 1018: C语言程序设计教程(第三版)课后习题6.8

/******************************************************************** @file Main.cpp @date 2017-05-12 @author Zoro_Tiger @brief 问题 1018: C语言程序设计教程(第三版)课后习题6.8 http://www.dotcpp.com/oj/problem1018.html *************************************************

问题 1041: C语言程序设计教程(第三版)课后习题9.8

/******************************************************************** @file Main.cpp @date 2017-05-28 22:02:55 @author Zoro_Tiger @brief 问题 1041: C语言程序设计教程(第三版)课后习题9.8 http://www.dotcpp.com/oj/problem1041.html ****************************************

问题 1040: C语言程序设计教程(第三版)课后习题9.6

/******************************************************************** @file Main.cpp @date 2017-05-28 21:57:02 @author Zoro_Tiger @brief 问题 1040: C语言程序设计教程(第三版)课后习题9.6 http://www.dotcpp.com/oj/problem1040.html ****************************************

问题 1042: C语言程序设计教程(第三版)课后习题9.10

/******************************************************************** @file Main.cpp @date 2017-05-28 22:10:10 @author Zoro_Tiger @brief 问题 1042: C语言程序设计教程(第三版)课后习题9.10 http://www.dotcpp.com/oj/problem1042.html ***************************************

问题 1023: C语言程序设计教程(第三版)课后习题7.2

/******************************************************************** @file Main.cpp @date 2017-05-20 22:05:39 @author Zoro_Tiger @brief 问题 1023: C语言程序设计教程(第三版)课后习题7.2 http://www.dotcpp.com/oj/problem1023.html ****************************************

问题 1008: C语言程序设计教程(第三版)课后习题5.6

/******************************************************************** @file Main.cpp @date 2017-5-8 @author Zoro_Tiger @brief 问题 1008: C语言程序设计教程(第三版)课后习题5.6 http://www.dotcpp.com/oj/problem1008.html ***************************************************

问题 1006: C语言程序设计教程(第三版)课后习题5.4

/******************************************************************** @file Main.cpp @date 2017-05-07 @author Zoro_Tiger @brief 问题 1006: C语言程序设计教程(第三版)课后习题5.4 http://www.dotcpp.com/oj/problem1006.html *************************************************

课后作业

课后作业 "类型转换"知识点考核-2 程序源代码: 1 class Mammal{} 2 class Dog extends Mammal {} 3 class Cat extends Mammal{} 4   5 public class TestCast 6 { 7      public static void main(String args[]) 8      { 9             Mammal m; 10             Dog d=new Dog();