大数据技术和应用
上QQ阅读APP看书,第一时间看更新

2.1 Linux基础介绍

2.1.1 用户和用户组管理

1.用户管理

在Linux系统中,用户是分角色的。角色不同,权限和所完成的任务也不同。值得注意的是,用户是通过UID来识别的,用户的UID是全局唯一的。Linux系统中的用户可分为3类,具体如图2-1所示。

图2-1 Linux系统中用户的三类角色

(1)添加用户

若向Linux系统中添加一个用户,则使用useradd命令。

语法:

useradd 选项 用户名

参数说明:

选项:

· -c:comment,指定一段注释性描述。

· -d:目录,指定用户主目录,若此目录不存在,则同时使用-m选项,可以创建主目录。

· -g:用户组,指定用户所属的用户组。

· -G:用户组,指定用户所属的附加组。

· -s:Shell文件,指定用户登录Shell。

· -u:用户号,指定用户的用户号,若同时有-o选项,则可以重复使用其他用户的标识号。

用户名:指定新账号的登录名。

示例:

# useradd –d /usr/dataxiong-m dataxiong

此命令创建了一个用户dataxiong,其中-d和-m选项用来为登录名dataxiong产生一个主目录/usr/dataxiong(/usr为默认的用户主目录所在的父目录)。

# useradd -s /bin/sh -g group –G adm,root xiong

此命令新建了一个用户xiong,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

(2)删除用户

若一个用户的账号不再使用,则可以将该用户账号从Linux系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还需删除用户的主目录。要删除一个已有的用户账号,使用userdel命令。

语法:

userdel 选项 用户名

参数说明:

选项:常用的选项是-r,其作用是把用户的主目录一起删除。

用户名:指定删除用户的登录名。

示例:

# userdel -r dataxiong

此命令删除用户dataxiong在系统文件中(主要是/etc/passwd、/etc/shadow、/etc/group等)的记录,同时删除用户的主目录。

(3)修改用户

修改用户的账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。要修改已有用户的信息,使用usermod命令。

语法:

usermod 选项 用户名

参数说明:

选项:常用的选项包括-c、-d、-m、-g、-G、-s、-u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。此外,有些系统可以使用选项:-l新用户名,这个选项指定一个新的账号,即将原来的用户名改为新的用户名。

用户名:指定修改用户的登录名。

示例:

# usermod -s /bin/ksh -d /home/z –g developer dataxiong

此命令将用户dataxiong的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。

(4)用户口令管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时无口令,但是被系统锁定无法使用,必须为其指定口令后才可使用,即使是指定空口令。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。

语法:

passwd 选项 用户名

参数说明:

选项:

· -l:锁定口令,即禁用账号。

· -u:口令解锁。

· -d:使账号无口令。

· -f:强迫用户下次登录时修改口令。

用户名:指定口令的用户登录名。

若默认用户名,则修改当前用户的口令。

示例:

假设当前用户是dataxiong,则下面的命令修改该用户自己的口令:

$ passwd

如果是超级用户,可以用下列形式指定任何用户的口令:

# passwd dataxiong
2.用户组管理

每个用户都有一个用户组,Linux系统可以对一个用户组中的所有用户进行集中管理。不同的Linux系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理,涉及用户组的添加、删除和修改。用户组的增加、删除和修改实际上就是对/etc/group文件的更新。

(1)添加用户组

若向Linux系统中添加一个用户组,则使用groupadd命令。

语法:

groupadd 选项 用户组

参数说明:

选项:

· -g:GID,指定新用户组的组标识号(GID)。

· -o:一般与-g选项同时使用,表示新用户组的GID可与系统已有用户组的GID相同。

用户组:指定新用户组。

示例:

# groupadd group1

此命令向Linux系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

# groupadd -g 101 group2

此命令向Linux系统中增加了一个新组group2,同时指定新组的组标识号是101。

(2)删除用户组

若要删除一个已有的用户组,则使用groupdel命令。

语法:

groupdel用户组

参数说明:

用户组:指定删除的用户组的组名。

注意

若该用户组中包含某些用户,则必须先删除这些用户之后,才可以删除该用户组。通过tail命令可以查看需要删除的用户组是否能找到,若找不到就表明已删除。

示例:

# groupdel group1

此命令从Linux系统中删除组group1。

