Unix Shell Summary

Unix Shell Summary

Table of Contents

Unix(Mac)

./ ../ 分别表示当前 目录 和 上层目录 (用于各种需要path的地方, 比如mv cp等)

cd - 返回上次打开目录-

man 命令中q退出man

hsitory 5 列出最近5条历史命令 (省略则列出所有)

ls 选项

ls -l 第一列 文件类型 与 所有权限

重定向

管道

管道与重定向区别

find 文件搜索

grep 全局正则表达式打印 (文件内搜索)

sed

wc 文件 字符 词 行数 统计

file 辨别文件类型

tar, gzip, bzip2 归档(压缩)

环境变量 PATH

进程管理

网络管理

Linux/UNIX 编程环境

下载

打开终端,输入下面的命令:

最新EI系统,选中文件夹 cmd +Option +c 复制文件夹路径,cmd+v 粘贴

终端中输入cdf(oh-my-zsh下启用osx插件)

Mac 文件路径

Mac 终端命令技巧

Linux

常用命令

5.1 通配符

常用命令

4.1 ls

4.4 确定文件类型 file

4.5 less 查看文件

4.7 Linux 文件系统层次标准

4.8 符号链接(symlink 软链接)

4.9 硬链接

常用命令

3.1 理解文件系统

3.7 有用的快捷键

重要的文件名规则

Linux

0 什么是 shell

3 文件系统中跳转

4 探究操作系统

5 操作文件和目录

Unix

Mac 终端命令技巧

./ ../ 分别表示当前 目录 和 上层目录 (用于各种需要path的地方, 比如mv cp等)cd - 返回上次打开目录-man 命令中q退出manhsitory 5 列出最近5条历史命令 (省略则列出所有)

重复历史命令

!是bash和cshell默认的历史替换符号

!! 重复最后一个命令

!:s/xy/yx 这个命令会把最后一个命令里的xy替换成yx

比如echo xy !:s/xy:/yx 有问题? zsh: substitution failed

!so 重复最近以so开始的命令

!?fn? 重复最近喊有fn的命令,在某个参数中或某个命令的名称中都可以使用

!32 执行号码为32的命令

!! & 会在最后一个命令的末尾加上& (可以加上任意内容)

!:0 挑选出命令的名称,而不是整行

!:3 第参数

!:2-4 第2到4个参数

!:-3 从第0个到第三个参数

!^ 第一个参数

!$ 最后一个参数

!* 第一个到最后一个参数

!:2* 第2个到最后一个

!:2- 从第2个开始,但不要结尾参数

!?fn?% 给出第一个包含 fn的次(sort fn1 fn2 fn3 … =>echo !?fn?% =>echo fn1)

➜#535➜ !535➜ ls

ls 选项

