Linux 入门教程

教程 Jim ⋅ 于 2016-12-15 13:57:49 ⋅ 最后回复由 Jim 2016-12-15 15:00:10 ⋅ 106 阅读

文中的链接大多数是国外的(你懂的),请使用相应工具,如果实在没有,请自行百度相关内容(自行甄别)
本帖的目的是为了理解 linux 以及学会简单的操作方法,需要快速搭建环境的请出门右拐

背景

https://zh.wikipedia.org/wiki/Linux 空了把 Wiki 读一下即可。

我们主要把 Linux 用于服务端程序的运行环境,通常这个环境都是字符界面的,以下都是基于 CLI 环境的,系统为 Ubuntu 14.04 64bit LTS server。

登录到远程服务器

使用 ssh 登录到远程的 Linux 服务,需要以下几步:

  • 若你的机器是 Windows 系统,下载 PuTTY,http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  • 知道远程 Linux 的公网 IP 和 ssh 端口号,及这台机器上一个用户名及密码
  • Windows 用 PuTTY,就直接填上相应的信息即可
  • Mac 及 Linux 系统,打开终端(Terminal),输入ssh -p [ssh-port] username@ip,回车
  • 接下来可能会问你是否要把远程 Linux 服务器的信息存在你的机器上,打 yes(反正你不可能打 no)
  • 输入你登录这台机器的帐号的密码

每次 ssh 登录要输入密码很麻烦怎么破?(本机是 Windows 的略过这一节)——用证书登录。

首先要生成 ssh 证书:

ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ""

将本机的证书传到远程 Linux 服务器上:

ssh-copy-id username@ip

一般 ssh 使用的是 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 两个文件进行登录,少一个都不行

装软件

apt-get update 更新软件源信息,通常偶尔(半年一次都行)更新一下就可以了;

apt-get install -y tmux wget 安装 tmux 和 wget 两个软件,-y 的意思是,不要问我是不是要安装反正就是装;

apt-get 还有一堆命令,但是通常,你会用到的只有 install,因为没事不会想卸载什么东西。

源是可以换的,通常只有当前的源出问题(比如 apt-get update 报错)时才需要更换,想换可以自行 Google。

tmux

ssh 登录到服务器后,如果网忽然断掉了,下次重新登录上去,会发现之前自己做的事情被中断了。

这时可以在服务器上开一个 tmux,在 tmux 中的工作,即使 ssh 连接断开了,你下次连上去,还是能回到之前的 session 中。

首先 ssh 到服务器上,输入 tmux ls,看看当前用户下,有没有曾经打开过的 tmux session;

如果有 session,会显示一个列表,第一列是 session index,要回到这个 session,直接输入tmux a -t index

如果没有 session,直接输入tmux创建一个新的 session,注意:没事就不要在 tmux 的 session 里开 tmux,会「盗梦空间」,比较混乱,别这么玩。

进入 tmux 的 session 后发现下面有一行绿色的东西,那是你的标签栏,相当于 chrome 最顶上面的标签栏,这意味着你可以在一个 session 里开很多个标签页面,就像 chrome 一样,只不过你需要使用快捷键;

tmux 的常用快捷键,都是 ctrl+b 开始的,先按 ctrl+b,再按 c(注意:同时按下这三个键是没用的),可以创建一个新的标签页面;

更多常用的快捷键如下(不用 Google 了):

  • ctrl+b x 强行关闭当前的标签页

  • ctrl+b n 切换到下一个标签页

  • ctrl+b p 切换到上一个标签页

  • ctrl+b [index] 切换到第 index 个标签页

  • ctrl+b ' 输入一个标签页的数字进行切换

  • ctrl+b , 重命名当前的标签页

  • ctrl+b $ 重命名当前的 session

  • ctrl+b d 退出当前的 session,session 不会被杀死

使用tmux a可以快速的回到上一次使用的 session;

完全关闭一个 session (通常没有这种需求)tmux kill-session -t index

如果服务器关机了,tmux 的 session 也会被关闭,并且在启动时无法恢复(也许有恢复的办法?)。

用户

用户:包含两个字段,用户名和密码,其权限可以认为有两种:root 用户和普通用户。root 用户是超级用户,可以做各种事情,普通用户做某些操作时,系统会告诉你「Permission denied」你没有权限。

用户组:可以简单的理解为划分用户的权限;例如,如果普通用户 a 的用户组是 sudo,则 a 可以「暂时提权」为 root 用户,举例:

用户 a 希望在 /root 目录下创建一个文件touch /root/a.txt,会得到系统报错touch: cannot touch ‘/root/a.txt’: Permission denied

a 使用 sudo 执行sudo touch /root/a.txt,在输入了用户 a 的密码后,文件创建成功。

一般为避免麻烦,我们都用 root 用户,从普通用户登录为 root 用户,使用sudo -i命令。

文件

在 CLI 环境下,使用文件路径来标识文件或文件夹,如 /etc/bash.bashrc;

路径分为两种,相对路径./.ssh和绝对路径/etc/bash.bashrc