# tail –l /etc/group

此命令用于查看文件/etc/group中group1是否被删除。

(3)修改用户组

修改用户组的属性使用groupmod命令。

语法:

groupmod 选项 用户组

参数说明:

选项:

· -g:GID,为用户组指定新的组标识号。

· -o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。

· -n:新用户组,将用户组的组名改为新组名。

用户组:指定修改用户组的组名。

示例:

# groupmod -g 102 group2

此命令将用户组group2的组标识号修改为102。

# groupmod –g 10000 -n group3 group2

此命令将用户组group2的标识号改为10000,组名修改为group3。

(4)用户组间切换

若一个用户同时属于多个用户组,则该用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。

语法:

$ newgrp root

说明

这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

2.1.2 文件和目录操作

1.文件操作

几个常见的处理文件的命令:

· ls:列出文件。

· cp:复制文件。

· mv:移动文件。

· rm:删除文件。

可以使用man [命令]来查看各个命令的使用手册。

示例:

# man cp

(1)列出文件

Linux系统当中,ls命令可能是最常被执行的命令,主要用于列出文件。

语法:

ls 选项 目录名称

选项说明:

· -a :全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)。

· -d :仅列出目录本身,而不是列出目录内的文件数据(常用)。

· -l :以长数据串方式列出,包含文件的属性、权限等数据(常用)。

示例:

[root@dataxiong ~]# ls –al ~

将目录下的所有文件列出来(含属性文件和隐藏文件)。

(2)复制文件

Linux系统当中,cp命令用于复制文件。

语法:

cp 选项 来源文件(source)、目标文件(destination)

cp 选项 source1 source2 source3 ... Directory

选项说明:

· -a:相当于-pdr的意思,至于pdr请参考下列说明(常用)。

· -d:若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身。

· -f:为强制(force)的意思,表示强行复制文件或目录,不论目标文件或目录是否已经存在。

· -i:若目标文件(destination)已经存在时,在覆盖时会先询问覆盖操作是否继续(常用)。

· -l:创建硬链接(hard link)的链接文件,而非复制文件本身。

· -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)。

· -r:以递归方式持续复制,用于目录的复制操作(常用)。

· -s:复制成为符号链接文件(symbolic link),即软链接文件。

· -u:只有来源文件比目标文件版本新时,才复制文件。

示例:

[root@dataxiong ~]# cp~/.bashrc /tmp/bashrc

用root身份,将root目录下的.bashrc复制到/tmp下,并命名为bashrc。

(3)移动文件

Linux系统当中,mv命令用于移动文件,或者修改名称。

语法:

mv 选项 来源文件(source)、目标文件(destination)

mv 选项 source1 source2 source3 ... Directory

选项说明:

· -f:强制(force)的意思,如果目标文件已经存在,不会询问而直接执行覆盖操作。

· -i:若目标文件(destination)已经存在时,就会询问是否执行覆盖操作。

· -u:若目标文件已经存在,且来源文件比较新,才会执行更新(update)操作。

示例:

[root@dataxiong ~]# cd /tmp
[root@dataxiong tmp]# cp ~/.bashrc bashrc
[root@dataxiong tmp]# mkdir mvtest
[root@dataxiong tmp]# mv bashrc mvtest
[root@dataxiong tmp]# mv mvtest mvtest2

以上操作是将某个文件移动到某个目录去。最后一行表示将刚刚创建的目录名称mvtest更名为mvtest2。

(4)删除文件

Linux系统当中,rm命令用于删除文件。

语法:

rm 选项 文件

选项说明:

· -f:就是force的意思,忽略不存在的文件,不会出现警告信息。

· -i:互动模式,在删除操作前会询问用户是否继续执行此删除操作。

· -r:递归删除!最常用于目录的删除!这是非常危险的选项!!!

示例:

[root@dataxiong tmp]# rm -i bashrc
rm: remove regular file 'bashrc'? y

把刚刚在cp命令的实例中创建的bashrc删除掉。如果加上-i的选项,就会主动询问用户是否继续删除操作,以避免用户误删除。

2.目录操作

几个常见的处理目录的命令:

· mkdir:创建一个新的目录。

· rmdir:删除一个空的目录。

· cd:切换目录。

· pwd:显示当前的目录。

