第一个要知道的指令就是怎么样去到你想去的地方. cd (Change Directory) 就是干这个的. 找到 Linux 的 terminal 窗口, 然后他默认跳出来是在你的用户目录 (Home). Terminal 中的 ~ $ 就是说你输入指令将在 ~ 这个目录下执行. 而 ~ 这个符号代表的是你的 Home 目录. 如果在文件管理器中可视化出来, 就是下面图中那样.
Linux 基本指令 ls 和 cd
使用 cd 指令, 我们能在 Terminal 中轻松切换到不同的文件夹. 想从 Home 去 Documents 这个文件夹? 输入下面的命令就可以了.
~$ cd Documents/
接着你会看到它在下一行跳出了这个东西, 在 $ 前面的 ~/Documents 就说明你现在已经在 Documents 这个文件夹里了. 你现在要执行的命令将会在这个目录下生效.
~/Documents$
接着我们来列举另外一些常用的 cd 命令.
1 返回上一级目录
~/Documents$ cd ..
~$
2 去往子文件夹
~$ cd Documents/folder1/
~/Documents/folder1$
3 返回你刚刚所在的目录
~/Documents/folder1$ cd -
/home/morvan
~$
4 向上返回两次
~/Documents/folder1$ cd ../../
~$
5 去往 Home
~/Documents/folder1$ cd ~
~$
6 去往电脑任何地方, 你需要的是一个绝对路径
~$ cd /home/morvan/Documents/folder1
~/Documents/folder1$
我们现在能在电脑的文件中移动来移动去了, 这还没什么意思, 接着我们就来移动去一个地方, 再看看那个地方有些什么. (有种黑客在偷窥人家文件的感觉, 哈哈).
我在 Documents 目录里放了个文件夹(folder1)和文件(file1). 我们将目录导去 Documents, 然后使用 ls (list 的简写) 看看这里面的东西.
Linux 基本指令 ls 和 cd
~/Documents$ ls
file1 folder1
我们再来看看 ls 的其他使用方式.
1 输出详细信息 -l (long 的简写). 这个指令会打印出文件的权限 (-rw-rw-r-- 之后我们在细说这个), 用户名, 文件大小, 修改日期, 文件名
~/Documents$ ls -l
total 4
-rw-rw-r-- 1 morvan morvan 0 Oct 12 07:38 file1
drwxrwxr-x 2 morvan morvan 4096 Oct 12 07:26 folder1
2 -a (all 的简写) 显示所有文件 . 这里还会显示隐藏的文件 (以 . 开头的)
$ ls -a
. .. file1 folder1 .hidden_file
3 -lh (human), 直接 -l 不方便人看, 这个指令是为了方便给人观看的. 注意这里的文件大小使用了 K, MB, GB 之类概括
$ ls -lh
total 4.0K
-rw-rw-r-- 1 morvan morvan 0 Oct 12 07:38 file1
drwxrwxr-x 2 morvan morvan 4.0K Oct 12 07:26 folder1
4 还有很多其他的功能, 我们可以通过 --help 来查看
$ ls --help
touch 的使用很简单, 我们先去往 Documents 的文件夹, 里面已经有了 folder1 和 file1, 如果我们想新建一个 file2 使用下面的语句就好. 一个空文件就建立好了.
Linux 基本指令 touch, cp 和 mv
$ touch file2
如果你想同时建立多个文件, 输入多个文件的名字, 以空格分开.
$ touch file3 file4 file5
cp (copy) 是复制文件或者文件夹的指令, 常用的方式是复制 “老文件” 到 “新文件”.
$ cp 老文件 新文件
1 我们用上面建立好的 file1 来举例, 将 file1 复制成 file1copy
$ cp file1 file1copy
Linux 基本指令 touch, cp 和 mv
2 -i (interactive) 注意: 如果 file1copy 已经存在, 它将会直接覆盖已存在的 file1copy, 如果要避免直接覆盖, 我们在 cp 后面加一个选项.
$ cp -i file1 file1copy
cp: overwrite 'file1copy'?
在这句问句后面打上 “Yes”, “Y”, 或者任何大小写形式的 “y” 和 “yes”, 它将进行覆盖操作. 直接回车或者打其他字母, 就会放弃复制这项操作.
3 复制去文件夹
$ cp file1 folder1/
4 复制文件夹, 需要加上 -R (recursive)
$ cp -R folder1/ folder2/
5 复制多个文件. 复制名字部分相同的多个文件, * 是说”你就找文件前面是 file 的文件, 后面是什么名字无所谓”
$ cp file* folder2/
或者你可以单独选定几个文件, cp 会默认最后一个选项是要复制去的文件夹. 比如下面把 file1copy 和 file2 复制去 folder1/
$ cp file1copy file2 folder1/
知道了 cp, mv就好理解多了, 基本是一样的.
1 移动去另一个文件夹
$ mv file1 folder1/
2 重命名文件
因为移动文件到原始的地点, 但是以不同的文件名. 这种做法不就是在重命名嘛!
$ mv file1 file1rename
最后还是想要提一句, 如果想要查看使用说明, 直接在指令后面打上 --help 就能查看.
mkdir (make directory) 就是创建一个文件夹的意思, 使用起来很简单.
$ mkdir folder2
Linux 基本指令 mkdir, rmdir 和 rm
如果你想在这个目录给 folder2 里面再建一个文件夹也是 Ok.
$ mkdir folder2/f2
这样, f2 这个文件夹就被新建在了 folder2 里面.
rmdir (remove directory) 也就是字面意思, 移除文件夹. 不过这有一个前提条件. 这些要移除的文件夹必须是空的. 不然会失败. 所以如果想刚刚建立的那个 folder2 就不能被移除, 因为里面有个 f2 文件夹.
要移除个空文件夹, 比如我在新建一个 folder3, 然后移除
$ rmdir folder3
那文件夹里面有文件的这种情况, 或者是移除单个文件的情况, 我们都能用 rm 来实现. 注意: 执行了 rm 以后是不能进行返回操作的, 请确保别执行像这样的操作 rm /, 这会清空你的电脑.
1 移除单个文件
$ rm file1
2 -i 或 -I 有提示地移除文件 (为了避免误删)
-i 会每个要移除的文件都进行提示
-I 超过3个文件才进行提示
$ rm -i f1 f2 f3 f4
rm: remove regular empty file 'f1'?
rm: remove regular empty file 'f2'? y
rm: remove regular empty file 'f3'?
rm: remove regular empty file 'f4'? y
$ rm -I f1 f2 f3 f4
rm: remove 4 arguments? y
3 -r 或 -R (recursively) 用来删文件夹
和 rmdir 不同, rm -r 可以在文件夹中有文件的情况下删除这个文件夹. 比如我的 folder1 里有 file1 和 file2 两个文件.
$ rm -r folder1
nano 是 linux 的一款文字编辑工具. 我们可以拿它来做最基本的 terminal 端的文本编辑, 甚至可以写代码~ 下面我们用 touch 创建一个 Python 脚本. 如果大家不懂 Python 也没关系, 你就知道我们可以拿 nano 来编辑文字或者脚本就好了.
Linux 基本指令 nano 和 cat
然后用 nano 执行这个 t.py 文件.
$ nano t.py
他就会变成一个文本编辑器, 你在里面可以打上一些脚本, 比如像我这样.
Linux 基本指令 nano 和 cat
然后按 “Ctrl + x” 来保存和退出. 如果提示你保存, 你就按一下 “y” 键, 然后回车, 你的文件就被保存下来了.
接着如果你在 terminal 中输入这个, 你就能看到 terminal 执行了你的 python 文件.
$ python t.py
This is a Python script!
(写给会 Python 的朋友: Ubuntu 安装好了以后自带 Python2.7 和 Python3.5的)
cat (catenate) 可以用来显示文件内容, 或者是将某个文件里的内容写入到其他文件里. 我们举例说明.
1 查看文件内容
$ cat t.py
print("This is a Python script!")
2 > 将文件的内容放到另一个文件里
$ cat t.py > t1.py
$ cat t1.py
print("This is a Python script!")
3 > 将多个文件的内容打包一起放入另一个文件
比如这里我们把 t.py 和 t1.py 的内容同时放入了 t2.py, 如果在显示 t2.py 的时候, 它有两行 “print…”.
$ cat t.py t1.py > t2.py
$ cat t2.py
print("This is a Python script!")
print("This is a Python script!")
4 >> 将内容添加在一个文件末尾
我创建了一个 t3 的文件, 文件里写上了 “This is t3”. 我们将这个内容添加进 t2.py 吧. 使用了 >> 会将 t3 的内容添加在 t2.py 的末尾.
$ cat t3 >> t2.py
$ cat t2.py
print("This is a Python script!")
print("This is a Python script!")
This is t3.
查看文件权限的方法很简单, 其实之前我们就已经看到过这样的内容了, 如果你还记得. 我们在说 ls 指令的时候, 提到过权限问题, 不过到了这节内容我们仔细说说权限. 如果你在 Terminal 中输入图片中的指令.
Linux 文件权限
1 在 Terminal 中查看文件的权限
$ ls -l
total 16
----rw-r-- 1 morvan morvan 34 Oct 12 09:51 t1.py
-rw----r-- 1 morvan morvan 80 Oct 12 09:57 t2.py
-rw-rw-r-- 1 morvan morvan 12 Oct 12 09:56 t3
-rwxrw-r-- 1 morvan morvan 55 Oct 13 17:28 t.py
在这里, 像-rw-rw-r--这种, 就是权限的说明. 细节展示在下面的图中. 在下图中, 这串字符得拆成4个部分,
Linux 文件权限
Type: 很多种 (最常见的是 - 为文件, d 为文件夹, 其他的还有l, n … 这种东西, 真正自己遇到了, 网上再搜就好, 一次性说太多记不住的).
User: 后面跟着的三个空是使用 User 的身份能对这个做什么处理 (r 能读; w 能写; x 能执行; - 不能完成某个操作).
Group: 一个 Group 里可能有一个或多个 user, 这些权限的样式和 User 一样.
Others: 除了 User 和 Group 以外人的权限.
如果有朋友对 User, group, others 这几个没什么概念的话, 我这里补充一下. User 一般就是指你, 这个正在使用电脑的人. Group 是一个 User 的集合, 最开始创建新 User 的时候, 他也为这个 User 创建了一个和 User 一样名字的 Group, 这个新 Group 里只有这个 User. 一般来说, 像一个企业部门的电脑, 都可以放在一个 Group 里, 分享了一些共享文件和权限. Others 就是除了上面提到的 User 和 Group 以外的人.
好了, 有了这些理解, 我们拿上面的 t1.py 来举例. 我们可以将 ----rw-r-- 拆成 - (这是文件), ---(这个 user 没有任何权限), rw- (这个 Group 里可以读,写), r-- (其他人只能读).
Linux 文件权限
如果我双击这个 t1.py 上面就弹出这个说我们权限的窗口.
好了, 我们知道了这些权限的问题, 那我们如何改写权限呢? chmod (change mode) 就是来干这个的.
通常的修改形式是
$ chmod [谁][怎么修改] [哪个文件]
举个最简单的例子, 现在的 t1.py 是 ----rw-r--, 如果我们想让你(user)有读的能力. 下面这样改就行了.
$ chmod u+r t1.py
$ ls -l
-r--rw-r-- 1 morvan morvan 34 Oct 12 09:51 t1.py
这里的 u+r 很形象, User + read, 给 t1.py 这个修改. 所以我们的修改形式就能总结出下面这样.
[谁]
u: 对于 User 修改
g: 对于 Group 修改
o: 对于 Others 修改
a: (all) 对于所有人修改
[怎么修改]
+, -, =: 作用的形式, 加上, 减掉, 等于某些权限
r, w, x 或者多个权限一起, 比如 rx
[哪个文件]
施加操作的文件, 可以为多个
我们再举几个例, 巩固一下.
-rw----r-- 1 morvan morvan 80 Oct 12 09:57 t2.py
-rw-rw-r-- 1 morvan morvan 12 Oct 12 09:56 t3
-rwxrw-r-- 1 morvan morvan 55 Oct 13 17:28 t.py
$ chmod u-r t2.py
$ ls -l t2.py
--w----r-- 1 morvan morvan 80 Oct 12 09:57 t2.py
$ chmod g+x-w t3
$ ls -l t3
--w-r-xr-- 1 morvan morvan 12 Oct 12 09:56 t3
除了上面这些修改形式, 还有一些简化版的形式, 不过我觉得不天天用权限这东西, 了解上面就够了. 如果你想更深的了解, 网上搜搜 “linux 权限 数字表示” 对你会有帮助.
我不怎么用权限这东西, 但是我却发现给 python 文件添加权限 x 还算有用的. 为什么这么说? 因为通常, 如果一个 .py 没有 x 权限, 在 terminal 中你就需要这样执行:
$ python3 t.py
This is a Python script!
如果你有了 x (可执行权限), 你运行这个文件可以直接这样打:
$ ./t.py
This is a Python script!
如果你天天要运行这个脚本, 每次运行的时候少几个字还是挺好的. 如果你决定要这样做, 你在这个 Python 脚本的开头还需要加一句话.
#!/usr/bin/python3 # 这句话是为了告诉你的电脑执行这个文件的时候用什么来加载
print("This is a Python script!")
为了实现 SSH 功能, 你得确定你的 Linux 上有安装了 SSH 服务, 通常可能是没有安装的. 所以我们将要安装一个开源的 SSH 工具, 叫做 OpenSSH, 将你的 Linux 变成一个服务器 (就是像你访问网站一样访问你的 Linux). 在 Linux 上打开你的 Terminal, 然后输入下面这句话安装 openssh-server. sudo 是使用管理员权限的意思, 所以回车后它可能要求你输入你用户密码.
$ sudo apt-get install openssh-server
如果你之前没有安装过, terminal 会提示你将要有多少东西被安装, 需要你确认. 确认完了以后, 它将会帮你继续安装.
现在你的 Linux 是一个可以被 SSH 登录的状态了. 我们先从 MacOS 或者是你另一台 Linux 远程这台 Linux 开始. 因为 MacOS 和 Linux 都是类似的系统, 所以操作起来比 Windows 简单.
我有 Mac, 所以使用 Mac 来 demo 具体操作, 这个操作和你用 Linux 操作 SSH 是一样的. 你只需要打开 Mac 上的 Terminal. 然后输入:
$ ssh [要控制的用户名]@[它的IP地址]
举个例子, 我要用 mac 来操控的 Linux 的用户名叫做 morvan, morvan 这台 linux 的 ip 地址可以这样获取. 首先, 回到要控制的 Linux 上, 确保你操控和被操控的两台电脑连接上了同一个路由器. 然后在你 被操控 电脑的 terminal 上输入这个获取 被操控 电脑的 ip 号码.
$ ifconfig
如果它提示你没有安装 ifconfig, 你就按它的要求安装就好. 输入下面指令就能安装.
$ sudo apt install net-tools
确保 ifconfig 能用后, 输入 ifconfig, 接着找到以 inet 开头的字样, 这就是你在这个路由下的 ip 地址了. 比如我现在的 ip 是 192.168.0.114
inet addr:192.168.0.114
找好了 ip (192.168.0.114), 知道你被操控电脑的用户名 (morvan), 现在回到操控电脑的 terminal (我的 Mac). 在 terminal 中输入之前提到的 ssh 开头的命令. 然后它就会要求你输入被操控的 Linux 的用户密码. 很显然, 只有知道密码的人才能登陆你的 Linux, 不然就太容易被黑了.
$ ssh morvan@192.168.0.114
morvan@192.168.0.114's password:
有可能你在尝试这样直接 ssh 的方式失败. 像我, 刚从16版的 Ubuntu 升级到 17 版, 我的 Mac 由于某些原因不让我 ssh 去 17 版的 Ubuntu, 显示了下面的报错, 后来查了一下, 找到了一个解决方式.
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
……..
ERROR: ECDSA host key for 192.168.0.114 has changed and you have requested strict checking.
ERROR: Host key verification failed.
如果你也看到上面这种报错, 直接在你的电脑上 (我的 Mac 上) 的 terminal 运行下面这个:
$ ssh-keygen -R 要 ssh 去的 ip 比如下面这样
$ ssh-keygen -R 192.168.0.114
恢复正常后, 接着再按上面的步骤 ssh 去 Ubuntu. 输入, 确认密码后, 你在操控电脑的 terminal 就会瞬间变成被操控电脑的 terminal 啦. 他会显示这样一些信息证明你登录成功. 现在你就能自由的运用之前所学的 Linux 的指令, 在你的电脑上远程操控 Linux 电脑啦.
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)
*** Documentation: https://help.ubuntu.com**
*** Management: https://landscape.canonical.com**
*** Support: https://ubuntu.com/advantage**
147 packages can be updated.
53 updates are security updates.
Last login: Sun Oct 15 00:21:56 2017 from 192.168.0.104
morvan@morvan-Latitude-E5550:~$
不过你还可以更进一步, 现在你每 SSH 登录一次 Linux, 都需要输入密码, 如果你登录次数很频繁, 而却你的密码又设置得很长, 这就非常麻烦. 还好, 我们可以通过提前设置一个”保密协议”, 来让你的 Linux 识别出哪些电脑能不用密码登录. 这就是 public/private rsa key.
我们将在 Mac 或者 Linux (控制电脑) 上生成一个 public/private keypair (公钥和私钥), 然后将公钥(public key) 复制到要被远程的 Linux 上. 这样当你有私钥的控制电脑要远程操控这台有公钥的 Linux, 他会帮你识别配对的. 就不用每次都要输入被远程的电脑密码了.
所以首先我们还是用我的 Mac demo, 在 mac 的 Terminal 上输入指令 ssh-keygen 创建公钥和私钥, 它会提示你要保存这些锁的地方. 我们就用它默认的地方比较好. 所以回车确定.
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/MorvanZhou/.ssh/id_rsa):
确定后, 它会弹出下面这个, 要你来确定你是否想要一个保障密码, 如果你确定你的局域网是安全的, 这个都可以不填. 我就不填, 所以我直接回车.
Enter passphrase (empty for no passphrase):
然后它会要求你再次确认, 回车
Enter same passphrase again:
最后, 它会显示类似于这样的东西告诉你, 你的锁都已经生成好了.
Your identification has been saved in /Users/MorvanZhou/.ssh/id_rsa.
Your public key has been saved in /Users/MorvanZhou/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yVr3PAPmxVO1lBd7KvqBsBCZSE8mdYce8mjBiUfRDVE MorvanZhou@Morvan
The key's randomart image is:
+---[RSA 2048]----+
| o=*++*E o+|
| ..**++.. .o+|
| ..=* . .oo|
| ooo. . . ..|
| .. S + = . |
| + * B o |
| . . + * |
| . + |
| . |
+----[SHA256]-----+
接着, 我们就要将这个生成好的 “公钥” 给复制去你的 被控制的 Linux. 指令结构还是和上面一样.
$ ssh-copy-id [被控制的用户名]@[它的ip]
我被控制的 Linux 用户叫 morvan, 他的 IP, 我通过了上面描述的方式找到了. 所以我就输入下面这样. 回车后他会要求你输入一次 被控制端电脑的密码.
$ ssh-copy-id morvan@192.168.0.114
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/MorvanZhou/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
morvan@192.168.0.114's password:
密码正确后, 它将输出, 并告诉你的怎么用 ssh 登录被控制端的电脑.
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'morvan@192.168.0.114'"
and check to make sure that only the key(s) you wanted were added.
最后, 我们开开心心地在 Mac/Linux ssh 被控制的电脑吧~ 这次登录的时候没有被要求输入任何密码~
$ ssh morvan@192.168.0.114
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)
*** Documentation: https://help.ubuntu.com**
*** Management: https://landscape.canonical.com**
*** Support: https://ubuntu.com/advantage**
147 packages can be updated.
53 updates are security updates.
Last login: Mon Oct 16 08:36:26 2017 from 192.168.0.111
下一节内容, 我们来看看如何在 Windows 上实现这个 ssh 功能.
手机扫一扫
移动阅读更方便
你可能感兴趣的文章