下面都是之前对用到过的Linux命令的总结,今天来回顾回顾
常用命令-基础命令
Linux命令,严格区分大小写!!!!!
service sshd status 查看ssh服务运行状态
service sshd start ssh服务开启
ifconfig 查看网络状态
ping www.baidu.com
startx 开启图型界面
service network restart 网络服务重启
chkconfig sshd on sshd服务设为开机自启
ctrl + c 终止命令
ps -x 查看所有进程
ps 当前用户进程
tail -200f nohup.out 查看挂起的进程输出到 当前目录的nohup.out 文件
lsof -i:3306 查看对应端口占用情况
网络相关
wget -vn http://www.baidu.com -O /user/zhangxin/newpath.html 下载源码到本地
curl http://www.qq.com 查看网址源码
curl -o /user/newout.html http://www.qq.com 网址源码下载到本地
查看当前目录的绝对路径
pwd
查看指定目录下的文件
ls
后面如果不跟东西,就显示当前目录下的文件及子目录
如果跟东西,分2种:
相对路径(相对于当前目录)
如ls Desktop,指显示当前目录下的Desktop文件/目录的信息
绝对路径
如ls /root/Desktop,显示绝对路径/root/Desktop文件/目录的信息
如果除了路径外,还跟了带小短线的参数,如-l
则显示对应功能的文件信息。
ls -l通常可以简写为ll。
ls -a 可以显示指定目录下所有文件/目录(包括隐藏的,隐藏的文件/目录通常以英文句点开头.)
Linux命令的格式
<命令名称> [带小短线的选项参数] [普通参数1] [普通参数2]
改变所处的当前目录位置
cd [路径]
cd .. 代表返回到上一级目录
(ls mydir/ 等价于 ls ./mydir/)。
在Linux中,一个英文句点(.)代表当前目录,两个英文句点(..)代表上一级目录,波浪号(~)代表家目录。
创建目录
mkdir 目录名称/路径
mkdir -p 目录名称/路径(创建多层目录使用)
目录重命名
mv 老目录名 新目录名 (新目录不存在时为重命名)
删除目录
rm -rf 目录名/路径
-r代表递归删除(包括子目录),-f代表强制删除(不用再输入y去确认)
删除目录一定要带 -r 选项。
这条命令,知道就行,不是你自己创建的目录一定不要使用这个命令。
慎用!!!!!!!!!!!!!!!!!
移动目录
mv my_dir/test_2/test_2_2 my_dir/
是把test_2_2这个目录移动到my_dir目录下。
复制目录
cp -r my_dir my_dir_2
是把my_dir这个目录递归地复制到当前目录下,生成一个新目录,名称为my_dir_2
创建文本文件
touch myfile
echo abc > mytxtfile
在当前目录下生成了一个名称为myfile的文本文件
文件重命名
mv myfile mytxtfile
这个命令会把当前目录下的myfile文件重命名为mytxtfile
删除文件
rm -f myfile
会不经提示直接删除当前目录下的myfile
移动文件
mv myfile my_dir/
将当前目录下的文件myfile移动到当前目录下的子目录my_dir下
复制文件
cp my_dir/myfile mytxtfile
将my_dir/目录下的myfile文件复制到当前目录下,命名为mytxtfile
修改文件内容(文本文件)
vim mytxtfile
在文本编辑器vim中修改文件mytxtfile的内容。
刚刚进入的时候,是处于命令模式,需要按i这个键,进入编辑模式(左下角会提示--INSERT--)
我们就可以使用键盘输入我们想要修改的内容了。
当我们修改完成准备保存退出时,要按Esc返回到命令模式,然后按:英文冒号,左下角会出现:,我们输入wq,敲回车。
虽然我们在编辑模式修改了内容,但如果我们并不打算保存我们的修改,想直接退出,还是按Esc,回命令模式,输入英文冒号:,输入q!,敲回车。
如果我们只是想单纯地看看里面的内容后,不修改,直接退出,则保证你处于命令模式,输入英文冒号,输入q,回车。
vi也是一款文本编辑器,但是功能不如vim强大。
vim/vi的快捷键有很多,功能很强大,这里不细讲,大家可以自己百度深入学习。
echo abc > mytxtfile
echo abc 会将echo后的参数输出到标准输出(屏幕上)
后面的>的作用是重定向,它会将echo 的参数不再输出到屏幕上,而是指定的文件中(覆盖)。如果想在文件后面追加,则使用>>。
命令模式下:
:w 存不退出
:q 未操作时退出
:q! 不保存退出
:wq 保存退出
:w 保存
gg 回到第一行首
G 回到最后一行首
/home 查找第一个home出现的地方
//home 查找第二个home出现的地方
查看文本文件内容
cat mytxtfile
会在屏幕上输出整个mytxtfile的内容
head -1 mytxtfile
会在屏幕上输出mytxtfile的第一行内容
tail -1 mytxtfile
会在屏幕上输出mytxtfile的倒数第一行内容
如果文件内容过多,一个屏幕显示不下,可以使用如下命令
cat mytxtfile | more
那个竖线叫管道命令,它会把它左边命令的输出作为输入传递给它右边的命令,
敲空格,是翻页(屏幕),敲回车,下一行。
查看当前登录用户名
whoami
切换登录用户
su 需要切换的用户名(如果是root则需要密码)
修改密码
passwd(回车),输入新密码,再回车,再输入一遍。回车。
上面是修改自己密码。
如果想修改别的用户名的密码,必须使用root登录。
passwd lauhank(你想修改的用户名),后面就和修改自己密码一样了。
新密码会在下次登录时生效。
新密码可以与老密码一样。
查找文件
命令 find ./ -name my*
在当前目录(./代表当前目录,也可以换成其他指定路径)下查找以my开头的所有文件/目录,相关的文件/目录的路径会在屏幕上的结果中输出出来。
常用命令-高级命令
文本文件student
姓名 学号 语文成绩 数学成绩 英语成绩 总成绩
张三 001 80 90 95 265
李四 002 1 85 90 176
赵五 003 65 90 70 225
王六 004 60 40 80 180
周七 005 90 55 85 230
齐八 006 85 90 70 245
命令grep-按行筛选(仅查找)
命令grep通常用来在文件或者上一个命令的输出结果中,筛选出我们想要的内容
比如 cat integer | grep 2 目的是在文件integer的内容中,筛选出带有2的行。
或者 grep 2 integer 单独使用grep命令,对于从文件中找,这2条命令是等价的。
命令 ls -l /etc/ | grep -v init 的目的是在管道左侧命令的输出结果中筛选出不包含 init这个字符串的内容。(相当于 grep init 的取反)
-v :反转
-c :count
-e :多个连续命令
-E :extend
-i :ignore
-n :number
-r :recursive
命令sed-按行修改(增删改查)
命令sed通常会按行去处理文本ls,它可以在不改动原来的文件/结果的基础上,按我们的要求删除、插入、修改指定的行。
cat -n student | sed '1d' 输出student的内容(-n代表前面有行号),并将第1行删除
cat -n student | sed '3,5d' 输出student的内容,并将第3到5行删除
cat -n student | sed '1a abcdefghi' 输出student的内容,并在第1行后面(第2行前)插入abcdefghi
cat -n student | sed '1c abcdefghi' 输出student的内容,并将第1行修改为abcdefghi
cat -n student | sed -n '3,5p' 输出student的内容,只显示第3到5行
命令sed当使用在查找的这个场景中时,要加 -n 选项参数。
cat -n student | sed -n '/张三/p' 输出student的内容,只显示包含’张三’的行
sed [参数] [动作]
参数:
-n :使用安静模式。在一般sed的用法中所有来在stdin的数据一般都会被列出到终端上。但如果加上-n参数后,则只有经过sed特殊处理的那一行或者动作,才会被列出来
-e :直接在命令模式上进行sed的动作编辑
-f :直接将sed的动过写在一个文件内,-f file则可以运行file内的sed动作
-r :sed动作支持的是延伸型正则表达式的语法
-i :直接修改读写的文件内容,而不是输出到终端。
动作:
命令awk-按行处理,对每行文本做更复杂的操作
命令awk通常会按行去处理文本,它要做的第一个事就是对每一行进行切割,如果指定切割符就按指定的走,没有就是默认的空字符(空格、制表符)。
cat student | awk '{print $2}'
这条命令的作用就是,对cat student的输出结果,按行处理,每行,使用空格、制表符空字符进行切割,切割后,第1部分(第1列)就是$1,第2部分就是$2,未切割的原始数据是$0。print就是在屏幕上输出对应变量的值。
cat /etc/passwd | awk -F ':' 'BEGIN{print "username\t\t\thomedir"}{print $1"\t\t\t"$6}'
这条命令的作用是,把cat /etc/passwd的输出结果,按行处理,每行使用英文冒号进行切割,必须要用 -F ‘:’ 来指定切割符,先打印 username3个制表符homedir,再另起一行,开始打印原来输出结果中切割后的第1列和第6列,两列之间使用3个制表符进行间隔。
cat /etc/passwd | awk 'BEGIN{count=0}{count++}END{print "count=",count}'
这条命令的作用,是这样的。它把cat /etc/passwd的输出结果的行数计算,并最终输出。
BEGIN{}里面的内容只会在开始时执行一次,通常可以用来声明与初始化一些变量。
然后紧接的{}里面的内容,会按行,每行都会执行一次,通常用来写一些对行内容进行处理的逻辑。
END{}里面的内容只会在上面的逻辑都执行完后,最后收尾时执行一次,通常可以用来输出最终的处理结果。
通常awk的使用场景就是类似于下面的
cat..... | awk 'BEGIN{...} {} END{...}' | awk '...' | awk ''
cat /etc/passwd | awk -F ':' 'BEGIN{homedir=""} {if($1=="lauhank"){homedir=$6;}} END{print "homedir=",homedir}'
这条命令的目的是在cat /etc/passwd的输出中,按英文冒号切割每行,找到lauhank这个用户名对应的家目录的名称。
cat /etc/passwd | awk -F':' '{if($1=="root" || $1=="zhangxin"){print $1"\t\t"$6}}'
命令wc
有2种套路,一种是当成单独命令,一种是在管道中(这种场景使用最多)。
wc -l /etc/passwd 统计/etc/passwd文件的行数
cat /etc/passwd | wc -l (字母L小写)与上面差不多,但这种用法更常见。
wc还有其他的选项参数,不过不常用,大家有兴趣可以自己去了解下。
cat student | wc -c
命令uniq与sort
命令uniq通常用来去重(按行),但是它的前提是,它处理的内容已经有序了,不然就得不到我们想要的去重效果了。所以通常是在调用uniq之前使用sort来排序。
cat student | sed '1d' | sort -rk2
将cat student | sed '1d'的输出结果中,以空格或者制表符等为基准切割每行,然后按第2列降序排序,第2列通过 -k2 指定(第3列就是 -k3),如果是升序则不加r
如果想使用指定字符做切割,则使用 -t指定切割符
ls -l | sort -nk5此命令可以按文件/目录大小排序结果(-n的作用就是将指定的列当成数字处理)。数字与字符的排序规则是不同的。522 4096如果按字符排序,522是大于4096的。如果按数字排序,则522是小于4096的。
cat student | sed '1d' | sort -k3rn
cat student | sed '1d' | sort -k3r | uniq
sort:选项
uniq:参数
命令cut与seq
这两个命令不算太常用,知道大概什么功能就可以。
cut通常用于切割行,显示对应的第几列。默认的切割符是制表符。如果要指定,则使用 -d 。
cat student | cut -f 3,4 等价于
cat student | awk '{print $3 "\t\t"$4}'
seq 用于生成序列号(整数)。
seq 8 会生成从1到8,8个整数的序列号。
seq 0 9 会生成从0到9,10个整数序列号。
seq 0 2 9会生成从0开始,每次增量为2,到不大于9的整数序列号(0 2 4 6 8)
sed '1d' | cut -d ' ' -f 1
Linux拓展知识
权限管理
Linux用户分类:root用户、虚拟用户(不可用来登录,程序或者系统服务使用,通常是安装某个软件时由安装程序调用root权限添加的)、普通真实用户(用来登录)。
以上3类用户,都在下面的这个配置文件中记录着,每新增一个用户此配置文件就对应新增一行,每删除一个用户此配置文件就对应删除一行。
对应的配置文件:/etc/passwd
我们这里主要讲普通真实用户。
添加用户 useradd <username>
修改用户密码 passwd [<username>]
显示用户uid gid与所属附加组信息 id <username>
删除用户 userdel [-r] <username> (-r是用于在删除用户的时候也一起删除对应的家目录)
添加用户组 groupadd <groupname>
删除用户组 groupdel <groupname>
添加一个新用户并将其划分到指定用户组
useradd -g <groupname> <username>
修改一个现有用户并将其划分到指定用户组
usermod -g <groupname> <username>
一个用户只能归属于一个主组,但可以有多个附加组
上面命令中的 -g 用户指定主组,如果指定附加组则使用 -G
在添加一个新用户时,如果没有明确指定主组,则系统会创建一个与新用户名相同的用户组,并将此用户组作为新用户的主组
修改文件/目录的权限
chmod [-R] 755 <filename>
chmod [-R] 644 <filename>
chmod [-R] g+x,o+x <filename>
修改文件/目录的属主属组
chown [-R] <username [: groupname]> <filename>
修改文件/目录的属组
chgrp [-R] <groupname> <filename>
DNS
我们使用ssh root@192.168.56.101 时,通常IP这种方式比较难记忆,为方便人们记忆IP,Domain Name System(域名系统)出现了,DNS服务器的职责就是将域名转换为IP地址。比如,我们在地址栏输入https://www.baidu.com时,www.baidu.com就是一个域名,它往往对应一台设备,我们和这个设备通信其实还是使用的IP地址,只是这个转换由DNS服务器自动完成了。
我们使用ping命令可以得知某个域名对应的IP。
为了减小DNS服务器的压力,我们的PC都有自己的DNS缓存,缓存的工作机制是,当我们与www.baidu.com通信时,我们首先查询自己PC的DNS缓存,如果缓存中有对应的域名到IP的记录时,就不再去请求DNS服务器了,否则就请求DNS服务器,同时将结果缓存到PC中。
DNS缓存机制,最常见的一种方式就是PC中的HOSTS文件(文本文件)。
Windows中对应的HOSTS文件路径是C:\Windows\System32\drivers\etc\hosts
Linux中对应的路径是 /etc/hosts
所以我们可以在虚机中的HOSTS文件中追加一行
192.168.56.101 myserver
然后我们使用ping myserver,如果能ping通,那么我们的登录命令可以简写为 ssh root@myserver
修改主机名
修改主机名(将[root@bogon ~]改为[root@lauhankpc ~])
运行vi /etc/sysconfig/network
将文件中HOSTNAME=的那一行修改为HOSTNAME=lauhankpc
运行 vi /etc/hosts
追加新行(已有的127.0.0.1对应的域名建议不要去修改)
127.0.0.1 lauhankpc
运行 reboot,重启后即生效
SSH免密码登录
产生背景
SSH与telnet都是用于登录远程主机的命令,但是telnet在传输用户名密码时使用的是明文,只要有抓包软件(如wireshark),拦截到对应的报文,就可以得知用户名密码,这是很不安全的。SSH则改进了这一缺陷,它传输的是使用服务端公钥(公钥这一概念如果有兴趣可以自行百度)加密的用户名密码(登录方式1)或者不传输用户名密码只传输登录客户端的公钥(登录方式2)。登录方式1,即普通的输入用户名密码的方式,有重放攻击的漏洞,所以产生了登录方式2,免密码登录方式。
配置步骤
新建一个虚机(具体步骤参考安装指南)
两个虚机能互相ping通(如果不能就检查IP是否在同一网段),选择其中一台作为服务器,另一台为客户端。
我们要实现的就是客户端在登录服务器时可以不输入密码直接登录
使用root用户名分别登录客户端与服务器端
保证服务器的ssh服务正常运行(具体配置参考安装指南)
在客户端运行命令 ssh-keygen -t rsa(一直按回车)
这时会在家目录下生成一个隐藏目录 .ssh,下面有2个文件
id_rsa 私钥
id_rsa.pub 公钥
将客户端的公钥复制到服务器端root家目录下(需要输入服务器端root对应的密码)
scp ~/.ssh/id_rsa.pub root@服务端域名或者IP:~/
在服务器端将刚刚接收到的客户端的公钥内容追加到对应的验证文件中(文件名一定不要写错)
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
在客户端直接运行
命令 ssh root@服务端域名或者IP
验证是否可以不输入密码直接登录成功
当实现免密码登录后,使用scp复制文件也可以不用再像之前那样先输入密码了
命令scp如果复制的是目录则要使用 -r 参数。
软件安装
yum安装
它是基于RPM包安装的一种方式,如果单独安装RPM包,是无法解决包依赖问题的,要我们安装时手动解决,YUM提供了自动解决依赖的机制,只需要简单几条命令,很快就能把相关软件装到机器上。
但是前提是,你的机器一定要能连外网!!!!!
查看已安装未安装的软件包总列表 yum list
查看已安装的软件包列表 yum list installed
比如安装一个方便Windows与Linux之间互传文件的小工具:lrzsz。
运行命令 yum install lrzsz ,回车。
然后根据提示,输入y(yes),如果顺利,看到complete success一类的提示信息就安装成功了。
如果你不想总是手动输入y,就使用yum -y install lrzsz,这样的话默认全自动选择y
命令套路通常是 yum install <软件包名称>
软件包名称不是你想写啥就写啥的,什么样的软件有什么包名,这个都是固定,百度一下,你就知道。
如果是通过yum方式安装的软件,卸载时候不要删除目录,要通过
命令yum remove <软件包名称> 去卸载。
使用lrzsz
由Windows传输文件到Linux:rz -y(或者rz -be)在弹出的窗口中选择想上传的文件,点击打开即可传输文件到Linux
由Linux传输文件到Windows:sz -b <filename>在弹出的窗口中选择保存的位置,点击确定即可保存文件到Windows
压缩解压缩
lzo 需native安装lzo库
lzop -v test 压缩
lzop -d test.lzo 解压
bzip2 bunzip2
bzip2 test 压缩
bzip2 -d all.bz2 解压
bunzip2 all.bz2 解压
gzip gunzip
gzip test 压缩
gzip -d all.gz 解压
gunzip all.gz 解压
snappy
暂无命令行测试方法,使用hadoop安装snappy库直接设置hive表存储格式
zip unzip
zip all.zip *.jpg 压缩
unzip all.zip 解压
compress uncompress
uncompress all.Z 解压
rar unrar --rar for linux 自行下载安装
unrar e all.rar 解压
ls weibo_zip/*.zip | xargs -n1 unzip -d ~/pro04 --批量解压缩
tar
tar -xf all.tar
tar -czf all.tar.gz *.jpg 生成tar包,用gzip压缩
tar -cjf all.tar.bz2 *.jpg 生成tar包,用bz2压缩
tar -cZf all.tar.Z *.jpg 生成tar包,用compress压缩
tar -xzf all.tar.gz
tar -xjf all.tar.bz2
tar -xZf all.tar.Z
tar 参数
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
源码安装
.zip .gnu:gz bz2
源码安装,首先先获取源码的压缩包。如pdsh-2.26.tar.bz2。
命令 tar -jxvf ~/Downloads/pdsh-2.26.tar.bz2
进入对应的源码目录(cd pdsh-2.26) ls -l 应该会发现一个 configure文件
命令 ./configure 这个命令是检查当前操作系统是否能够支持本软件的安装
如果有问题通常是缺少一些必需的软件比如编译器什么的,我们可以通过yum -y install gcc来安装。
安装好之后,一定要再执行一次./configure,因为刚刚它没执行完。
如果没问题,则会在当前目录下生成一个Makefile文件,运行
命令 make 编译软件(将源代码,通常是C/C++,编译为目标代码)
如果没问题,则运行
命令 make install 真正去安装软件了
如果没问题,就是安装成功了。
命令 pdsh -V
验证安装完成。
卸载则在编译的目录(Makefile所在的那个目录)下运行 make uninstall(Makefile文件中包含卸载功能才可以使用此命令使用命令cat Makefile | grep uninstall验证)。
再运行 make clean 回车。再运行 make distclean。
命令 pdsh -V
检查卸载完成。
make clean ->> make install 版本更新
二进制安装
以JDK安装为例。基本套路与Windows安装一样。
从官网下载对应版本(Linux 64位)的JDK的tar.gz文件。如jdk-8u171-linux-x64.tar.gz
如果我们知道对应的资源地址http://a.b.com/xxx.tar.gz
可以使用命令 wget http://a.b.com/xxx.tar.gz直接下载到虚拟机中。
否则就使用lrzsz工具从Windows上传一下。
mkdir -p /root/java 创建安装目录
cd ~/java
tar -zxvf /root/Downloads/jdk-8u171-linux-x64.tar.gz 解压缩安装
#下面我们开始配置环境变量
vim /etc/profile
export JAVA_HOME=/root/java/jdk1.8.0_171 #创建一个新的环境变量
export PATH=$JAVA_HOME/bin:$PATH #在原来的环境变量中追加
source /etc/profile #为了让配置即时生效
#验证
javac -version
java -version
要是能显示版本号神马的,你就大功告成了
卸载的话灰常简单,直接删除对应目录,修改一下环境变量就可以了。
接下来,我们手写一个Java入门程序
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello world");
}
}
在Linux环境下feel一下coding。
验证是否可以不输入密码直接登录成功
HDFS shell命令
hdfs ----help
hdfs dfs 与hadoop fs 命令对等,推荐使用hdfs
hdfs dfs -usage cp 查看命令用法
hdfs dfs -cat /path/txt
hdfs dfs -ls /path
hdfs dfs -rm [-r] /path
hdfs dfs -copyFromLocal /txt /user/txt local ---> hdfs /user/txt
hdfs dfs -put /fromlocal /toHdfs
hdfs dfs -copyToLocal /txt /user/txt hdfs ---> local /txt
hdfs dfs -get /fromhdfs /toLocal
hdfs dfs -text /tmp/index.html.gz | more 查看压缩的文件内容
hdfs dfs -du -h /tmp/tl 查看文件站hdfs的磁盘大小
hdfs dfs -touchz /tmp/txt 创建文本文档
hdfs dfs -cp /from /to 复制
hdfs dfs -mv /from /to
hdfs dfsadmin -report 查看集群状态
hdfs dfsadmin -help
hdfs dfsadmin -safemode get 获得安全模式信息
MapReduce shell命令
mapred 查看二级命令
mapred job 产看三级命令
mapred job -list 查看正在执行的job
mapred job -kill job-id kill指定job-id
Yarn shell 命令
yarn 查看二级命令
yarn version 产看版本
yarn jar jarname mainClassPath
yarn application -list
yarn top 查看yarn 的当前资源使用的使用情况