@R星校长
cd 命令练习:
我们知道 hadoop 这个用户的主文件夹是 /home/hadoop/ ,而 root 用户的主文件夹是 /root/ ,我们使用 root 账号登录,完成以下练习:
cd [绝对路劲或相对路径或特殊符号]
如何从其它目录切换目录到 hadoop 用户的主文件夹:
方式一:绝对路径的方式
方式二:特殊符号
如何回到 root 用户自己的主文件夹?
方式一:绝对路径的方式
cd /root/
方式二:特殊符号方式
cd ~
如何回到刚才访问的目录(不论是哪一个目录)?
cd –
先使用命令 cd /var/spool/mail/ 进入指定目录,然后如何使用相对路径的方式,进入和 mail 同级别的 gdm?
cd …/gdm
pwd 练习
pwd [-P] Print Working Directory
参数:-P 显示出当前的路径,而非使用连接(link)路径
练习:单纯显示当前的工作目录:
练习:显示出时间工作目录,而非连接文件本身的目录名
mkdir(make directory新建目录)
mkdir [-p] 目录名称
参数:-p直接将所需要的目录(包含上层目录)递归创建出来
mkdir [-m 权限值] 目录名称
1 在 /tmp 目录下创建一个名为test的新目录:
#mkdir test
2 请到 /tmp 目录下创建一个新目录:/test1/test2/test3/test4(centos6.5下创建不成功,也没有错误提示)
注意:不建议大家使用 -p 创建多层目录,主要是担心名称写错,导致很多错误目录。
3 在/tmp目录下创建一个权限为 rwx–x--x 的目录 test2
#mkdir –m 711 test2
tmp#ls -l
仔细查看以上权限部分,如果没有使用 -m 强制设置权限,系统会指定一个默认的权限(后续再详细讲解)
rmdir (删除“空”目录)
#rmdir [-p] 目录名称
参数:-p 连同上层“空”的目录一起删除
另外了解 rm –r test (可以将 test 目录整个删除,不管 test 是否为空目录)
文件与目录的查看
cp 复制文件演示
不同用户的某些选项是有区别的:
rm(移除文件或目录)
mv(移动文件与目录,或重命名)
cat 使用范例
范例一:查看 /etc/issue 这个文件的内容:
范例二:承上题,如果还需要打印行号:
打印出行号,对于大文件要找某个特定的行时,有点用处,如果不想要编排空白行的行号,可以使用 “cat –b /etc/issue”
范例三:将 /etc/man.conf 的内容完整的显示出来(包含特殊字符)
[root@localhost ~]#cat –A /etc/man.config
显示内容如下图(注:我们看到的数据仅仅是最后一部分数据,可以通过命令 “more /etc/man.config” 验证)
cat 是 concatenate 的缩写,其功能是将一个文件的内容连续输出。cat 是 Concatenate 的缩写,其功能时间一个文件的内容连续的输出。该命令适合看行数较少的文件。另外,需要查看一般 DOS 文件时,可以通过 -A 选项来显示换行符和[tab]。
使用 cat –A 文件名 显示时文件中的 [tab] 会以 “^I” 表示,而空格依然显示空格。
范例四:演示 cat –A 显示文件内容时,[tab] 和空格的区别。
步骤一:使用命令: “touch testa” 在当前文件夹中新建文件 testa
步骤二:使用命令 “vi testa” 编辑该文件,添加内容:
[tab] hello,tab
(四个空格)world,space
然后保存并退出。
步骤三:使用命令 “cat –A testa” 查看文件内容
补充:Linux 系统中断行符是以 ”$” 表示,所以我们发现每一行的后面都有 $ 符号,而 Windows 系统则不太相同,它的断行符为 ^M$
nl(添加行号打印)范例:
范例一:使用 nl 打印 /etc/issue 的内容
注意:这个文件其实有三行,第三行为空白(没有任何字符),因为他是空白行,所以 nl 不会加上行号,如果确定要加上行号,可以这样做:
行号加上来了,那么如果要让行号前面自动不上 0 呢?可以这样做:
自动在自己字段的地方不上 0 了,默认字段是六位数,如果要改成 3 位数呢?
od 显示非纯文本文件范例(了解)
touch 命令范例
注意系统默认时间不是东八区时间,而是比北京时间晚了 15 个小时
范例一:新建一个文件并观察时间
注意该文件大小为 0 ,在默认状态下,如果 touch 后面跟文件名,则修改该文件的三个时间(atime/ctime/mtime)都会更新为当前时间。若文件不存在,则会创建一个新的空文件(如上)。
范例二:将 ~/.bashrc 复制(完全属性 cp -a )成为 .bashrc ,检查其日期
手动下载 rpm 的网址:
http://www.rpmfind.net/linux/rpm2html/search.php
Linux 2 简单shell命令
命令提示符详解
用户名@主机名 当前目录 #系统权限 $普通权限
命令格式
命令 选项 参数 (三者之间要有空格,区分大小写)
command [-options] [args]
[args]: 参数(多个参数之间用空格分隔)
案例演示
获取命令的帮助
1、使用help查看内建命令的帮助(enable查看内建命令)
2、info 命令
3、!!! 命令 --help
4、!!!#man 命令
5、!!!查手册
6、搜索引擎
help
但是 help 只能查看内建命令,比如我想查看 mv 的帮助信息就不行
那么我们怎么知道哪些是内建命令呢?
enable 也不用背,该方式比较费时间,help 无法使用时,根据提示换其他帮助方式就 ok 了
命令 --help
查手册&搜索引擎
手册见《参考手册&资料》
搜索:必应 www.bing.com
谷歌/百度等
man
当前虚拟机中不能直接使用 man ,默认是没有安装的,不识别 man 命令
所以需要安装,安装 man 和 man-pages 手册,查看命令的帮助信息
q 退出命令查看
看到的全是英文,是不是很酸爽,慢慢多看看就好了。如果你英语烂到完全看不懂,那我再教你一招,汉化 man 提示信息。
要想汉化 man 提示信息,系统中需要安装 man-pages-zh-CN 软件包。默认情况下,系统自带的 yum 源不包含 man-pages-zh-CN 。
默认的源存放目录:
所以下载后的第三方 yum 源 epel 也保存到该目录下,使用yum命令时会去该目录下解析后缀名为 repo 的文件
wget 不能使用,需要先安装,安装 wget ,否则无法通过该命令进行下载
然后将 epel 的源放到本地,然后清除 yum 本地缓存,重新生成缓存
是不是可以使用了呢,相信你已经迫不及待的想要测试一把了
发现还是英文,怎么回事?
这是因为虽然你安装了 man 的中文包,但是系统的语言还是英文环境,
所以需要修改系统的语言环境
然后再次测试便有中文信息了。
但是这样修改这有效到断开连接,或者下次重启系统。如何才能长期有效呢?
man的使用
enter向下一行
空格按页向下翻 b向上翻页
p直接翻到首页
查找按 /要查找的内容,查找 下一个/上一个:按n/N;
退出按q
man
- 1用户命令(/bin,/usr/bin,/usr/local/bin)
- 2系统调用
- 3库函数
- 4特殊文件(设备文件)
- 5文件格式(配置文件的语法)
- 6游戏
- 7杂项(Miscellaneous)
- 8管理命令(/sbin,/usr/sbin,/usr/local/sbin)
指定查看某种帮助:
[root@node1 ~]# man 2 read
[root@node1 ~]# man read
echo
[root@node1 ~]# help echo
echo -n 表示不要另起新行
-e 表示解释逃逸字符
test 命令
计算 3 > 2 的结果,打印返回值,计算 3 < 2 的结果,打印返回值。
echo $? 打印上一行命令的执行结果
成立返回 0(true),不成立返回 1(false)
[] 和内容之间一定要有空格,否则抛错。
环境变量:PATH
当在 shell 中执行命令的时候,默认到 PATH 指定的路径中查找可执行文件。
如果在 PATH 中的多个目录都包含该可执行文件,则执行最先找到的。
如果找不到,这提示命令不识别
type 和 file
type 命令:外部命令和内部命令
type 打印一个字符串的类型,可能的值为:别名,内置命令,函数,关键字,可执行文件或者什么都不输出(不是前面的类型)
操作系统:kernel 内核 + shell 壳
查看 cd 命令的类型:
cd 是一个 builtin 命令,也就是 bash 内置的命令
查看 yum 命令的类型:
yum 是外部命令
file 命令:检查文件的类型
yum 命令是外部命令,它的文件是 python 脚本类型文件
ls 是二进制可执行文件(ELF)
ls
ls 命令用于列出目录内容
添加 -l 以长格式输出,列出根目录下内容的详细列表
也可以后面跟多个目录,列出多个目录的内容
也可以通过命令的别名列出详细列表
pwd
打印当前工作目录路径
cd
cd 用于更改 shell 工作目录,也就是切换目录 change directory cd
如果 cd 后什么都不写,表示直接回当前用户家目录
cd 后跟波浪线,也表示回用户家目录
cd 后也可以跟减号(-)用以表示回到最后一次切换之前的目录,多次使用减号在最近两个目录之间切换
root 用户可以直接通过绝对路径进到普通用户的家目录
也可以直接跟波浪线用户名表示直接进入到某个用户的家目录
ps
可以通过命令查看系统内进程信息
查看磁盘使用情况
进程查看命令
- ps(process status) :将某个时间点的程序运作情况截取下来
- 选项和参数
- a :和输入终端(terminal) 关联的所有 process,通常与 x 一起使用,列出完整信息
- x :后台进程,通常与 a 这个参数一起使用,可列出较完整信息
- u :有效使用者 (effective user) 相关的 process
常用组合
-
ps aux 观察系统所有的程序数据 (常用)
• 以下为各选项的含义 -
USER:该 process 属于那个使用者
-
PID :该 process 的程序标识符。
-
%CPU:该 process 使用掉的 CPU 资源百分比;
-
%MEM:该 process 所占用的物理内存百分比;
-
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
-
RSS :该 process 占用的物理的内存量 (Kbytes)
-
TTY :该 process 是在那个终端机上面运作,若与终端机无关则显示 ?, 另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
-
STAT:该进程目前的状态,状态显示与ps -l 的 S 旗标相同 (R/S/D/T/Z)
-
START:该 process 被触发启动的时间;
-
TIME :该 process 实际使用 CPU 运作的时间。
-
COMMAND:该程序的实际命令为何?
进入到 /usr 目录;usr 不是用户的意思,而是 unix software resources 的简写
查看内容
mkdir
mkdir 用于创建目录
mkdir abc
mkdir a1 a2 a3
如果直接创建多层目录,则报错,因为默认只能创建最后一级目录
可以添加 -p 选项,用以创建多层目录,因为系统发现某一级目录不存在的时候创建父目录
也可以在 mkdir 后跟多个目录,用于一次性创建多个目录
但是可以使用大括号高效创建相似的目录
rm
rm 用于删除文件
直接删除,需要确认 yes
rm file
添加-f选项可以不用确认强制删除
rm -f file
如果rm的参数是目录,则会提示需要迭代删除而不能成功
rm adir
此时可以添加 -r 参数表示迭代删除
rm -r dira
也可以使用 -rf 选项,迭代强制删除某个文件或目录,此命令慎用。
rm -rf dira
尤其是
!!! rm -rf /
cp
• cp 拷贝
cp 文件… 目标目录 拷贝文件…到目标目录,可以同时拷贝多个文件,文件名之间用空格隔开
cp -r 目录 目标目录
mv
mv 用于移动或重命名文件
• 移动文件/目录 #mv 源文件/[源文件1 源文件2] 目标
[root@node1 ~]# cd abc
[root@node1 abc]# mkdir -p x/y/z
[root@node1 abc]# mv install.log anaconda-ks.cfg x/y
[root@node1 abc]# ls x/y
anaconda-ks.cfg install.log z
[root@node1 abc]# mv x /root
[root@node1 abc]# ls -R /root/x
/root/x:
y
/root/x/y:
anaconda-ks.cfg install.log z
/root/x/y/z:
[root@node1 abc]#
• Linux中没有专门改名的命令,兼职改名工作:
[root@node1 abc]# ls
1dir 2dir 3dir xdir ydir zdir
[root@node1 abc]# mv zdir zzdir
[root@node1 abc]# ls
1dir 2dir 3dir xdir ydir zzdir
[root@node1 abc]#
Ln
用于创建硬链接或软链接
可以使用 ll -i 选项让 ll 打印文件的 inode 信息
[root@node1 ~]# cp /etc/profile ./
[root@node1 ~]# ll –i
创建硬链接
[root@node1 ~]# ln profile ln1
创建软链接:让 ln2 指向 profile , 给 profile 创建软连接,相当于 windows 中的快捷方式
[root@node1 ~]# ln -s profile ln2
再次打印 inode 信息查看
[root@node1 ~]# ll -i
如果两个文件 inode 一样,表示两个文件( ln1 和 profile )实际上是同一个文件,硬连接。如果 inode 不一样,但是有 ln2->profile,表示 ln2 是 profile 的软链接。
ln: creating symbolic link `ln1': File exists
软连接删除不会删除源文件
硬链接删除后如果源文件没有硬链接,则文件被删除
如何在不使用 mv 的情况下移动文件?可以操作硬连接
文件系统命令
虚拟目录树!!!
df
查看系统挂载的磁盘情况
df
以人能看懂的格式显示
df -h
列出根目录下的内容
ls /
进到 boot 目录
cd /boot
在 linux 中用到了虚拟目录树
它的存在就是为了解耦应用和底层存储
mount
将光驱挂载到 /mnt 目录:
mount /dev/cdrom /mnt
进入到 /mnt 目录
cd /mnt
查看磁盘分区的挂载情况:
df -h
umount
卸载掉挂载的分区 /mnt
umount /mnt
注意卸载 /mnt 时,当前目录不能在 /mnt 下面,否则报出如下图所示提示:
再次查看磁盘分区的挂载情况:
df -h
重新挂载
mount /dev/cdrom /mnt
如果没有挂载,则访问父目录的文件夹
再次查看
df -h
虚拟目录树的各个目录用途
文件元数据
系统操作命令
du!!!
du 可以为目录递归地汇总每个 FILE 的磁盘使用情况
• du:文件系统的磁盘使用量或是目录使用量
ᅳ a :列出所有的文件与目录容量
ᅳ h :以人们较易读的容量格式(G/M)显示 重要
ᅳ s :列出总量而已,而不列出每个各别的目录占用容量
ᅳ k :以 KBytes 列出容量显示
ᅳ m :以 MBytes 列出容量显示
cd /usr
du
添加 -s 参数可以生成指定目录的汇总信息,也就是共占用多大的磁盘空间
du -s ./
添加 -h 参数可以显示为人类可以读懂的格式
du -sh ./
将路径写成 ./* 统计当前目录下每项内容占用的磁盘空间信息
du -sh ./*
查看 /usr/local 目录下共占用多大磁盘空间
stat
显示文件的元数据
stat /etc/profile
change和modify的不同
modify 指的是文件内容被修改的时间
change 表示文件元数据被修改的时间
touch
touch 已存在的文件,抹平各个时间
touch 不存在的文件,则创建文件
文本操作命令
cat
直接查看一个文件的内容可以使用 cat , tac , nl 这几个指令
cat(concatenate):
cat 是 concatenate 的缩写,其功能时间一个文件的内容连续的输出。该命令适合看行数较少的文件。另外,需要查看一般 DOS 文件时,可以通过 -A 选项来显示换行符和 [tab]
tac (反向输出):
与上面的 cat 命令进行比较,是由最后一行先显示
tac 功能与 cat 类似,但是是由文件最后一行反向连续输出到屏幕上
nl (添加行号打印):
nl 可以将输出的文件内容自动的加上行号
more
[root@node1 ~]# more /etc/man.config
more 会在最后一行输出目前按显示内容的所占百分比,在现实过程中我们还可以输入以下命令进行进一步操作:
空格 (space): 向下翻页
回车 (Enter): 向下翻一行
“/字符串”: 在当前显示内容中线下查询字符串内容
“:f”: 立即显示出文件名以及目前显示的行数
“q”: 离开显示内容
“b” 或 [ctrl]-b: 代表回翻,该操作仅对文件有效
less
查看文件内容的时候可以进行一下操作:
空格:向下翻一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
“/字符串”: 向下搜索字符串内容
“?字符串”: 向上搜寻字符串内容
n: 重复上一次查询任务
N: 反向重复前一个查询任务
g: 到文件的第一行
G: 到文件的最后一行(注意大小写)
q: 离开文件
head
head (取出前面几行,Centos6.5 使用 /etc/man.config 文件):
tail
管道
[root@bk1 ~]# ps -ef |grep ssh
[root@bk1 ~]# yum list |grep mysql
如何显示文件中间的几行?
head -m profile | tail -n
管道左侧的输出作为右侧的输入
echo "/" | ls -l
显示内容错误(不是预期的结果),因为 ls 不需要输入,只需要参数
Xargs
将前面输出作为后面命令的参数
echo "/" | xargs ls -l
• xargs:命令
– 1,在标准输入中读取到的内容!
– 2,自己的参数理解为一个字符串
• 模仿 shell ,做 blank 切分,第一个子字符串为命令
– 3,将步骤1的内容做为步骤2的命令的选项参数拼接起来
– 4,执行得到的结果
数据重定向
标准输入(stdin):编号为0
标准输出(stdout):编号为1
标准错误输出(stderr):编号为2
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
ls -l >> ok1.log
ls -l > ok2.log
ls hello 2>/root/err.log
ls hello / 1>/root/log.log 2>/root/err.log
ls 1>/dev/null
ls 2>/tmp/err.log
既向控制台输出,也向文件写入
ls -l / | tee ok2.log
tee 命令,将输入分成两个输出