实验1
Linux命令
查看当前用户
who am i
who mom likes
-
显示所有文件大小,并以普通人能看懂的方式呈现:
ls -AsSh
#其中小 s 为显示文件大小,大 S 为按文件大小排序
修改权限
chmod 700 yourfile
chmod go-rw yourfile
#'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。
mkdir -p
- -p 确保目录名称存在,不存在的就建一个。
目录
当前目录
current_path="$PWD" # 同 "`pwd`"
上一级目录
path=$(dirname "$PWD")
上上级目录
path=$(dirname $(dirname "$PWD"))
目录的最后部分
last_component=$(basename "$PWD")
ls 参数
Linux 中ls命令的使用详细介绍_shell_脚本之家 (tuohang.net)
-
使用more和less命令分页查看文件
more或者less 文件名
-
使用head和tail命令查看文件
用来只查看的头几行(默认为10行,不足10行则显示全部)和尾几行。
实验二
which hadoop #查看hadoop位置
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
find的使用格式如下:
$ find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
find的使用实例:
$ find . -name "my*"
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
$ find . -name"my*" –ls
练习
到….hadoop/bin 目录下查找文件名以.cmd结尾的文件。
locate(选做)
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
若locate 未找到 命令执行:yum -y install mlocate updatedb
scp local_fileremote_username@remote_ip:remote_folder
或者
scp local_fileremote_username@remote_ip:remote_file
或者
scp local_fileremote_ip:remote_folder
或者
scp local_fileremote_ip:remote_file
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名。
如:scp stu.txt root@127.0.0.1:/home/
scp stu.txt root@127.0.0.1:/home/stu1.txt
管道是什么,管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道又分为匿名管道和具名管道。我们在使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由|分隔符表示。具名管道简单的说就是有名字的管道,通常只会在源程序中用到具名管道。下面我们就将通过一些常用的可以使用管道的"过滤程序"来帮助你熟练管道的使用。
试用
先试用一下管道,比如查看/etc目录下有哪些文件和目录,使用ls命令来查看:
$ ls -al /etc
有太多内容,屏幕不能完全显示,这时候可以使用滚动条或快捷键滚动窗口来查看。不过这时候可以使用管道:
$ ls -al /etc | less
grep 命令,在文本中或 stdin 中查找匹配字符串
grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找,这里介绍它简单的使用。
格式: grep [命令选项]... 用于匹配的表达式 [文件]...
还是先体验一下,我们搜索/usr/local/hadoop/etc/hadoop目录下所有包含"value"的所有文本文件,并显示出现在文本中的行号:
$ grep -rnI "value" /usr/local/hadoop/etc/hadoop
或
cd /usr/local/hadoop/etc/Hadoop
grep -rnI "value" /usr/local/hadoop/etc/hadoop
也可和管道结合一起用
如:
grep -rnI"value" /usr/local/hadoop/etc/hadoop | less
显示/proc/meminfo文件中以大写S开头的行
cat /proc/meminfo|grep^s
结果:无
显示/proc/meminfo文件中以大写s开头的行
cat /proc/meminfo|grep-i ^s
显示/etc/passwd文件中以/bin/bash结尾的行
cat /etc/passwd |grep/bin/bash$
显示/etc/passwd文件中不以/bin/bash结尾的行
cat /etc/passwd |grep -v/bin/bash$
wc 命令,简单小巧的计数工具
wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出/etc/passwd文件的统计信息:
$ wc /etc/passwd
分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数:
wc 命令,简单小巧的计数工具
wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出/etc/passwd文件的统计信息:
$ wc /etc/passwd
分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数:
sort排序命令
sort这个命令功能很简单,就是将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等。
默认为字典排序:$ cat /etc/passwd | sort
反转排序:$ cat /etc/passwd | sort –r
uniq 去重命令
新建文件 uniq_xuehao.txt
输入命令 vim uniq_xuehao.txt
在文件中输入:
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
执行命令:uniq uniq_xuehao.txt
比较体会uniq uniq_xuehao.txt 与 cat uniq_xuehao.txt结果的不同
数据流重定向
常用到的两个重定向操作:
$ echo 'hello friend'> rd_xuehao.txt
$ echo 'hello friends'>> rd_xuehao.txt
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
-
基本用法
log_xuehao.txt文本内容如下:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
用法一:
awk '{[pattern] action}'{filenames} # 行匹配语句 awk '' 只能用单引号
练习:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log_xuehao.txt
# 格式化输出
注:第一个格式说明符%-8s,将名字左对齐输出,占用8个字符宽度
$ awk '{printf "%-8s%-10s\n",$1,$4}' log_xuehao.txt
用法二:
awk -F #-F相当于内置变量FS, 指定分割字符
# 使用","分割
$ awk-F, '{print $1,$2}' log_xuehao.txt
用法三:
awk -v # 设置变量
实例:
$ awk -va=1 '{print $1,$1+a}' log_xuehao.txt
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}'log_xuehao.txt
用法四:
awk -f {awk脚本} {文件名}
实例:
vi cal.awk
文件输入: {print$1,$1+a,$1b}
$ awk -f cal.awk log_xuehao.txt
用法五:
过滤第一列大于2的行
$ awk '$1>2'log_xuehao.txt
过滤第一列等于2的行
$ awk '$1==2 {print$1,$3}' log_xuehao.txt
过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2&& $2=="Are" {print $1,$2,$3}' log_xuehao.txt
上一页下一页