学习 Bash,首先需要理解 Shell 是什么。Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
具体来说,Shell 这个词有多种含义。
首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(commandline,简写为 CLI,shell是linux API的命令行接口,对应图形接口。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。本书中,除非特别指明,Shell 指的就是命令行环境。
其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
最后,Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。
1. Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell。
历史上,主要的 Shell 有下面这些。
Bash 是目前最常用的 Shell,我的电脑是Z shell.
2. 下面的命令可以查看当前运行的 Shell。
$ echo $SHELL
/bin/bash
3. 先看看自己的控制台是哪一种类型的:bashrc或者zshrc,然后把常用的一些设置,比如别名设置或者环境变量之类的放到~/.zshrc或者~/.bashrc里。每当打开一个终端就会自动跑这个文件里的命令,或者是人工启动这个文件source ~/.bashrc 或者. ~/.bashrc (.就相当于source ),省得每次都自己再写一遍。
1. touch
新建一个不存在的文件:touch a.text
2. echo
用于字符串的输出
(1) echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo It is a test
(2) 显示结果定向至文件
echo "It is a test" > myfile
3. cat
(1). 一次显示整个文件:cat filename
(2). 从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.
(3). 将几个文件合并为一个文件:cat file1 file2 > file
4. control+c (cancel) 撤销当前命令
control+a (a, b, c...) 到当前命令开头
control+e (end) 到当前命令结束
5. ls
ls [选项] [目录名] 列出目标目录中所有的子目录和文件
(1)-a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件
(2)-h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
(3)-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
6. alias 设置别名:alias name='command line' : alias a=“ssh -D 12345 clouddesktop_hostname”
7. pwd 列出该目录的路径
8. rm -rf 删除指定目录下的所有文件与子目录
9. mkdir [目录名] 当前目录中创建一个目录
10. vi filename/vim filename: 打开或新建文件,并将光标置于第一行首
11. 输入Hive,进入Hive环境
输入python,进入python环境
12. mv 用来为文件或目录改名、或将文件或目录移入其它位置
mv 文件名 文件名 | 将源文件名改为目标文件名 |
mv 文件名 目录名 | 将文件移动到目标目录 |
mv 目录名 目录名 | 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名 |
mv 目录名 文件名 | 出错 |
13. cd [目录名] 切换当前目录至dirName
(1)cd / 进入系统根目录
(2) cd ~ 进入当前用户主目录
(3) cd .. 进入上一级目录
14. du [选项][文件] 显示每个文件和目录的磁盘使用空间,例如:du -sh *
(1)-s或--summarize 仅显示总计,只列出最后加总的值。
(2)-h或--human-readable 以K,M,G为单位,提高信息的可读性
15. df [选项] [文件] 显示指定磁盘文件的可用空间。如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。
(1) -h 方便阅读方式显示
(2) -a 全部文件系统列表
(3) -l 只显示本地文件系统
16. 用Ctrl + R +”前缀”. 搜索历史命令并将前缀进行字典序匹配
17. cp命令用来复制文件或者目录
-r, --recursive 复制目录及目录内的所有项目
18. wget 断点续传
eg: wget -b -c -t 0 -O new_name.tar.gz http://www.cnscn.org/old_name.tar.gz
(1) -c 断点续传
(2) -t 0 反复尝试的次数,0为不限次数
(3) -O name_name.tar.gz 把下载的文件命名为new_name.tar.gz
(4) http://www.cnscn.org/old_name.tar.gz 要下载的文件的网址
(5) -b:让wget在后台运行,记录文件写在当前目录下"wget-log"文件中;
19. clear
刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。一般都会用这个命令。
20、linux环境下创建和删除软链接
linux下的软链接类似于windows下的快捷方式
创建:ln -s [源文件或目录][目标文件或目录]
删除: rm -rf [目标文件或目录]
其作用是当进入目标文件目录,实际上是链接进入了源文件目录
值得注意的是执行命令的时候,应该是源文件或目录已经建立,不要创建目标文件或目录
21. 查看当前进程:ps aux
杀进程:kill -9 PID
22. grep 关键词匹配
23. | 管道:将前一条命令的输出,作为后一条命令的输入,相当于命令之间的粘合剂。
例如:查看python进程:ps aux| grep python
24. chmod命令用于改变linux系统文件或目录的访问权限。
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。
有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。
当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。
权限范围:
u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组
权限代号:
r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
chmod [who] [+ | - | =] [mode] 文件名
例如:增加文件所有用户组可执行权限
命令:chmod a+x filename
25. tail 命令
从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。
-f 循环读取 tail -f gg.log 查看实时日志
26. which 查看可执行文件(命令)的位置
在PATH变量指定的路径中,只找一层,搜索某个系统命令的位置,并且返回第一个搜索结果。
27. find命令用来在指定目录下查找文件
find path -option [ -print ] [ -exec -ok command ]
$ find . -name "*.c"
28、ssh (Secure Shell)
(1) SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
(2) SSH主要用于远程登录。
$ ssh user@host
(3) 拷贝文件:
$ scp 用户名@远程host:远程文件路径 本地路径
29. 不挂断地运行命令
nohup comd > gg.log &(重定向符号,解放键盘)
配合tail -f可以打印输出日志