UNIX 入门小教程

作为一名 iOS 老司机,要想工作效率高,Unix 则是必须要熟悉的.今天扒一扒 Unix 的那些事

奉上 Unix 学习笔记,需要的拿去但请注明链接.

UNIX 概述

说起 Unix 就必须说 Bell Labs ,这个实验室厉害啊, 对计算机早期的贡献是相当大的.像大家熟知的 Unix \ C 都是这家公司发明创建的, 实验室目前是 Nokia 公司的.关于贝尔实验室,更多介绍请戳 wikipedia

其实关于操作系统,以前是学过的,但不知道为啥就分不清了…以下简单介绍下 Unix \ OS X \ Linux \ Windows 的异同,可以有一个直观的认识.

  • Unix : GUI 是 X Window(在内核外跑的应用),内核则包括 X Server(与内核通信)与 X Client(负责显示)两部分;
  • OS X : GUI 是自己开发的 Aqua(嵌入内核中) ,而内核则是基于Darwin(Unix BSD);
  • OS : 注意和 OS X 是不同的,OS X 是全新设计基于 Unix 内核的,而 OS 内核基于 Mach(微内核) .
  • Linux : 也是基于 Unix 内核的.
  • Windows : 内核是 DOS NT ;

除上之外, Unix 的变体有: Solaris Unix,AIX,HP Unix,BSD以及 Linux 等等

从功能上看 Unix
  • 内核: 操作系统的核心,调度任务和管理存储;
  • shell: 连接和解释用户的命令,从内存中调用程序并执行它们;
  • 工具和应用程序: 为操作系统提供附加功能.

屏幕快照 2017-03-05 10.34.16.png

从构架上看 Unix

上图展示了 Unix 的基本框架:

  • 内核 : 内核是操作系统的核心,它与硬件和大多数任务(如内存管理,任务调度和文件管理)交互

  • Shell: shell 是处理请求的实用程序,当在终端上键入命令时,shell 会解释该命令并调用所需的程序。shell对所有命令使用标准语法。

  • 命令和实用程序 :有各种命令和实用程序,您可以在您的日常活动中使用。cp,mv,cat和grep等是命令和实用程序的几个例子。

  • 文件和目录 : Unix的所有数据都组织成文件。然后将所有文件组织到目录中。这些目录进一步组织成称为文件系统的树状结构。

1. 文件体系

Unix中的每个文件都有以下属性

  • 所有者权限 所有者的权限决定文件所有者可对文件执行的操作。

  • 组权限 组的权限决定了用户,文件所属组的成员可以对文件执行哪些操作。

  • 其他人权限 其他人的权限指示所有其他用户可对文件执行的操作。

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir
  • d 开头的表示目录
  • 第一列表示不同的访问模式,权限被分成三组(所有者,组,其他人权限 ),权限:read(r),write(w),execute(x)
  • -rwxr-xr– 表示(2-4)所有者权限: rwx ,(5-7)组权限: xr ,(8-10)其他人权限: r
修改文件权限

chmod(change mode)命令。有两种方式使用chmod - 符号模式和绝对模式

  • 符号模式
  • 添加权限, - - 删除权限 = 设置指定权限
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

# 以下是如何在一行上组合这些命令 -

$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile
  • 绝对模式
数   八进制权限表示    参考文献
0   没有权限          --- ---
1   执行权限              - X
2   写权限              -w-
3   执行和写入权限    1(执行)+ 2(写)= 3  -wx
4   读取权限            r--
5   读取和执行权限     4(读取)+ 1(执行)= 5 rx
6   读写权限        4(读)+ 2(写)= 6  rw-
7   所有权限       4(读)+ 2(写)+ 1(执行)= 7   rwx
$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile
然后修改:
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile
文件目录
  • / : 根目录,命令:$ cd /
$ cd / ;ls
# 列出根目录的文件夹:
Applications        home
Library             installer.failurerequests
Network             net
System              opt
Users               private
Volumes             sbin
bin                 tmp
cores               usr
dev                 var
etc

关于上述目录说明如下:

  • /bin : 这是可执行文件所在的位置。这些文件可供所有用户使用
  • /dev : 设备驱动
  • /etc : 管理程序目录命令,配置文件,磁盘配置文件,有效用户列表,组,以太网,主机,在哪里发送关键消息
  • /lib : 含共享库文件和有时其他与内核相关的文件
  • /home : 包含用户和其他帐户的主目录
  • /tmp : 保存系统引导之间使用的临时文件
  • /usr : 用于其他目的,可供许多用户使用。包括管理命令,共享文件,库文件和其他
  • /var : 通常包含可变长度文件,例如日志和打印文件以及可能包含可变数据量的任何其他类型的文件
  • /sbin : 包含二进制(可执行文件)文件,通常用于系统管理。例如,fdisk和ifconfig utlities

….