-SFhalt 最常用 ls ./*.c 在path中可以使用通配符(./可以省略)

-@ 列出当前目录内所有文件(不包含.或..等.开头文件), 单列显示

-b 目前同上

-c 安时间排序 可以配合 -t 或 -l (-clt 按修改时间排序比较方便, 如果涉及到.开头文件可以加上-a)

-t 排序

-l long print模式

-d ?

-h 配合-l时, 文件大小更易读的(23M 47K 1.8G 等)样式

-F 文件类型后面加后缀

/ 目录

* 可执行文件

@ 符号链接

= socket

% whiteout

| FIFO 命名管道

-S 配合-l 按文件大小排列 优先级高于-h

ls -l 第一列 文件类型 与 所有权限

第一个字符

- 普通文件

d 目录文件

….

其余字符 表示 所有者权限

说明 9个字符 分三组 每三个一组

重定向

大多数UNIX程序都采用 stdin stdout 作为输入输出重定向是将标准输入输出重新定向到文件

重定向符号

> 输出

>> 输出, 将输出添加到文件末尾

利用 重定向 & echo 写入 text 到文件

touch text.cechoasdbijdbvn > text.c#也可以不用创建文件直接写(自动创建新文件)

合并文件

cat a.c b.c > c.c#a.c b.c 合并到 c.ccat a.c > b.c#a.c 内容 替换 b.c 内容cat a.c >> b.c#a.c 拼接到 b.c 最后

管道

用于进程间通信

管道与重定向区别

1.

左边的命令应该有标准输出 | 右边的命令应该接受标准输入

左边的命令应该有标准输出 > 右边只能是文件

左边的命令应该需要标准输入

2. 管道触发两个子进程执行"|"两边的程序;而重定向是在一个进程内执行。

3. (摘自):

作为子进程的运行的管道,不能够改变脚本的变量.

1) variable="initial_value"

2) echo "new_value" | read variable

3) echo "variable = $variable" #variable = initial_value

4. 使用重定向,数组的元素得以输出。使用管道,数组的元素为空。

find 文件搜索

基本使用

find ~/Desktop -name"*.c"#递归子目录中的文件搜索(区分大小写)find ./ -name".DS_Store"-delete#删除查找出来的文件find ./ -size +1000000c#搜索 大于1M的文件

TODO文件大小规则? 1M 就是10^6

grep 全局正则表达式打印 (文件内搜索)

格式: grep 要查找的信息 文件路径(可以是目录)

基本使用

grep include ./fun.c#输出结果为 搜索信息 所在的 行grep -ilr'string'.#搜索当前 目下所有包含string 的文件 -i忽略大小写 -l找出含有这个字符串的文件 -r递归查找子目录文件

grep 常常通过管道来过滤

➜ desktop ls -l ./ | grep redirct -rw-r--r--1goleft staff551215:54redirct.c-rw-r--r--1goleft staff1751216:06redirct2.c

grep 选项 (详见pdf)

sed

用法举例

sed -i"""s/TAB/Steve W./g"`grep -rl TAB ./`#当前目录所有文件中搜索 TAB 并 替换为 Steve W. (注意标点符号)

References: mac OS X下的sed出错

wc 文件 字符 词 行数 统计

-c character

-l line

-w word

搜索 文件 并 统计数量

find ./ -name"*.c"| wc -l

file 辨别文件类型

file Snip20150924_1.png Snip20150924_1.png: PNG image data,821x126,8-bit/colorRGBA, non-interlaced

tar, gzip, bzip2 归档(压缩)

tar 磁带归档文件? 系统备份文件的可靠方法

gzip GNU Zip

bzip2 gzip的改进版本

归档 Sample

-f 参数必须为最后一个

➜ desktop ls *.casdf.c redirct.c redirct2.c➜ desktop tar -czf c.tar.gz ./*.c#-czf 使用 gzip 压缩➜ desktop ls *.gzc.tar.gz➜ desktop file c.tar.gz c.tar.gz: gzip compressed data, from Unix, last modified: Thu May1217:19:322016➜ desktop tar -cjf c.tar.bz2 ./*.c#-cjf 使用 bzip2 压缩➜ desktop file c.tar.bz2 c.tar.bz2: bzip2 compressed data, blocksize=900k

解档 Sample

#解压 gz 文件tar -xzvf c.tar.gz#解压 bz2 文件tar -xjvf c.tar.bz2

环境变量 PATH

#回显环境变量➜ desktop echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin#添加环境变量➜ desktopPATH=%PATH:

:

#环境变量间 : 分割

进程管理

ps process status 进程状态

-A 显示所有进程(不加的话默认只显示当前用户的进程)

kill

kill

1. PID 可以通过ps获取 2. kill 并不是真的杀死进程 而是像目标进程发送信号

top 性能分析 实时显示系统中进程的资源占用情况 类似win的任务管理器

C-c 退出

网络管理

ifconfig 显示或配置 网卡参数

可用来查看本机ip

ping 查看网络上的主机是否在工作

traceroute 显示数据包在IP网络经过的路由器的ip地址

nslookup 和 host 查询 ip地址 和 其对应的域名

netstat 显示IP TCP UDP ICMP协议相关的统计数据

一般用于检验本机各端口的网络连接情况-i 参数 和ifconfig一样查看网卡状态

Linux/UNIX 编程环境

gcc

make & makefile

gdb

下载

wget 下载文件

Linux 自带的wget 可以使用 homebrew 安装

Linux

1. 什么是 shell

The name "bash" is an acronym for "Bourne Again SHell", a reference to the fact bash is an enhanced replacement for sh, the original Unix shell program written by Steve Bourne.

2.2

root@AliYun:~#

用户名@主机名 工作目录 $或# (# 表示超级用户权限)

2.6 简单命令

#磁盘剩余空间 以兆为单位root@AliYun:~# df -BM#内存剩余空间 以兆为单位root@AliYun:~# free -m

3 文件系统中跳转

常用命令

pwd - Print name of current working directory

cd - Change directory

ls - List directory contents

3.1 理解文件系统

类 Unix 系统只有一个单一的文件树, 存储设备可以挂载到目录树上的任意节点.

3.7 有用的快捷键重要的文件名规则

以.字符开头的是隐藏文件, ls 需要 -a 才能显示

大小写敏感

没有文件扩展名概念, 但有些应用程序会根据扩展名

可以作为文件名的标点符号: 空格 . - _

4 探究操作系统

常用命令

file - Determine file type

less - View file contents

4.1 ls

#列出某目录内容root@-AliYun:/home# ls -al /roottotal44drwx------5root root4096Feb2210:39.drwxr-xr-x23root root4096Feb2210:42..-rw-------1root root261Feb2218:31.bash_history-rw-r--r--1root root570Jan312010.bashrcdrwx------3root root4096Oct2514:11.cachedrwxr-xr-x2root root4096Oct2514:12.pip-rw-r--r--1root root148Aug172015.profile-rw-r--r--1root root64Oct2514:12.pydistutils.cfgdrwx------2root root4096Feb2210:16.ssh-rw-------1root root1762Feb2210:39.viminfo-rw-r--r--1root root15Feb2210:28test.md

#列出多个目录内容 (当前目录 和 /root)root@-AliYun:/home# ls -al . /root.:total8drwxr-xr-x2root root4096Jul132017.drwxr-xr-x23root root4096Feb2210:42../root:total44drwx------5root root4096Feb2210:39.drwxr-xr-x23root root4096Feb2210:42..-rw-------1root root261Feb2218:31.bash_history-rw-r--r--1root root570Jan312010.bashrcdrwx------3root root4096Oct2514:11.cachedrwxr-xr-x2root root4096Oct2514:12.pip-rw-r--r--1root root148Aug172015.profile-rw-r--r--1root root64Oct2514:12.pydistutils.cfgdrwx------2root root4096Feb2210:16.ssh-rw-------1root root1762Feb2210:39.viminfo-rw-r--r--1root root15Feb2210:28test.md

4.4 确定文件类型 file

file 确定文件类型

4.5 less 查看文件

less 查看文本文件(more 的改进版)

4.7 Linux 文件系统层次标准

#/ 根目录root@-AliYun:/# ls -SFhalt total88Kdrwxr-xr-x18root root580Feb2314:02run/drwxrwxrwt7root root4.0KFeb2313:55tmp/#用于存储各种程序创建的临时文件. 某些配置导致系统每次重启都会清空这个目录dr-xr-xr-x13root rootFeb2311:17sys/drwxr-xr-x23root root4.0KFeb2210:42./drwxr-xr-x23root root4.0KFeb2210:42../drwxr-xr-x19root root3.0KFeb2210:42dev/#包含设备节点的特殊目录dr-xr-xr-x84root rootFeb2210:42proc/#特殊目录: Linux 内核维护的虚拟目录, 目录内的文件是内核的窥视孔, 这些文件可读, 并能得出内核是怎样监管计算机的drwxr-xr-x89root root4.0KFeb2210:39etc/#所有系统层面的配置文件(这个目录里的任何文件都应该是可读文本文件)#/etc/crontab, 定义自动运行任务drwx------5root root4.0KFeb2210:39root/drwxr-xr-x2root root4.0KOct2514:12sbin/#“系统”二进制文件, 用于完成重大系统任务的程序, 通常为超级用户保留drwxr-xr-x16root root4.0KOct2514:11lib/#核心程序所需库文件(类似Win的动态链接库)drwxr-xr-x2root root4.0KOct2514:11lib64/drwxr-xr-x2root root4.0KOct2514:11bin/#系统启动和运行所必须的二进制程序drwxr-xr-x2root root4.0KOct2514:11lib32/drwxr-xr-x11root root4.0KOct2514:11usr/#可能是最大目录, 包含普通用户所需要的所有程序和文件#/usr/bin 包含系统安装的可执行程序#/usr/lib 包含由/usr/bin 目录中所有程序的共享库#/usr/local 非系统发行版自带, 但用于安装系统范围内使用的程序, 通过源码编译安装但程序通常会安装到/usr/local/bin中#/usr/sbin 包含许多系统管理程序#/usr/share 包含许多/usr/bin中程序使用的共享数据#/usr/share/doc 大多数软件包中的文档会安装这个目录drwxr-xr-x3root root4.0KOct2514:11boot/#包含 Linux 内核, 最初的RMA磁盘映像, 和启动加载程序#/boot/vmlinuz-4.9.0-4-amd64 内核#/boot/grub/grub.conf or grub.cfg or menu.lst , 被用来配置启动加载程序lrwxrwxrwx1root root29Oct2514:11initrd.img -> boot/initrd.img-4.9.0-4-amd64lrwxrwxrwx1root root26Oct2514:11vmlinuz -> boot/vmlinuz-4.9.0-4-amd64lrwxrwxrwx1root root29Oct2514:09initrd.img.old -> boot/initrd.img-4.9.0-3-amd64lrwxrwxrwx1root root26Oct2514:09vmlinuz.old -> boot/vmlinuz-4.9.0-3-amd64drwxr-xr-x11root root4.0KOct2514:08var/#/var 是可能需要改动的文件存储的地方:数据库,假脱机文件,用户邮件等等#/var/log 日志文件, 各种系统活动的记录,非常重要, 最重要的是 /var/log/messages (必须是超级用户才能查看这些日志文件)drwxr-xr-x2root root4.0KOct2514:08opt/#被用来安装”可选的”软件drwxr-xr-x2root root4.0KOct2514:08mnt/#在早些的 Linux 中 /mnt 包含可移除设备的挂载点drwxr-xr-x2root root4.0KOct2514:08srv/drwxr-xr-x3root root4.0KOct2514:08media/#可移除媒体设备的挂载点 USB/CD-ROMs等drwx------2root root16KOct2514:08lost+found/#Linux 分区(如ext3文件系统), 当部分恢复一个损坏的文件系统时才会用到这个目录drwxr-xr-x2root root4.0KJul132017home/#系统会在 /home 中为每个用户分配一个目录

4.8 符号链接(symlink 软链接)

#下面第一个字符“l“ 即表示符号链接lrwxrwxrwx1root root29Oct2514:11initrd.img -> boot/initrd.img-4.9.0-4-amd64

Q:为嘛使用符号链接?

A: 为了给某些名字经常改变的文件一个固定的查找方式(类似Mac替身 or Win快捷方式)

Q:在哪些常见情况下使用?

A:

依赖库软件行升级:

安装新版本

删除旧符号链接

创建指向新版本的符号链接

依赖库软件降级:

删除当前符号链接

创建指向旧版的符号链接

注意 Mac 下与替身 Alis 的区别:

原文件移动后,替身仍能找到原文件,符号链接找不到。

4.9 硬链接

同软链接一样可以允许文件有多个名字, 但方法不同, 详见下章.

硬链接缺陷

不能关联不在同一个磁盘分区上的文件

不能关联目录

5 操作文件和目录

常用命令

cp - Copy files and directories

mv - Move/Rename files and directories

mkdir - Create directories

rm - Remove files and directories

ln - Create hard and symbolic links

5.1 通配符

示例:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180428G0VIDD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券