一、实验目的
为后续上机实验做准备,熟悉常用的Linux操作。
二、实验平台
操作系统:Ubuntu14.04
三、实验内容和要求
1、Linux系统中的常用快捷键
Tab 自动补全
上下箭头 显示历史命令
Ctrl+a 光标移动到开始位置
Ctrl+c 终止进程/命令
Ctrl+e 光标移动到最末尾
Ctrl+k 删除此处至末尾的所有内容
Ctrl+u 删除此处至开始的所有内容
Ctrl+d 删除当前字符
Ctrl+h 删除当前字符前一个字符
Ctrl+w 删除此处到左边的单词
Ctrl+y 粘贴由Ctrl+u, Ctrl+d, Ctrl+w删除的单词
Ctrl+l 相当于clear,即清屏
Ctrl+b 向回移动光标
Ctrl+f 向前移动光标
Ctrl+t 将光标位置的字符和前一个字符进行位置交换
Ctrl+& 恢复 ctrl+h 或者 ctrl+d 或者 ctrl+w 删除的内容
Ctrl+S 暂停屏幕输出
Ctrl+Q 继续屏幕输出
Ctrl+p 向上显示缓存命令
Ctrl+n 向下显示缓存命令
Shift+Ctrl+C 复制
Shift+Ctrl+V 粘贴
2、cd命令:切换目录
(1)切换到指定目录
# 切换到目录/usr/local,注意/usr/local是绝对路径,绝对路径是以“/”开头的
cd /usr/local
# 你当然也可以使用相对路径,但是要确保先进入上一级目录,才可以正确的切换到该目录下的某个路径,也就是相对当前路径下的路径,相对路径和绝对路径的区别是什么?思考一下。
cd /usr
cd local
(2)切换到当前目录的上层目录
cd /home/hadoop
cd ..
(3)从当前目录向上级返回两层
cd /home/hadoop
cd ../../
(4)切换到当前目录的上一个目录,不同于上层目录哦,体会一下
cd /usr/local
cd /home
cd -
(5)从任何目录返回到当前用户的home目录
cd ~
ls
(6)切换到整个文件系统的根目录
用ls命令显示当前目录下的内容,对比一下当前用户的home目录和系统根目录有什么不同?
cd /
ls
3、ls命令:查看文件与目录
命令格式:ls [选项] [文件名]
主要选项参数如下:
- -a:全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
- -A:全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
- -d:仅列出目录本身,而不是列出目录内的文件数据(常用)
- -f:直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
- -F:根据文件、目录等信息,给予附加数据结构,例如: *:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
- -h:将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
- -i:列出 inode 号码;
- -l:长数据串行出,包含文件的属性与权限等等数据;(常用)
- -r:将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
- -R:连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
- -S:以文件大小大小排序,而不是用文件名排序;
- -t:依时间排序,而不是用文件名。
我们主要练习以下几个常用的ls命令,你也可以自己使用上述参数进行练习。
(7)不跟任何选项与目录,表示列举当前目录的文件信息
cd /usr/local/hadoop
ls
(8)使用长格式列举文件和目录信息
ls -l # 注意是字母L的小写
(9)列出所有文件,包括隐藏文件,在linux下,用’.’开头的表示隐藏文件:
ls -a
ls -A # 跟ls -a结果差不多,只不过-A不包括 . 和 ..
ls -al # 多个选项也可以组合
(10)ls -F 如果是目录,会加上反斜线
ls -alF
(11)ls -d 列举目录本身信息,而不是查看目录下的文件信息
ls -ld
4、mkdir命令:新建新目录
命令格式:mkdir [选项] [目录]
主要选项参数如下:
- -m:—mode=模式,设定权限<模式>
- -p:—parents 递归创建目录
- -v:—verbose 每次创建新目录都显示信息
常用的mkdir命令:
(12)进入/tmp目录,创建一个名为a的目录,并查看有多少目录存在
cd /tmp
mkdir a
ls -al
(13)创建目录a1/a2/a3/a4
mkdir -p a1/a2/a3/a4
# 使用ls命令可以查看到新建的a1目录,那如何查看a2、a3、a4目录呢?自己思考一下
ls -al
(14)创建目录mydir并显示信息
mkdir -v mydir
(15)创建权限为777的目录,也可以是其他权限,详见下面的小贴士
mkdir -m 777 abc
# 执行ls -al命令时,可以看到每个目录或文件前,都有一串类似“rwxrwxrwx”或者“rwxrw-r-x”的字符,那么这串字符是什么意思呢?详见下面的小贴士。
ls -al
转存失败重新上传取消 小贴士:关于Linux系统的777权限
Linux/Unix 的文件存取权限分为三级 : 文件拥有者(Owner)、群组(Group)、其他(Other)。通常用一个九位的字符串来依次表示Owner、Group和Other的文件操作权限,如rwxrwxrwx。从左至右,1-3位字符代表文件所有者的权限,4-6位字符代表同组用户的权限,7-9字符代表其他用户的权限。而具体的权限是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示。通过4、2、1的组合,得到以下几种权限:0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)。
以755为例:
(1)1-3位7等于4+2+1,rwx,所有者(Owner)具有读取、写入、执行权限;
(2)4-6位5等于4+1+0,r-x,同组用户(group)具有读取、执行权限但没有写入权限;
(3)7-9位5,同上,也是r-x,其他用户(Other)具有读取、执行权限但没有写入权限。
5、rmdir命令:删除空的目录
命令格式:rmdir [选项] [目录]
主要选项参数如下:
- -p:递归删除目录dirname, 当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
- -v:—verbose 显示指令执行过程
常用的rmdir命令:
(16)将上例创建的目录a(/tmp下面)删除
rmdir a
(17)删除目录a1/a2/a3/a4,查看有多少目录存在
rmdir -p a1/a2/a3/a4
ls -al
6、cp命令:复制文件或目录
命令格式:cp [选项] 源文件或目录 目标文件或目录
主要选项参数如下:
- -a :该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
- -d :拷贝时保留链接。
- -f :删除已经存在的目标文件而不提示。
- -i :和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
- -p :此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
- -r :若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
- -l :不作拷贝,只是链接文件。
常用的cp命令:
(18)将主文件夹下的.bashrc复制到/usr下,命名为bashrc1
cp ~/.bashrc /usr/bashrc1
cd /usr
ls -al
(19)在/tmp下新建目录test,再复制这个目录内容到/usr
cd /tmp
mkdir test
cp -r /tmp/test /usr
7、mv命令:移动文件与目录,或更名
命令格式:mv [选项] 源文件或目录 目标文件或目录
主要选项参数如下:
- -b :若需覆盖文件,则覆盖前先行备份。
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会更新(update)
常用的mv命令:
(20)将上例文件bashrc1移动到目录/usr/test
mv /usr/bashrc1 /usr/test
(21)将上例test目录重命名为test2
mv /usr/test /usr/test2
8、rm命令:移除文件或目录
命令格式:rm [选项] 文件或目录
主要选项参数如下:
- -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
- -f:强制删除文件或目录;
- -i:删除已有文件或目录之前先询问用户;
- -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理
常用的rm命令:
(22)将上例复制的bashrc1文件删除
rm /usr/test2/bashrc1
(23)将上例的test2目录删除
rm -r /usr/test2
9、cat命令:查看文件内容
命令格式:cat [选项] 文件名
主要选项参数如下:
- -n :由 1 开始对所有输出的行数编号
- -b :-n 相似,只不过对于空白行不编号
- -s :当遇到有连续两行以上的空白行,就代换为一行的空白行
常用的cat命令:
(24)查看主文件夹下的.bashrc文件内容
cat ~/.bashrc
cat -n ~/.bashrc
10、tac命令:反向列示文件内容
命令格式:tac [选项] 文件名
(25)反向查看主文件夹下.bashrc文件内容
# tac实际上是cat反过来写对吗?看看运行结果是什么样的吧
tac ~/.bashrc
11、more命令:一页一页翻动查看,只能向后翻页
命令格式:more 文件名
(26)翻页查看主文件夹下.bashrc文件内容
# 使用空格或回车键翻页
more ~/.bashrc
# more还可以配合管道符“|”(pipe)使用
ls -al | more
12、less命令:一页一页翻动查看,可以前后翻页
命令格式:less 文件名
(27)翻页查看主文件夹下.bashrc文件内容
# 可以使用【pageup】和【pagedown】键进行前翻页和后翻页
less ~/.bashrc
# less还有一个功能,可以在文件中进行搜索你想找的内容,假设你想在passwd文件中查找有没有config字符串,那么你可以在打开文件内容之后,输入以下命令
/weblogic
# 退出查看文件状态,按字母“Q”键即可
13、head命令:取出前面几行
命令格式:head -n number 文件名
(28)查看主文件夹下.bashrc文件内容前20行
head -n 20 ~/.bashrc
(29)查看主文件夹下.bashrc文件内容,后面50行不显示,只显示前面几行
# 如果在number前面加减号,则不显示文件最后相应的行数
head -n -50 ~/.bashrc
14、tail命令:取出后面几行
命令格式:tail -n number 文件名
(30)查看主文件夹下.bashrc文件内容最后20行
tail -n 20 ~/.bashrc
(31) 查看主文件夹下.bashrc文件内容,只列出50行以后的数据
# 如果在number前面加加号,则不显示文件最前面相应的行数
tail -n +50 ~/.bashrc
15、touch命令:修改文件时间或创建新文件
命令格式:touch 【选项】 文件名
主要选项参数如下:
- -a: 只更改访问时间
- -d: 使用指定字符串表示时间而非当前时间
- -m : 只更改修改时间
- -t STAMP: 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间而非当前时间
常用的touch命令:
(32)在/tmp下创建一个空文件hello并查看时间
cd /tmp
touch hello
ls -l hello
(33)修改hello文件,将日期调整为5天前
touch -d "5 days ago" hello
16、chown命令:修改文件所有者权限
命令格式:chown 【选项】 user[:group] 文件名
主要选项参数如下:
- -c : 若该文件拥有者确实已经更改,才显示其更改动作
- -f : 若该文件拥有者无法被更改也不要显示错误讯息
- -h : 只对于连结(link)进行变更,而非该 link 真正指向的文件
- -v : 显示拥有者变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
常用的chown命令:
(34)将hello文件所有者改为root帐号,并查看属性
chown root /tmp/hello
ls -l /tmp/hello
17、find命令:文件查找
命令格式:find 目录 【选项】
主要选项参数如下:
- -name 按照文件名查找文件
- -perm 按照文件权限来查找文件
- -user 按照文件属主来查找文件
- -group 按照文件所属的组来查找文件
常用的find命令:
(35)找出主文件夹下文件名为.bashrc的文件
# 运行结果会返回文件所在目录以及文件名
find ~ -name .bashrc
18、tar命令:压缩命令
命令格式:tar [主选项+辅选项] 文件或目录
主要选项参数如下:
主选项参数:
- -c 创建新的文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。
- -r 把要存档的文件追加到文件的未尾。例如用户已经做好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。
- -t 列出文件的内容,查看已经备份了哪些文件。
- -u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。
- -x 从文件中释放文件,也就是解压缩。
辅选项参数:
- -b 该选项是为磁带机设定的,其后跟一数字,用来说明区块的大小,系统预设值为20(20×512 bytes)。
- -f 指定档案文件名或设备名,这个选项通常是必选的。
- -k 保存已经存在的文件。例如把某个文件还原,在还原的过程中遇到相同的文件,不会进行覆盖。
- -m 在还原文件时,把所有文件的修改时间设定为现在。
- -M 创建多卷的档案文件,以便在几个磁盘中存放。
- -v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
- -w 每一步都要求确认。
- -z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
常用的tar命令:
(36)在/目录下新建文件夹test,然后在“/”目录下打包成test.tar.gz
mkdir /test #在/目录下新建文件夹test
cd / # 进入“/”目录
tar -zcv -f /test.tar.gz test #打包test子目录
(37)解压缩到/tmp目录
tar -zxv -f /test.tar.gz -C /tmp
cd /tmp
ls -al
19、grep命令:查找字符串
命令格式:grep [选项]
主要选项参数如下:
- -a :将 binary 文件以 text 文件的方式搜寻数据
- -c :计算找到 ‘搜寻字符串’ 的次数
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
常用的grep命令:
(38)从~/.bashrc文件中查找字符串’examples’
grep -n 'examples' ~/.bashrc
20、vi/vim命令:Linux文件编辑器
vi/vim编辑器是所有Unix及Linux系统下标准的编辑器,vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode):
- 1) 命令行模式command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。 - 2) 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。 - 3) 底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
vi的基本操作:
(39)进入vi
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
vi myfile
进入vi之后,是处于「命令行模式(command mode)」,需要切换到「插入模式(Insert mode)」才能够输入文字。
(40)切换至插入模式(Insert mode)编辑文件
在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。
(41)切换到命令行模式
你目前处于「插入模式(Insert mode)」,可以对文件进行插入、删除、修改等操作,如果此时你想保存退出,首先需要切换到命令行方式,就要先按一下「ESC」键转到「命令行模式(command mode)」。
(42)退出vi及保存文件
在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
:w filename
输入 「w filename」将文件以指定的文件名filename保存):wq
(输入「wq」,存盘并退出vi):q!
(输入q!, 不存盘强制退出vi)
21、用户及权限相关命令
(43)useradd命令:新建用户
命令格式:useradd [选项] 用户名
主要选项参数如下:
- -d<登入目录> 指定用户登入时的目录。
- -g<群组> 初始群组。
- -G<群组> 非初始群组。
- -m 自动创建用户的家目录(Home目录)。
- -M 不要创建用户的家目录(Home目录)。
- -N 不要创建以用户名称为名的群组。
- -s 指定用户登入后所使用的shell。
常用的grep命令:
# 不使用任何群组相关的参数,默认在创建用户 tester1 的同时会创建一个同名的群组。用户 tester1 的初始群组就是这个新建的群组
sudo useradd tester1
# -N参数表示不生成与用户同名的群组。查看下 /etc/passwd 文件,发现 tester2 用户的初始群组ID是100。这个100是哪来的?有ID为100的群组吗?其实100作为 -N 的默认值是写在配置文件中的。不管有没有ID为100的群组,都是这个值。
sudo useradd tester2 -N
# -g参数将用户创建在一个初始群组sudo。现在去查看一下 /etc/passwd 和 /etc/group 文件,可以看到用户 tester3 的初始群组变成了sudo。sudo是什么群组?别着急,下面会讲到。
sudo useradd tester3 -g sudo
(44)password命令:设置密码
好,新建了用户之后,我们需要为其设置密码:
命令格式:passwd [选项] 用户名
主要选项参数如下:
- -d 删除密码
- -f 强制执行
- -k 更新只能发送在过期之后
- -l 停止账号使用
- -S 显示密码信息
- -u 启用已被停止的账户
- -x 设置密码的有效期
- -g 修改群组密码
- -i 过期后停止用户账号
passwd tester1 # 根据提示需输入两次密码
passwd -S tester1 #显示用户密码
passwd -d tester1 #删除用户密码
(45)su命令:切换用户
我们也可以根据需要选择切换用户,命令很简单:
su tester1
su tester2
(46)sudo命令
从root用户切换到普通用户之后(而且这个用户普通到没有在sudo组里),假如我们需要执行一些root用户才可以执行的命令怎么办?来回切换用户似乎太麻烦了。这时候,sudo命令可以帮你解决这个问题。
简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。
严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。默认的安全策略记录在 /etc/sudoers 文件中。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。
系统默认创建了一个名为 sudo 的组。只要把用户加入这个组,用户就具有了 sudo 的权限。当然,必须有具有sudo权限的用户来执行这个操作,比如root用户,所执行的命令为adduser username sudo
。
# 将hadoop用户增加到sudo组,使其具有某些命令的管理员权限
adduser tester1 sudo