可以使用man [命令]来查看各个命令的使用手册(即帮助文档)。

示例:

# man cd

(1)创建目录

Linux系统当中,mkdir命令用于创建目录。

语法:

mkdir 选项 目录名称

选项说明:

· -m:配置文件的权限。直接配置,不需要看默认权限(umask)。

· -p:帮助你直接将所需要的目录(包含上一级目录)以递归方式创建起来。

示例:

[root@dataxiong ~]# cd /tmp
[root@dataxiong tmp]# mkdir test

创建一个名为test的新目录。

[root@dataxiong tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory 'test1/test2/test3/test4':
No such file or directory

提示无法直接创建此目录。

[root@dataxiong tmp]# mkdir -p test1/test2/test3/test4

请到/tmp目录下尝试创建数个新目录看看,加了这个-p的选项,可以自行帮你创建多层目录。

(2)删除目录

Linux系统当中,rmdir命令用于删除目录。

语法:

rmdir 选项 目录名称

选项说明:

· -p :连同上一级空目录也会一起删除。

示例:

[root@dataxiong tmp]# rmdir test/

删除test目录。

[root@dataxiong tmp]# ls -l

查看有多少目录存在。

[root@dataxiong tmp]# rmdir test

可直接删除,没问题。

[root@dataxiong tmp]# rmdir test1
rmdir: 'test1': Directory not empty

因为目录下尚有内容,所以无法删除。

[root@dataxiong tmp]# rmdir -p test1/test2/test3/test4
[root@dataxiong tmp]# ls -l
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

上面输出中test与test1不见了。

将mkdir实例中创建的目录(/tmp底下)删除掉,利用-p这个选项,立刻就可以将test1/test2/test3/test4一次删除。不过要注意的是,这个rmdir仅能删除空的目录,你可以使用rm命令来删除非空目录。

(3)切换目录

Linux系统当中,cd命令用于删除目录。

语法:

cd [相对路径或绝对路径]

示例:

#使用mkdir命令创建test 目录
[root@dataxiong ~]# mkdir test
#使用绝对路径切换到test 目录
[root@dataxiong ~]# cd /root/test/
#使用相对路径切换到test 目录
[root@dataxiong ~]# cd ./test/
# 表示回到自己的目录,亦即是/root 这个目录
[root@dataxiong test]# cd~
# 表示切换到当前目录的上一级目录,亦即/root上一级目录的意思
[root@dataxiong ~]# cd ...

2.1.3 文本编辑器

1.什么是vim

vim是从vi发展出来的一个文本编辑器。代码补完全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单地说,vi是老式的字处理器,不过功能已经很齐全了,但是还有可以改进的地方。vim则可以说是程序开发者的一项很好用的工具,连vim的官方网站(http://www.vim.org)都说vim是一个程序开发工具,而不是文字处理软件。图2-2所示为vin/vim键盘图。

图2-2 vin/vim键盘图

2.vi/vim的使用

基本上,vi/vim共分为3种工作模式(见图2-3),分别为:

· 命令模式(Command mode)。

· 输入模式(Insert mode)。

· 底线命令模式(Last line mode)。

图2-3 vi/vim工作模式

(1)命令模式

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下为常用的几个命令:

· i,切换到输入模式,以输入字符。

· x,删除当前光标所在处的字符。

· :,切换到底线命令模式,以便在最底一行输入命令。

若想要编辑文本,启动vim,进入子命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍然要依靠底线命令模式输入更多命令。

(2)输入模式

以下所列是输入模式中常用的几个命令,在命令模式下按下i就进入了输入模式。在输入模式中,可以使用以下按键:

· 字符按键以及Shift组合键:输入字符。

· Enter:回车键,换行。

· BACK SPACE:退格键,删除光标前一个字符。

· Delete:删除键,删除光标后一个字符。

· 方向键:在文本中移动光标。

· HOME/END:移动光标到行首/行尾。

· Page Up/Page Down:上/下翻页。

· Insert:切换光标为输入/替换模式,光标将变成竖线/下画线。

· Esc:退出输入模式,切换到命令模式。

(3)底线命令模式

命令模式下按下:(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。在底线命令模式中,基本的命令有(已经省略了冒号):

· q:退出程序。

· w:保存文件。

按ESC键可随时退出底线命令模式。