常用命令-基础命令
Linux命令,严格区分大小写!!!!!
service sshd status 查看sshd服务运行状态
service sshd start sshd服务开启
ifconfig 查看网络状态
ping www.baidu.com
startx 开启图型界面
service network restart 网络服务重启
chkconfig sshd on sshd服务设为开机自启
ctrl + c 终止命令
ps -x 查看当前用户进程
tail -200f nohup.out 查看挂起的进程 输出到 当前目录的nohup.out 文件
网络相关
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 参数。