1. Linux Terminal 简介
类似于windows的shell/cmd,linux的terminal可以做很多很多事。
1.1 字体颜色修改
Terminal的font,size, color甚至cursor都是可以根据个人喜好做修改 ,只需要右击点profile-profile preferences就可以修改了
在最左边可以看到terminal的图标,如果需要固定,右键选择”unlockfrom launcher”即可
1.2 常用基本命令
打开terminal后首先看到的是我们之前设定的username@hostName想要查看当前目录位置,可以输入 pwd回车 [print working directory]
快捷键ls 可以list该目录下的文件夹和文件
快捷键 ls -l 会列出该目录下的文件文件夹的详细信息
快捷键 ls -a 会列出该目录下所有文件(包括隐藏文件),隐藏文件在linux中也叫dot file/’.’ File [对应windows cmd下的h属性]//.file 没有意外不要去修改嗯
上面的-l和-a可以联合起来使用,在terminal里输入ls-la回车,列出的就是所有的文件文件夹的详细内容
尝试了基本的命令后,屏幕还是有点messy的,清理屏幕的话可以直接输入clear回车,就会回到最初状态了
通过terminal阅读文本文件,可以通过输入cat + 路径来实现。
比如在桌面新建文本命名为text, 打开后输入文本内容并保存。
在terminal中输入catDesktop/text 回车,可以看到文本内容显示在了terminal上
2. 浏览和使用linux上的文件
2.1新建, 移除, 复制文件和目录
在terminal里,cd是change directory, cd 加文件夹名可以进入文件夹[和windows的shell一样]
回到上层目录只需输入cd .. 即可[同windows]
如果在terminal里想回到home,直接输入cd回车即可
新建目录:mkdir 加文件名
移除目录:rmdir 加文件名 【只在目录里面没有文件时可用】
新建文件:touch 加文件名 【如果已经有了同名的文件则不会新建】
移除文件:rm 加文件名
当前目录复制文件:cp 复制的文件名 复制后的文件名
移动文件:mv 文件名 目标目录【移动到其他目录】,mv 文件名 新文件名【当前目录下重命名】
3. 查找和比较文档
查找文档中关键词:
我们有一个文本文档,需要搜索文档里匹配的字段,这时候可以用grep 关键词
来到需要搜索的文档的目录下,输入 grep 搜索字段名 搜索文件名 再回车即可
比较两个文档:
在文档所在目录下 输入diff文档1名 文档2名 回车即可
- 修改密码 输入关键字passwd回车 会提示先输入原密码,再进行修改
- 变量赋值 变量名=变量值[等号左右没有空格]
- 关键词 echo 加文字内容,表示显示echo后面的内容;echo$变量名 表示显示变量
- 关键词 info 加命令词 会给出该关键词的信息
- 点击键盘上下键可以迅速回顾之前已经输入的命令
4. 将terminal显示的结果保存到文件
有时候我们想保存在terminal显示的信息,可以在正常输入的命令后面加 ‘>’ 再加希望命名的文件名即可,’>’ 不仅可以创建一个新文档(如果路径下没有输入的文件名),也可以重写一个文档 (如果路径下已经存在同名的文档)
如果想在原文档后面加上新的内容,将’>’改为’>>’即可
5. 文件权限
以下面路径的文件为例,每一行前面的内容即文件的权限
第一个字符如果是’-’, 代表这是一个文件;第一个字符如果是’d’,代表这是一个目录
r.w.x read, write, execute
可以看到每个文件文档前面是有三组3个字符的权限的,第一组是针对文件所有者的权限,第二组是针对整个小组的权限,第三个是针对其他用户给的权限
U – user, g – group, o – other people
修改权限可以使用chmod 加希望修改权限的组+ 修改的权限符号 加希望修改的文件名
对应这些权限,有一个偷懒的方法:
4 – read
2 – write
1 – execute
0 – no permission
7 – combining all the numbers
如
Chmod 777 test 表示给user,group和other读写加执行的权限
6. 使用checksum确认文件
每当我们下载一个文件,会对应一串SHA-1来确保这个文件是我们所下载的没有问题的。
如我们下载raspberry pi下面的NOOBSLITE文件,可以看到网页提供给我们一个SHA-1, 这时候我们可以在terminal进入下载目录,输入shalsum加文件名 回车,会看到出来一串的字母和数字 ,如果这串信息和网页提供给我们的SHA-1一致,那么这个文件就是我们下载的正确的文件。
比较这两串数字可以直接在terminal比较,在上一个命令下加入| grep 加网页中的字符串 回车,如果说结果是红色,表示这两个字符串内容一致
如果说担心网页上提供的SHA-1是篡改过的,希望可以更加保险的话,可以换一个网络或者问问其他人得到的是否也是同样的字符串
7. 压缩和解压缩tar, gz文件
压缩文件: 关键词gzip 文件名 [注: 文件名如果有空格的,需要在空格前面加一个’\’,在terminal里,默认空格后面出现的是一个命令]
解压缩文件:关键词gunzip 文件名.gz
压缩不止一个文件:tar cvf 文件名.tar加上所有需要压缩的文件名
[c 创建, v 终端显示结果,f file选项]
解压缩tar文件:tarxvf 文件名.tar [x: extract解压缩]
8. User:
Super user可以用root来管理,但root权限运用可能操作不当引起不必要麻烦,所以慎用。除了root我们可以用sudo(super user do)
管理用户
我们可以新建一个文档在桌面,-la查看发现naomi出现两次,这是因为主用户是naomi,当有主用户时,系统会自动给主用户划分到组里,这个组的组名同主用户名
加入一个user
关键词:sudo useradd 新用户名 回车,系统提示输入super user的密码,输入后给新用户创建密码:sudopasswd 新用户名 即可
修改密码
输入passwd回车 按照提示修改即可
9. 使用APT apt-get 安装软件
在terminal里可以通过关键词来安装更新软件
如:输入sudo apt-get update ,会自动帮我们下载更新软件[sudo: super user do ]
如果想在terminal看是否安装某个软件,可以这样查看
比如查看java: 输入java-version回车得到如下结果
可以看到已经安装好了java
如果没有安装php5:
输入php5 -version 可以看到下面提示没有安装, 可以通过sudo apt-get install php5-cli进行安装
如果下载了软件但是由于比如文件太多不知道该如何安装,可以先cd进入home目录,cd安装包名/bin 回车,输入ls回车。 我们可以看到.sh结尾的文件,.sh指shell script, 是可以从terminal直接运行安装的,可以通过关键词bash加文件名回车直接运行
tips: 在ubuntu上安装中文输入法
输入sudo apt-get install ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 安装,然后im-config -s ibus来启动ibus
在ibus里可以选择中文的拼音或五笔等输入法
10. Group
Group可以很方便的给一个组/多人设置权限
新建group:sudo groupdadd 组名
给组加入组员: sudo usermod -a -G 组名 组员//-g和-G区别在于 每个组员都属于组员组,如果是-G,这个组员会被加入到一个新的组,如果是-g,组员则会先从原本的组剔除,再加入新的组
删除组员:sudo userdel 组员
在terminal输入cd../.. 可以退回两层或者回到最外层目录,回去后输入ls可以看到,下图中的etc即我们的配置文件configuration files ,进入到etc目录,列出所有文件可以看到所有的密码都在这个目录下 ,但是cat所有的password只会看见密码都是x,因为linux会给所有的密码做加密,我们不会真的看到密码,X表示密码保存在shadow文件里。如果想查看shadow,就会出现拒绝访问:
如果行驶sudo权限查看密码,会看到:
这里面的’*’表示这个密码并非登陆访问密码
其他的密码可以看到也是加了密的
通常我们不需要去了解这些幕后的信息,也不要去扰乱这些信息,linux已经给我们创造了一个相对安全的环境
11. 设置和链接SSH server [以Digital Ocean为例]
这可以让我们和其他地方的服务器取得联系,也可以让我们更好管理自己的网站
直接使用纯文本密码来连接服务器是很容易被破解的,但是如果用SSH,基本就很难破解了。
在此我们是用的Digital Ocean的VPS,如果有更好的其他的选择欢分享。关于如何选择和使用,可参考DigitalOcean的tutorial。Digital Ocean的服务器叫droplet,注册登陆后两小时内会有账号确认邮件,确认后就可以创建自己的droplet了,可以根据自己需要选择服务器,DO是收费的,可以选择其他的VPS也欢迎交流。
我这边是根据自己的简单需要选择了最基本的,确认信息后就开始创建了,创建OK会收到确认邮件,包括IP地址和密码等信息。
现在,我们打开terminal,输入ssh root@192.241.200.215 root是我们现在用的username,@后面是邮件里收到的IP地址,这一步骤就是我们以root的身份去登陆提供的IP。回车后收到下面信息,选择继续。
根据提示重设密码,设置成功登陆到服务器,进行操作看到的东西就是服务器上的了。
12. SSH KEY权限
一直以来密码验证总是很容易被破解的,而SSH key就安全多了
我们需要有两个key,一个是privatekey,用于我们的个人电脑,另一个是public key,在服务器上,每当这两个key通过一个formula转换后相匹配,就work了。
首先,我们要生成这两个key,这时候不需要登陆服务器,打开terminal,
输入ssh-keygen -t rsa 回车,出来自动生成key的提示并给出默认的保存key的路径,不需要修改路径,直接回车即可。如果想给文件加密可以设置密码,回车确认。
看到下面圈出来的部分,黄色部分是生成的private key,蓝色是publickey
保存key的信息可以输入ssh-copy-idroot@ip地址 回车,根据提示输入密码后,提示已经将key信息添加
现在我们重新打开terminal后再次登陆server,可以看到,已经不需要再输入密码信息了,电脑上的private key可以让我们直接登陆到server了,既方便又很安全。
13. 关闭密码登陆
在terminal里登录服务器,然后输入nano/etc/ssh/sshd_config 回车,看到一串的配置文件,向下找到PermitRootLogin看到显示是Yes,在此我们将yes改为without-password,按住ctrl+x,选择Y, 然后回车保存,接着一行输入reload ssh回车,这样我们做的更改就生效了。
现在我们登陆就方便了,即使其他人知道我们的密码也没有办法,因为key是在我们电脑上的,所以非常安全。
14. 使用SFTP向服务器传输文件
首先在桌面创建了一个网页文件和包含网页的目录文件,做文件上传用。
SFTP类似FTP,不过是用ssh来传输的。
打开terminal,输入sftproot@服务器地址 回车,连接上服务器
为了确保我们在服务器的root目录,输入cd../.. 回车,然后输入ls -la回车,我们可以看到里面有很多的文件,这里我们上传的是一个html文件,为了进入html保存路径,输入cdvar/www/html回车,上传html文件直接在html目录下输入putDesktop/html文件名 回车,可以看到文件已上传,刷新服务器页面可以看到我们上传的页面,如果要上传一个文件夹,同样在html目录下输入put-r Desktop/文件夹名 回车,然后我们在服务器页面地址后面加上/文件夹名就可以看到文件了。
接下来我们尝试从服务器下载文件到桌面,以刚上传的页面和文件夹为例,(先删掉桌面上的html文件和目录),在服务器html目录下输入get页面文件名 Desktop 回车,即可将服务器上的网页下载到电脑桌面上,如果想下载目录,可以先cd ..回到上一层目录,接着输入get-r html Desktop, 即将html整个目录下的所有文件和文件夹都下载到桌面上来,至此我们就通过sftp完成了从服务器的上传和下载。
15. 利用GParted和U盘来分区
关于分区,有一个是用工具GParted, 获取工具的方法,在terminal输入sudoapt-get install gparted 回车,gparted就开始下载了,下载完成后运行只需要输入sudo gparted回车即可。运行后会跳出Gparted, 我这里插入了自己的移动硬盘,点击右上角可以看到Linux对空间的命名方式不同于Windows(C:/D:/E:/), ta是以sda, sdb 来命名的,而下面的partition里,sda下面的区域又分为了sda1,sda2 …
我们可以用一个U盘来更好的理解,我这里用的是空白U盘。每当我们要分出一个区来的时候,首先要设一定的空间,当设定好这部分空间了(比如8GB),接着我们要设置这部分的系统文件,即确定好这部分区域的构架。
在GParted最上面View的下拉菜单File System Support可以看到一串的system support信息,ext3是linux常用的,如果想给自己的U盘设立好filesystem且和不同操作系统都兼容,fat32, ntfs是比较好的选择,市面上大部分的盘也都是fat32,ntfs就是了。
选择想要查看的磁盘,点击view-device information可以看到磁盘基本信息,比如我的U盘filesystem就是FAT32,选中U盘,点击partition-information也可以看到U盘的基本信息。在删除U盘或者分区前,我们需要先unmount [partition-unmount],相当于先解除这块区域的锁定,接着我们就可以delete了。Delete完后U盘就变成了unallocated,点击上面的勾选项,确认,现在我们的U盘就是一块未分配的区域了。
这里我们将U盘分为两个区域,分之前先创建分区表[device-create partition table], 选择默认的msdos即可,确认。接下来我们就可以来新建分区了,新建分区可以点partition-new也可以直接点击左上角的加号键,输入你希望的区域大小,选择希望的system file类型并命名区域,确认,这样一个新的区就分好了。
可以看到我们的硬盘是sda, U盘是sdb,U盘分区是sdb1, sdb2 当然有更多区也会出现sdb3等。虽然sdb1,2是一个U盘的,但在电脑看来他们是不同的区,可见这是一个很好的让我们分开文件摆放管理的工具。
16. Shell script简介
在文档前面输入#!/bin/sh,这一行会告诉计算机,文件打开运行需要在shell里。[#后面的内容是注释部分]
我们在文档里写上简单的命令,保存好在桌面。
接下来运行文件,打开terminal,进入桌面目录,可以看到刚刚写的文档在桌面目录下,现在运行刚刚写的小代码,输入bash文件名回车,即可看到,小代码里的命令已经执行,列出了文件下的文件和目录。
shell很方便也很强大,挖个坑以后再填好了。
17. Processes
在terminal里输入ps回车,会看到所有的进程列表
输入ps ax回车,会看到不仅现在运行中的进程,还包括所有在后台的进程
运行中的进程可以看到有属性PID即进程ID,TTY告诉我们某个程序运行的终端,TIME是指一个程序占用的CPU时间,CMD即command。
我们运行的ls, ps等其实都是小的程序,当执行完命令,程序也就结束了。而输入xlogo这个命令,我们看到屏幕上跳出来一个框,当框在的时候我们就没法输入新的命令,当我们关闭xlogo框的时候,我们就又可以输入新的命令来控制terminal了。
所以说,每当我们通过terminal来控制的时候,只会有一个process,只有当当前的process结束了,我们才可以进行下一个。 然而很多时候当我们在进行一个process的时候特别是在这个process很耗时的时候我们不会愿意就一直等着process一点一点完成,会希望ta在后台默默进行,这样至少我们自己可以去做其他事情,而不是花那么多时间等当前进程结束。以xlogo为例,我们在运行xlogo后,可以点红叉关闭框框,或者我们可以在terminal按住ctrl和c,这个步骤即通过command line来打扰并停止当前进程;如果我们希望ta可以在后台默默进行的时候,我们可以输入 程序 & 回车,下图可以看到我们的xlogo是在运行的,同时我们可以在terminal输入新的命令。输入ps后可以看到xlogo是在运行的,PID即我们在让xlogo在后台时出现的id代码,前面的[1]是这个进程的job number。
如果我们不记得运行的程序的job number,可以在terminal直接输入jobs回车,如下图,可以看到xlogo正在运行。如果我们需要关闭这个进程,这时候ctrl加c就不管用了,因为ctrl加c只适用于正在前台运行的程序,而对于后台程序,我们需要先将其移到前面来,再关闭。输入fg%1回车即可以将job number为1的程序从后台调到前台,接着我们再ctrl加c就可以关闭程序了。
如果我们想要暂停或者停止一个程序,按住ctrl加z,terminal就会显示程序stopped的状态,在这种状态下,我们没法直接关闭程序,即使鼠标点击xlogo上面的红色叉也不行,这是因为在stopped状态下所有对该程序的操作都被暂停了,如果需要进行操作,我们只能先将其从后台调到前台,调回来后发现程序自动关闭了,原因是我们在stopped状态下点击了关闭按钮,当frozen状态结束后程序对我们的关闭操作有了反应即自动关闭程序。
还有一个关闭后台程序的方法是使用kill命令,当程序在后台的时候,输入kill加PID回车即可。
如果我们想停止/冻结一个正在后台的程序,可以输入kill-STOP PID回车即可。
如果我们想恢复一个已经停止/冻结的程序,输入kill-CONT PID回车即可。
以上为Linux简单小入门(如果算的话),Linux的terminal有太多功能,还得继续加油学习才行。
若有疑问或意见,欢迎提出和讨论。
References:
Linux tutorial: https://www.youtube.com/watch?v=HjuHHI60s44&list=PL6gx4Cwl9DGCkg2uj3PxUWhMDuTw3VKjM&index=1
Digital Ocean Tutorial:
FTP, SFTP, FTPS Differences
https://southrivertech.com/whats-difference-ftp-sftp-ftps/
Shell script:
https://en.wikipedia.org/wiki/Shell_script
Raspberry NOOBS:
https://www.raspberrypi.org/downloads/noobs/