SSH命令
SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
ssh命令用于远程登录上Linux主机。一般我们会配置成免密码的方式登录
常用格式:ssh [-l login_name] [-p port] [user@]hostname
备注:ssh可以通过ssh 主机名的方式登录到远程机器。需要修改主机的hostname配置:
不指定用户,默认利用当前宿主用户的用户名登录
ssh 192.168.0.11
指定用户登录,若需要密码,加-p password参数即可
ssh root@192.168.0.11
若修改过端口,可以指定端口登录
ssh -p 12333 root@192.168.0.11
/
登录到远程主机后立刻执行某个命令(当然也可以执行脚本)
ssh omd@192.168.1.100 "ls /home/fangshixiang"
SSH为啥安全呢?
SSH之所以能够保证安全,原因在于它采用了公钥加密。
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
口令登录(用户名、密码登录)
公钥登录
远程主机的authorized_keys文件
远程主机会将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
不使用上面的ssh-copy-id命令,改用下面的命令,这样也是okl的,只是比较麻烦:
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
scp(ssh提供的功能支持)
scp在夸机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入。
远程文件的安全(加密)拷贝
scp是加密远程拷贝,cp为本地拷贝。每次都是全量拷贝(效率不高,适合第一次),增量拷贝用rsync
命令格式:
scp [参数] [原路径] [目标路径]
-P port 注意是大写的P, port是指定数据传输用到的端口号
-r 递归复制整个目录(复制目录一般都需要带上此参数)
scp -P52722 demo.txt fangshixiang@10.102.131.178:/home/fangshixiang
这样子就把我的机子的demo.txt文件拷贝到了远程机器10.102.131.178的指定目录下了。
交换给位置,就可以把远程服务器的文件copy到本地了:
scp -P52722 fangshixiang@10.102.131.178:/home/fangshixiang/nohup.out ./scp -P52722 fangshixiang@10.102.131.178:/home/fangshixiang/nohup.out ./
rsync
rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。
因为使用较少,具体参考:rsync(一):基本命令和用法
sudo和su
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
su : 切换到某某用户模式,提示输入密码时该密码为想要切换到的用户的密码,用法为su 账户名称。如果后面不加账户时系统默认为root账户,密码也为root的密码。没有时间限制。
备注:root切换到任何用户的时候,是不需要输入密码的
快捷命名:
sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。
Linux下为用户配置免密码sudo权限(只有root用户才能操作)
我们也可以指定的用户组,来sudo -i免密码:
1、root的密码除了root本人知道外,不需被其他需要用到root权限用户知道,因为使用sudo时,要求输入的密码是『该位用户自己的密码』。
2、把所有可执行sudo指令的用户都规范在『/etc/sudoers』这个文件中,root可以很容易地掌控整个系统。(一般每个用户一行记录,当然可以按组来)
普通用户使用sudo 来执行只有root才能执行权限的命令,跟用root用户执行是不一样的,因为这时候他用的还是普通用户的环境变量。用su -成root的用户还是有些环境变量是和root登陆是不一样的。另外,它们的uid也是不一样,只有euid是相同的。
sudo /bin/bash : 这个命令也会切换到root的bash下,但不能完全拥有root的所有环境变量,比如PATH,可以拥有root用户的权限。这个命令和 sudo -s 是等同的。
sudo su : 这个命令,也是登录到了root,但是并没有切换root的环境变量,比如PATH。
sudo su - : 这个命令,纯粹的切换到root环境下,可以这样理解,先是切换到了root身份,然后又以root身份执行了 su - ,这个时候跟使用root登录没有什么区别。这个结果貌似跟sudo -i 的效果是一样的,但是也有不同,sudo 只是临时拥有了root的权限,而su则是使用root账号登录了linux系统。
- sudo su - 约等于 sudo -i
- sudo -s 完全等于 sudo /bin/bash 约等于 sudo su
- sudo 终究被一个"临时权限的帽子"扣住,不能等价于纯粹的登录到系统里
相比于su切换身份须要用户的password,常常性的是须要root的password,sudo仅仅是须要自己的password,就能够以其它用户的身份来运行命令。常常是以root的身份运行命令。所以sudo相对来说安全很多,毕竟root的密码可不是随便能让人知道的。
sudo的运行有这样一个流程:
1).当用户运行sudo时,系统于/etc/sudoers文件里查找该用户是否有运行sudo的权限;
2).若用户具有可运行sudo的权限。那么让用户输入用户自己的password,注意这里输入的是用户自己的password。
3).假设password正确。变開始进行sudo后面的命令,root运行sudo是不须要输入password的,切换到的身份与运行者身份同样的时候。也不须要输入password。
区别总结:
了解完su和sudo,是不是发现sudo有太多的优点了。su方式切换是须要输入目标用户的password。而sudo仅仅须要输入自己的password,所以sudo能够保护目标用户的password不外流的。当帮root管理系统的时候,su是直接将root全部权利交给用户。而sudo能够更好分工,仅仅要配置好/etc/sudoers,这样sudo能够保护系统更安全,并且分工明白,有条不紊。
关机重启相关命令:
reboot、shutdown、poweroff、halt、init、sync
reboot
ROOT权限用户下输入reboot命令就可以看到The system is going down for reboot NOW的提示,目前就重启VPS。
reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。所以使用reboot命令的场合主要是在单用户模式。
last reboot可以查看最近一次reboot的时间
shutdown
这个命令可以用来重启也可以用来关机操作。参数相对较多,本文只介绍常用的。
shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。
该命令的一般格式: shutdown [选项] [时间] [警告信息]
k 并不真正关机而只是发出警告信息给所有用户
r 关机后立即重新启动
c 取消一个已经运行的shutdown(这个比较重要咯)
shutdown -h 2:30 ‘halt’:2点30分关机,注意以本机时间为准
shutdown –r +10:系统10分钟后关机并马上重新启动
shutdown –h now:系统马上关机(不重新启动)
shutdown -c :#取消之前的shutdown命令
该命令只能由超级用户使用
halt
是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。
halt 立刻关机
poweroff
poweroff 立刻关机
init
是所有进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动
sync
一般在关机前可手动调用。表示:将数据同步写入到磁盘
在我们执行关机、重启命令时候一般都建议先执行此命令。
exit和logout
对于Linux中的命令而言,每当其执行完成后,都会返回一个整数,这个整数就是程序退出状态(exit status),可以在shell中使用echo $?来查看上一个命令的退出状态。退出状态为0表示程序执行成功,否则执行失败。(比如我们判断上一条命令执行成功了,才继续往下执行)
在shell脚本中,可以使用exit [n]来退出当前脚本,并且指定退出码为n。若没有指定退出码,则以脚本执行的最后一条命令的退出状态作为当前脚本的退出状态,即exit $?
在命令行中,可以使用exit来退出当前shell,或者使用logout命令。
注意:
1、退出当前shell并不是关机,只是关闭了与系统的交互接口,Linux仍然正常运行。
2、logout命令在运行级别为图形界面的时候,是无效的
创建目录 mkdir
在Linux系统中,mkdir命令用来创建一个目录或一个级联目录。
-m:为目录指定访问权限,与chmod类似。
-p:如果目录已经存在**,则不会有错误提示**。若父目录不存在,将会创建父目录。该选项常用于创建级联目录。
mkdir命令不加任何选项默认在当前目录下创建目录,目录的默认权限为777。如果目录已经存在将会提示错误
一次性创建多个目录
mkdir cep dod testlog
/
可以一次性创建多个文件夹
删除目录 rmdir
rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的。
注意,rm -r dir 命令可以代替rmdir,但是很危险,万一它突然就不是空的咧?
注意:删除某目录时必须具有对父目录的写权限。
-p 递归删除目录dirname, 当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
-v --verbose 显示指令执行过程
改名了很少被使用了,一般使用更为强大的rm命令
创建文件 touch
touch 文件名
若该文件名文件已存在你,不加参数的情况下会什么都不做
拷贝 cp
这个是使用频率最多的命令,负责把一个源文件复制到目标文件(夹)下。
复制到文件夹下,则文件名保持不变,复制到文件中,则文件名变更。如果目标文件已经存在或目标文件夹中含有同名文件,则复制之后目标文件或目标文件夹中的同名文件会被覆盖。
cp 源文件1 源文件2 目标文件夹 或 cp 文件 目标文件夹*,这样可以一次性复制多个文件到目标文件夹里面
cp -r 源文件夹 目标文件夹。这个也是使用频率很高的命令,只需要记住复制文件夹一定要加“-r”参数,否则会出现“cp: omitting directory”错误。
cp -s 源文件 目标文件:也可以用ln命令实现同样的功能。当一个文件路径太深(如下述的a/b/c/d/e/orginalFile.txt),访问起来十分不方便时,就会创建这个文件的软链接,使之访问起来更方便些。软链接就相当于windows上的快捷方式。
cp -l 源文件 目标文件:也可以用ln命令实现同样的功能。有时候,为了某种原因,需要创建一个硬链接
软连接和硬链接的区别,这里不解释了。记得自己理解哦
删除文件(夹) rm
rm [选项]… 目录… 删除指定的<文件>(即解除链接)
-d --directory 删除可能仍有数据的目录 (只限超级用户)
-f --force 略过不存在的文件,不显示任何信息
-r/R --recursive 同时删除该目录下的所有目录层(一般删除文件夹带上)
rm *.rb:删除所有以.rb结尾的文件
移动文件 mv 重命名也用此命令
mv [选项] 源文件或目录 目标文件或目录
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
mv test.log test1.txt:相当于修改文件名
cat more less head tail
cat 是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况;
cat file1 file2 > file 这是它的特殊能力 cat file1 file2 表示一次性显示两个文件的内容
cat -n a.txt:-n参数,会在输出前面加上行号 效果等同于 nl a.txt
more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,
less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页。
more
+num 从第num行开始显示;
我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏;
常用命令:
Enter 向下n行 一般慢慢滚动这样用
Ctrl+f / 空格键 向下滚动一屏
Ctrl+b 返回上一屏
:f 输出文件名和当前行的行号;
集合管道符使用
比如我们列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来,比如:
ls -l /etc |more
1
more默认会显示文件百分比。而less需要加参数-m / -M
less
less几乎可以完全代替more命令,并且功能更加强大。
-M 显法读取文件的百分比、行号及总行数;
-p pattern 搜索pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile
less中的命令
Enter 向下移动一行;
y 向上移动一行;
空格键 / b 向下滚动一屏;
b 向上滚动一屏;
w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示;
g 跳到第一行;
G 跳到最后一行;
/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词;
v 调用vi编辑器;
q 退出less
head
head 是显示一个文件的内容的前多少行; 用法比较简单
head -n 行数值 文件名;
比如我们显示/etc/profile的前10行内容,应该是:
head -n 10 /etc/profile
tail(非常有用)
tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容。
tail -n 行数值 文件名;
比如我们显示/etc/profile的最后5行内容,应该是:
tail -n 5 /etc/profile
备注:最后一条命令tail非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。
-f 该参数用于监视File文件增长。(监控日志需要加上此参数) 默认显示10行
-n Number:从 Number 行位置读取指定文件。(使用较多)
tail -f -n100 README
二进制显示文件 od
od 文件名,就会以二进制显示内容。全是0和1 使用较少
重定向命令其实用得不少
> 是重定向到一个文件(会覆盖原有的内容),>>是追加内容到文件。两个命令都是如果文件不存在则创建文件。