绝对路径,以根目录的/开头,把/删掉,整个系统会 crash 掉;

相对路径中,./表示「当前」路径,「当前」的意思是指:执行命令相对的位置或者程序运行的位置,可以使用pwd查看当前路径的完整路径;

相对路径中,../表示「当前」路径的父级,可以叠加起来用如:../../表示当前路径的爷爷级路径;

mkdir pathToDirName 创建文件夹;

rm -rf pathToDirName/FileName 删除文件夹或文件;

touch pathToFileName 如果这个文件不存在,则创建一个空白文件;如果文件存在,则更新文件的修改时间;

cd pathToDirName 设置「当前」路劲,或者可以理解为,到哪某个文件夹里去;

cd 回到当用户的 home 目录去;

ls 列出当前目录里的东西;

ls -alh 列出当前目录里所有的东西(包括隐藏的文件和目录);

cp -r pathOrFileA pathOrFileB 把文件或目录拷贝到另一个地方;

mv pathOrFileA pathOrFileB 把文件或目录移动到另一个地方,或者重命名;

Linux 文件权限看这个即可,http://linuxcommand.org/lts0070.php ,一定要看!

chmod +x pathToFileName 使一个文件获得执行权限,例如,你编译了一个可执行文件,则需要用刚才的命令给它赋予「可执行权限」;

pathToBinName 运行一个可执行文件,例如./binSayHi

管道

ls 这个命令会输出一些内容到标准输出;

vim 这个软件,可以对文本内容进行编辑;

|可以将标准输出作为标准输入传给下一个命令,例如,ls | vim -

  • ls列出了当前目录的文件和目录
  • |ls产生的内容传给vim
  • vim 后面的-意思是read text from stdin
  • 于是,就可以在 vim 中查看ls输出的结果了
  • 这就是|的作用

grep

用于搜索内容。

用法1,grep -rn "hello" ./查找当前路径下(会递归的搜索所有子目录)所有文件内容中含有hello的文件;

用法2,grep 其他命令的输出结果,例如ls | grep .h,只看当前文件中所有文件名或目录名里还有.h的文件或目录;

根据文件名,递归的找文件:find ./ | grep -i fileName-i对大小写不敏感;

log

log 一般都放在 /var/log 下面;

log 文件一般可以用 vim 直接打开来看;

如果 log 文件体积太大,可以用tail -n 1000,看最末尾的1000行 log,结合管道tail -n 1000 | vim -比较方便;

man

如果你想知道某个命令的可执行文件放在系统的什么地方,可以用type mv来查看;

如果你想知道一个命令应该怎么使用,可以使用以下方式获得:

方法1,man mv,会打开mv这个软件的文档给你查看,这个查看器的操作和 vim 很像,所以你可以认为自己在使用 vim 查看文档,于是:

  • 你可以键入/xxx在文档中搜索xxx
  • 使用ctrl+nctrl+N在搜索结果中上下跳转

方法2,git --helpgit status --help,快速的查看某个 flag 的文档或全部的文档

PATH

PATH 是个系统的环境变量,在 Ubuntu 上,一般 PATH 的值为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

PATH 的值是一堆用:连接起来的绝对路径,他们表示,系统将会在这些地方寻找可执行文件,然后提供给你一个快捷的「短命令」,比如:

  • mv 这个命令,实际的可执行文件放在/bin/mv
  • 由于/bin在 PATH 里,所以你可以直接使用mv,而不用键入完整的/bin/mv

进程

创建一个进程:运行一个可执行文件,就可能会在系统中创建若干进程;

ps aux 查看系统中所有的进程,结果太多了,不常用;

ps aux | grep xxx 查看进程信息中带有 xxx 的所有进程,常用,可以将 xxx 换成 binName,只看某一类可执行文件的进程,第一列是进程 processId;

kill processId 用进程 id,杀死一个进程,进程会得到一个要求它中断的新号,它可以自行处理一些要释放的资源;

kill -9 processId 强制杀死一个进程,不给它释放资源的机会;

killAll binName 杀死可执行文件是 binName 的所有相关进程;

syscall

针对系统编程,有以下几种模式:

方法1,bash:可以使用已有的内建命令和各种其他人开发好的程序,例如 cd,ls,wget 等等,使用 bash 进行开发,如:

#!/bin/bash
cd ~
echo ok

bash 是个编程语言,有分支循环变量等等这些设定,但是由于其语法过于古怪且要记忆的点太多,强烈不推荐使用,请尽量使用 Golang(当前使用的语言) 进行开发;

方法2,利用系统的 C 接口直接做事情,头文件在/usr/include

本帖已被设为精华帖!
本帖由 Jim 于 1月前 置顶
回复数量: 2
  • 琴歌 MOD 逍遥一世之上,睥睨天地之间。
    2016-12-15 14:56:20

    非常好,不过对于新手来说推荐使用xshell工具

  • Jim MOD
    2016-12-15 15:00:10

    不推荐使用工具,自己搭一遍会加深理解

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles: ~~
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter