shell学习

绝对路径

绝对路径开始于根目录,紧跟着目录树的一个个分支,一直到所期望的目录或文件。例子:/home/alex
意味着从根目录(用开头的“/”表示)开始有个叫home的目录包含了目录alex

相对路径

相对路径开始于工作目录,文件系统树中用...来表示相对位置,符号.指的是工作目录,..指的
是工作目录的父目录。

type

显示命令的类型,可用来检测命令是否存在。

alex@Veronica:~$ type ls
ls 是 'ls --color=auto' 的别名
which

显示命令所在的位置

alex@Veronica:~$ which ls
/bin/ls
help

得到命令的帮助文档

man

显示程序手册页

apropos

模糊匹配,搜索可能的命令

alex@Veronica:~$ apropos mkdi
gvfs-mkdir (1)       - Create directories
mkdir (1)            - make directories
mkdir (2)            - create a directory
mkdirat (2)          - create a directory
whatis

非常简洁的命令说明

alex@Veronica:~$ whatis ls
ls (1)               - list directory contents
alias命令别名

在命令alias输入命令的名字,紧接着是一个等号,等号之后是一串引号包裹的字符串,字符串的内容赋值给name

alex@Veronica:~$ alias webstorm='cd /home/alex/下载/WebStorm-171.3780.21//bin; ./webstorm.sh'
alex@Veronica:~$ type webstorm
webstorm 是 'cd /home/alex/下载/WebStorm-171.3780.21//bin; ./webstorm.sh' 的别名

重定向

一般来说标准输出和标准错误连接到屏幕,标准输入来自键盘,通过I/O重定向,我们可以做出改变。

重定向符

使用重定向符>后接文件名可以把标准输出和标准错误输出到屏幕以外的另一个文件。

重定向标准输出
alex@Veronica:~/桌面/bash$ ls .. -l > ls-output.txt
alex@Veronica:~/桌面/bash$ file ls-output.txt
ls-output.txt: UTF-8 Unicode text

重定向符会重写整个文件,因此只使用重定向符而没有命令在它之前会删除已存在文件的内容或创建一个空文件。

使用'>>'操作符可以把输出内容追加到文件末尾。

重定向标准错误

shell内部用文件描述符0,1,2分别对应标准输入,标准输出,标准错误。

alex@Veronica:~/桌面/bash$ ls 不存在的目录 -l 2>ls-output.txt
alex@Veronica:~/桌面/bash$ file ls-output.txt
ls-output.txt: UTF-8 Unicode text
重定向标准错误和标准输出到同一个文件

传统的方法:两次重定向,先将标准输出重定向,再将文件描述符2重定向到文件描述符1。注意两次重定向
的顺序。

alex@Veronica:~/桌面/bash$ ls 不存在的目录 -l >ls-output.txt 2>&1
alex@Veronica:~/桌面/bash$ file ls-output.txt
ls-output.txt: UTF-8 Unicode text

第二种方法:使用表示法&>重定向标准输出和错误

alex@Veronica:~/桌面/bash$ ls 不存在的目录 -l &>ls-output.txt
alex@Veronica:~/桌面/bash$ file ls-output.txt
ls-output.txt: UTF-8 Unicode text
处理不需要的输出

不需要的输出重定向到dev/null,这个文件是系统设备,叫位处理桶。

cat - 连接文件

cat命令读取一个或多个文件然后复制他们到标准输出。
使用cat读取多个文件可以将他们连接起来。

管道线

命令从标准输入读取数据并送到标准输出的能力被管道线利用,使用管道操作符|,一个命令的标准输出可以通过
管道送到另一个命令的标准输入。

alex@Veronica:~/桌面/bash$ ls .. -l | less
过滤器

过滤器接受输入,然后改变它,再输出它

  1. sort排序
  2. uniq忽略或输出重复行(使用-d参数)。
  3. wc打印行数、字数和字节数。
  4. grep打印匹配行。
  5. head/tail打印文件开头部分/结尾部分。(使用-n参数可以调整打印的行数)
  6. tee从标准输入读取数据,并且同时复制数据到标准输出和一个或多个文件。
波浪线展开
  1. 不带参数时波浪线展开为当前用户的家目录
  2. 带参数时,如果参数为存在的用户名,则展开为该用户的家目录
alex@Veronica:~$ echo ~
/home/alex
alex@Veronica:~$ echo ~root
/root
alex@Veronica:~$ echo ~不存在的
~不存在的
算数表达式展开

格式:
$((expression))

算数表达式展开只支持整数

alex@Veronica:~$ echo $((1+1))
2
alex@Veronica:~$ echo $((3/2))
1
花括号展开

可以用花括号展开一次性创建多个文本字符串,花括号展开模式可能包含一个被称为报头的开头部分和一个被称为
附言的结尾部分。

花括号展开不能嵌入空白字符

alex@Veronica:~$ echo front--{A,B,C}--back
front--A--back front--B--back front--C--back
# 嵌套的展开
alex@Veronica:~$ echo {A{1,2},B{3,4}}
A1 A2 B3 B4
参数展开
alex@Veronica:~$ echo $USER
alex
# 输入错误的变量名会返回空字符串
alex@Veronica:~$ echo $asdfsadfasfdasdf

命令替换

可以把一个命令的输出作为一个展开使用

alex@Veronica:~$ echo $(ls)
examples.desktop node-v6.9.2 Steam 公共的 模板 视频 图片 文档 下载 音乐 桌面
# 一个更为复杂的例子
alex@Veronica:~$ file $(ls /usr/bin/* | grep zip$)
/usr/bin/funzip:   ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=06412c648a6927c4a14c751fe2412db3425ecd0f, stripped
/usr/bin/gpg-zip:  POSIX shell script, ASCII text executable
/usr/bin/mzip:     symbolic link to mtools
...

通过引用控制展开

双引号

使用双引号包裹文本,文本中的shell使用的特殊字符都会被当做普通字符。例外:$,\(反斜杠),和`(反引号)。
这意味着单词分割、路径名展开、波浪线展开和花括号展开都将失效,而参数展开、算数展开和命令行替换仍然有效。

单引号

使用单引号会禁止所有展开

转义字符

引用单个字符时可以在字符之前加上一个反斜杠来禁止展开。

alex@Veronica:~$ echo "the balance for user: $USER is :\$55.0"
the balance for user: alex is :$55.0

权限

chmod

更改文件模式(权限),只有文件的拥有者可以更改。

权限属性
属性 文件 目录
r 允许打开并读取文件内容 允许列出目录中的内容(目录必须设置了可执行属性)。
w 允许写入,删改文件内容,不负责控制文件的新建、删除和重命名,文件的新建、删除和重命名由目录属性控制 允许在目录下新建、删除或重命名文件(目录必须设置了可执行属性)。
x 允许将文件当做程序执行 允许进入目录
用八进制数控制权限
八进制数 二进制数 文件模式
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 r-x
6 110 rw-
7 111 rwx
alex@Veronica:~/桌面/bash$ ls -ld test
drwxrwxr-x 2 alex alex 4096 3月  20 08:45 test
alex@Veronica:~/桌面/bash$ chmod 000 test/
alex@Veronica:~/桌面/bash$ ls -ld test
d--------- 2 alex alex 4096 3月  20 08:45 test
chmod符号表示法
u "user"的简写,表示文件或目录的拥有者
g "group"的简写,表示用户组
o "others"的简写,表示其他所有人
a "all"的简写,表示"u","g","o"三者

没有指定字符是默认使用"all"。执行的操作可能是"+",表示加上指权限;"-"表示删除制定权限;"="设置权限为指定权限,删除其余权限。

su 以其他用户身份和组ID运行一个shell

语法:su [-[l]] [user]

如果包含"-l"选项,会启动一个需要登录的shell,不指定用户名时默认打开超级用户。

alex@Veronica:~/桌面/bash$ su
密码:
root@Veronica:/home/alex/桌面/bash# echo 'haha'
haha
root@Veronica:/home/alex/桌面/bash# exit
exit
alex@Veronica:~/桌面/bash$
chown改变文件拥有者和用户组

这个命令需要超级用户权限,语法:chown [owner][:[group]]

示例:

参数 结果
bob 将文件的拥有者改为bob
bob:users 将文件的拥有者改为bob,用户组改为users
:users 用户组改为users,文件所有者不变
bob: 所有者改为bob,用户组为bob登录时所属的用户组

进程相关

  • ps-输出当前进程快照
  • top-显示任务
  • jobs-列出活跃的任务
  • bg-把一个任务放到后台执行
  • fg-把一个任务放到前台执行
  • kill-给一个进程发送信号,参数可以是PID或工作序号
  • killall-杀死指定名字的进程

使用键盘组合键ctrl+z可以把前台运行的进程停止,此时可以使用bg命令加一个百分号和工作序号使进程
返回后台继续执行。

在命令后加上&即可把命令放到后台执行,使用fg命令加一个百分号和工作序号可以让一个进程返回前台

alex@Veronica:~$ xlogo &
[1] 21617
alex@Veronica:~$ fg %1
xlogo
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 基础 头文件 #!/bin/bash 或者#!/bin/sh #!约定的标记,如IOS的Import 执行文件时需...
    ZMJun阅读 1,223评论 1 2
  • [TOC] Shell基本介绍 shell学习必备基础 Linux的基本使用 如何在bash上执行程序 简单的管道...
    J书越来越垃圾了阅读 1,305评论 0 4
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,119评论 9 467
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,128评论 2 34
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139