浏览文件系统
  • $cat 文件名 : 显示文件内容
  • $cd 目录名 : 进入目录
  • $cp file1 file2 : 将file1 内容复制到 file2 ,或者将 file1 复制到 file2 目录中
  • $file 文件名 : 显示文件类型
  • $head 文件名 : 显示文件开头
  • $mkdir 目录名 : 创建文件夹
  • $mv file1 file2 : 移动file1 到file2
  • $rm filename : 删除文件
  • $rmdir dirname : 删除目录
  • $touch filename : 创建空白文件或修改现有文件或其属性
  • $whereis 文件名 : 显示文件的位置
  • $which filename : 如果文件在PATH中,则显示文件的位置

更多文件相关内容

2. 环境变量

在登录 Unix 系统时,会先初始化设置环境变量,读取/ etc / profile(OS X:.profile) 文件, 如果 Home目录存在 profile 文件,就会读取,并在终端显示 $ 符号.

PATH

PATH变量指定shell应查找命令的位置。通常Path变量设置如下

$PATH=/bin:/usr/bin

这里,用冒号字符(:)分隔的每个单独的条目是目录

我自己的 profile 文件 PATH 设置如下:

$vim .bash_profile

结果如下:

# 加载 .profile
[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile

# 加载 RVM 
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

# 设置 PATH 路径
export PATH=${PATH}:/usr/local/mysql-5.6.12-osx10.7-x86_64/bin/mysql

# 设置 PATH 路径
export PATH=/usr/local/bin:$PATH

# 设置 PATH 路径
export PATH=$HOME/bin/:$PATH

# 设置 PATH 路径
export THEOS=/opt/theos

# 设置 PATH 路径
export PATH=$THEOS/bin:$PATH

注意之所以会设置这么多的路径,是因为:当请求 shell 执行命令的时候, shel 会从 PATH 路径中寻找命令,如果不存在,就不会执行:

$ home
-bash: home: command not found
# 这是因为上述没有 PATH 路径没有 home 命令 ,shell 无法解释 home 

Unix 环境变量
- HOME 当前用户主目录:
$ echo $HOME
/Users/jiangxiaocai

- PATH  打印当前的 PATH 路径 
$ echo $PATH

- PWD 当前目录路径
$ pwd
/Users/jiangxiaocai

- RANDOM 每次引用都生成一个介于0和32,767之间的随机整数
$ echo $RANDOM
20303

- TERM 显示类型
$ echo $TERM
xterm-256color

更多的请看

3.基础小程序

打印文件
  • 使用 pr

$pr 文件 即可打印文件的内容

# pr 语法如下:
pr option(s) filename(s)
$pr txt.txt

# -k 产生 K 列输出:
$pr -2 txt.txt 

  • 使用 cat

$cat txt.txt

发邮件

语法:

$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

# 以下是将测试消息发送到admin@yahoo.com的示例。
$mail -s "Test Message" admin@yahoo.com 
#...

更多参见

4.用户管理与进程

Unix 上有三种账户:

  • 根账户:可以运行任何命令
  • 系统账户:系统帐户是操作系统特定组件所需的帐户,例如邮件帐户和sshd帐户。这些帐户通常需要您的系统上的某些特定功能,对它们的任何修改可能会对系统产生不利影响。
  • 用户帐户: 用户帐户为用户和用户组提供对系统的交互式访问。一般用户通常分配到这些帐户,并且通常对关键系统文件和目录的访问受限。

更多账户资料

进程

操作系统通过称为pid或进程ID的五位ID号跟踪进程。系统中的每个进程都有一个唯一的pid。

通过运行ps(process status)命令很容易看到你自己的进程,如下所示

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

-f(f为full)选项 $ps -f 精细显示

5. 网络通信

Unix 系统可以通过终端进行电子邮件的通信.

$ping 该命令发送回送请求到网络上可用的主机。使用此命令,您可以检查远程主机是否响应良好。

$ping hostname or ip-address

  • 使用 traceroute 诊断到某个主机的路由节点

$ traceroute oschina.net

  • 检查某个主机是否运行 HTTP 服务,或者检查某网站是否可用
$ curl -I www.oschina.net head -n 1
  • 使用 dig 来诊断域名信息

$ dig www.oschina.net A

$ dig www.oschina.net MX

  • 显示系统路由表

$ netstat -r

  • 显示活动网络连接

$ netstat -an

  • 显示网络统计

$ netstat -s

6. VIM

  • $vi filename 如果新文件已经不存在,则创建新文件,否则打开现有文件
  • $vi -R filename 以只读模式打开现有文件。
  • $view filename 只读模式打开
操作模式
  • 命令模式 - 此模式允许您执行管理任务,例如保存文件,执行命令,移动光标,剪切(ying)和粘贴线或单词,以及查找和替换。在这种模式下,无论你输入什么都被解释为一个命令。
  • 插入模式 - 此模式允许您将文本插入文件。在此模式下键入的所有内容都将被解释为输入并放在文件中。

vi始终在命令模式下启动。要输入文本,您必须处于插入模式,只需输入i。要退出插入模式,请按Esc键,这将使您返回命令模式。 如果您不确定您所处的模式,请按Esc键两次; 这将带你到命令模式。使用vi编辑器打开文件

保存 VI
  • ESC 进入命令模式,键入冒号和w,即可保存
  • ESC 进入命令模式,键入’冒号和’wq’, 或者键入’冒号和’zz’ 然后回车.这时会保存退出 .
退出 VI:
  • ESC 进入命令模式,键入冒号和’q’,然后回车.这时会提示保存.
  • ESC 进入命令模式,键入冒号和’q!’,然后回车.这时会直接退出,不进行提示.
重命名:
  • ESC 进入命令模式,键入’冒号和’w filename2’和return .
在文本中移动光标:

要在文件中移动而不影响文本,您必须处于命令模式(按两次Esc)。下表列出了几个可用于一次移动一个字符的命令:

  • k 将光标向上移动一行
  • j 将光标向下移动一行
  • h 将光标移动到左一个字符位置
  • l 将光标向右移动一个字符位置

更多参见

7. 性能管理:

性能工具

Unix提供以下重要工具来测量和微调Unix系统性能

  • nice/renice 运行具有修改的调度优先级的程序
  • $netstat 打印网络连接,路由表,接口统计信息,伪装连接和多播成员资格
  • $time 帮助计时一个简单的命令或提供资源使用
  • $uptime 这是系统负载平均
  • $ps 报告当前进程的快照
  • $vmstat 报告虚拟内存统计
  • $gprof 显示调用图配置文件数据
  • $prof 促进过程分析
  • $top [有用] 显示系统任务: 很详细

8. OS X 使用小技能

tab 键可以自动补全路径:

Tab Complete 是 command line 中最能给你节省时间的特性之一,利用它的自动完成文件、目录名称功能还可以防止你输入错误。使用cd进入你的 home folder,使用cd P命令,然后按下tab按键。你可能会听到错误音,因为你的 home folder 内有多个 P 开头的文件夹。再按一次tab,Terminal 将会为你列出 P 开头的两个文件夹:Public 和 Pictures。按U,再按tab,Terminal 则会自动为你补全Public/。Tab complete 同样会处理那些特殊字符。

9. 常用命令汇集

  • 使用\反斜杠转义
  • 使用;来分开两个命令,从而在一行执行,例如:cd \bin ; ls
  • 获取帮助:$man pwd ,用户获取 pwd 命令的联机帮助,其他类似.
  • $ctrl+c 关闭进行
  • $kill -signal pid 关闭某个 PID 的进程
  • $w 查看谁正在登录到你的 Mac 机器
  1. 系统用户:
  • $login 登录电脑,首先要输入用户名,回车输入密码
  • $passwd 修改当前用户的密码
  • $whoami 获取当前是哪个用户登录的
  • $who 当前用户信息
  • $users 当前用户信息
  1. 文件管理:
  • $ cd $HOME 进入用户父目录
  • $cd .. 进入父目录,相对目录
  • $cd \ 进入根目录
  • $ls 列出当前文件夹的内容
  • $ls -l 在ls 基础上列出详细信息 (其中以 d …..开头的项表示目录)
  • $ls -l 列出权限信息
  • $cat 文件名 : 显示文件内容
  • $cd 目录名 : 进入目录
  • $cp file1 file2 : 将file1 内容复制到 file2 ,或者将 file1 复制到 file2 目录中
  • $file 文件名 : 显示文件类型
  • $head 文件名 : 显示文件开头
  • $mkdir 目录名 : 创建文件夹
  • $mv file1 file2 : 移动file1 到file2
  • $rm filename : 删除文件
  • $rmdir dirname : 删除目录
  • $touch filename : 创建空白文件或修改现有文件或其属性
  • $whereis 文件名 : 显示文件的位置
  • $which filename : 如果文件在PATH中,则显示文件的位置
  1. 重启关机:

**注意 + sudo **

  • $logout 注销
  • $sudo halt 立即关机
  • $init 0 在关闭系统之前,使用预定义的脚本关闭系统以同步和清理系统
  • $init 6 系统完全关闭然后重新启动,重新启动系统
  • $poweroff 通过关闭电源关闭系统
  • $reboot 重启
  • $shutdown 关闭系统
  • $shutdown - r now 重启
  • $shutdown now 关机

4.日期日历:

  • $cal 显示日历
  • $date 显示日期

5.其他

强制 Finder 程序显示隐藏文件

  • $defaults write com.apple.finder AppleShowAllFiles TRUE

强制 Finder 程序不显示隐藏文件

支持一下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码支持一下

打开支付宝扫一扫,即可进行扫码打赏哦