linux 命令行基础
shell是什么
1. shell
当我们说的命令行时,我们实际上指的是shell。shell是一个接受由键盘输入的命令,并将其传递给操作系统来执行的程序。几乎所有的Linux发行版都提供shell程序,改程序来自于称之为bash的GNU项目。bash是Bourne Again Shell的首字母缩写。即是sh的增强版本,sh是最初的unix shell程序。
2. 终端仿真器
当使用图形用户界面时,需要另一种叫做终端仿真器(terminal)的程序与shell交互。在linux下面有很多不同的终端给你选择使用。
3. 在终端的第一次输入
- 开打终端,mac,linux都有不同终端。
- 如何在终端中简单查看是普通用户还是超级用户
- 在终端中看到的是 $表示 普通用户执行命令
 - 在终端中看到的是 #表示 超级用户权限正在执行命令

4. history
- 在终端中输入history来查看命令历史记录
大部分Linux发行版会记录500条命令(最近的)
$ history- 我们也可以使用上下键来获取历史记录
- 我们可以使用! 来获取历史命令
- !+num 使用! 加上history里面的命令号码,就可以快捷的打出命令来
- !his 他会自动补全上一次的命令,就像正则匹配一样,比如这个命令就会补全我们刚才输入的history命令
5. date cal 查看日期函数
- 使用date来查看日期
$ date- 使用cal来获取日历
$ cal6. exit 结束会话
- exit在本地输入会退出终端程序
- exit在ssh登录中会退出远程ssh,但是不会退出程序
7. 目录导航 pwd cd ls
- 文件目录树
和其他系统一样,linux系统的也是通过文件夹将目录进行一个层次的划分,文件夹有一个最顶层的目录,叫做根目录。他包含了文件和文件夹,然后这些文件夹再包含子文件和文件夹依次类推。这种结构我们称为文件系统树
在linux中,不管你有多少个存储设备,通常只有一个文件系统树。
- 文件的根目录用 / 表示
在linux中我们可以使用
$ tree /来查看 / 目录的下面的结构
- pwd 查看当前工作(所在)目录
$ pwd- ls 列出当前工作目录和文件和目录
$ ls- 更改当前工作目录
- cd 命令:就像我们windows一样,我们也可以在linux里面去切换所在的文件夹,cd 后面跟上目录的名称就可以直接切换到某个目录
$ cd /Users/canvas/Desktop/project/web_font_notes- 绝对路径: 上述所使用的方式是使用了绝对路径,绝对路径是指从根目录开始 以
/号为目录的层级分割,一层层的到达所指的目录。
比如上面所说的:
/Users/canvas/Desktop/project/web_font_notes- 相对路径: 既然有绝对路径,那么就有相对路径,就是相对本工作目录的其他目录所在的位置,比如找到本目录所属的上级
../目录或者目录下面的某个目录./
- 快捷命令
回到刚才所在的目录
cd -
到用户的根目录下面
cd ~
到xx用户的根目录下面
cd ~username- linux用户目录
我们知道 linux的根目录是/,linux是一个多用户的系统,每一个用户都有自己的独立的空间,~代表进入到本用户独立的空间中(根目录),一般 Linux的用户空间是存在于/home/下面的 - 更多的ls扩展命令
- ls 可以直接显示本文件下面的文件
canvasdeMBP:web_font_notes canvas$ ls
06_js_anwser.html class_question_and_anwser home_work_and_anwser- ls 后面跟上文件路径可以查看那个文件夹中的子文件
canvasdeMBP:web_font_notes canvas$ ls ./css/
css_basic css_cases css_layout test- 可以使用长格式来获取更多的细节(相当于扩展的命令)
canvasdeMBP:web_font_notes canvas$ ls -l
-rw-r--r-- 1 canvas staff 2308 8 27 16:29 06_js_anwser.html-rw-r–r--@ 1 canvas staff 4305 9 13 21:17 README.md drwxr-xr-x 2 canvas staff 64 9 3 18:37 bootstrap
```8. 命令的选项和参数
大部分命令是可以通过参数来使命令有不同的效果的,大致的命令格式如下:
command -options arguments就像上面的命令一样 加上命令的选项
canvasdeMBP:web_font_notes canvas$ ls -lt
total 40
-rw-r--r--@ 1 canvas staff 4305 9 13 21:17 README.md
drwxr-xr-x 10 canvas staff 320 9 13 21:14 jquery
drwxr-xr-x 8 canvas staff 256 9 13 16:56 js
drwxr-xr-x 6 canvas staff 192 9 13 08:58 css
drwxr-xr-x 3 canvas staff 96 9 9 22:10 sourcest表示以时间顺序来查看子文件,lt是-l和-t的联合使用,表示以长格式输出,并且以时间来排序
也可以使用长格式来输出
canvasdeMBP:web_font_notes canvas$ ls -lt -reverse
8 -rw-r--r-- 1 canvas staff 2308 8 27 16:29 06_js_anwser.html
0 drwxr-xr-x 2 canvas staff 64 9 3 18:37 bootstrap
0 drwxr-xr-x 5 canvas staff 160 9 5 14:42 pics
0 drwxr-xr-x 4 canvas staff 128 9 5 14:46 class_question_and_anwser长格式中 -reverse是长格式的写法,就像 -l也可以写-long的方式表达
所以说 命令可以使用长格式或者短格式来输出,有些版本的linux可能需要 --long来表示长格式
9. ls命令显示的解释
当输入 ls -l之后,会显示如下
canvasdeMBP:web_font_notes canvas$ ls -lt -reverse
8 -rw-r--r-- 1 canvas staff 2308 8 27 16:29 06_js_anwser.html
0 drwxr-xr-x 2 canvas staff 64 9 3 18:37 bootstrap
0 drwxr-xr-x 5 canvas staff 160 9 5 14:42 pics
0 drwxr-xr-x 4 canvas staff 128 9 5 14:46 class_question_and_anwser字段 | 含义 |
-rw-r–r-- | 第一个字符 -表示文件 如果是d表示文件夹 后面的rw等等表示的是本用户,用户组,其他用户对这个文件或者文件夹的使用权限 |
1 | 文件硬链接数目 |
canvas | 文件所有者 |
staff | 文件所属用户组 |
2308 | 以字节数显示文件大小 |
18:37 | 文件的上次修改时间 |
pics | 文件的名称 |
ls命令含义总结:
参数 | 描述 |
-a | –all 列出目录下的所有文件,包括以 . 开头的隐含文件 |
-l | 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来 |
-d | –directory 将目录象文件一样显示,而不是显示其下的文件 |
-h | –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G) |
-t | 以文件修改时间排序 |
10. file用法
在探索linux系统的时候,知道文件的类型是很有用的,我们在windows上面一般是通过查看文件名的后缀来知晓文件的类型的meinv.jpg,
但是在linux上面,文件的名字和文件本身的类型并不挂钩,所以不管是什么类型的文件我们都可以随便的起名字。但是我们可以通过file这个命令来查看文件的类型
canvasdeMBP:bin canvas$ file lzma
lzma: Mach-O 64-bit executable x86_64通过上面我们可以看到,文件的类型是可执行的64位程序
11. less命令的使用
less命令可以帮我们查看文件里面的内容
我们可以直接去less一个文件
less lzcmp当我们less的时候,使用 j向下翻 k向上翻 q退出 这和vim编辑器有点类似
12. linux 默认目录说明
-
/系统根目录 -
/bin包含系统启动和运行所需要的二进制文件(binary) -
/dev设备节点特殊目录。内核将它能够识别的所有设备存放在这个目录(linux一切皆文件 设备也要看成文件) -
/etc一般的配置文件都在里面 -
/home由于Linux是多用户的 所以每个用户都有自己独立空间,普通的用户只有权限在这里创建文件。 -
liblinux 核心系统使用的共享库文件 -
/lost+found当系统崩溃时,该目录用于恢复分区。(严重的问题) -
/media可移除媒体设备挂载点。比如usb驱动 cd-rom等。当设备插入计算机后,会自动的挂载到这个目录节点下面 -
/mnt早期linux系统中 /mnt 目录包含手动挂载可移除的设备挂载点 -
/opt安装可选软件,一般用户自己下载的软件放在这里 -
/rootroot账户的主目录 -
/sbin系统二进制文件。重要的系统文件。为超级用户预留的 -
/tmp提供用户存放各种临时系统文件的目录 可以配置每次重启系统时清空这个目录 -
/usr包含普通用户使用的所有程序和相关文件 -
/usr/bin目录中放置了一些Linux发行版安装的可以执行程序。存储成千上万个程序 -
/usr/lib/usr/bin中使用的共享库 -
/usr/local由源代码编译好的程序通常安装在/usr/local/bin中 -
/usr/sbin更多的管理员程序 -
/var存放有可能改变的目录,比如说系统日志
操作文件和目录 cp mv …
- mkdir
说明: mkdir是用来创建目录的
可以一次性创建一个文件夹或者多个文件夹
$ mkdir dir1
$ mkdir dir1 dir2 dir3命令参数:
参数 | 描述 |
-m --mode=模式 | 设定权限<模式> |
-p --parents | 可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录 |
-v --verbose | 每次创建新目录都显示信息 |
递归创建多个目录
$ mkdir -p testmkdir/testmkdir创建权限为 777 的目录
$ mkdir -m 777 -p test/test1- cp命令
说明: cp命令是用来复制文件或者目录的
复制文件到哪个文件
$ cp file1 fil2复制文件到xx文件里面
$cp file1 file2 dir2复制文件夹到另一个文件夹中
cp -r dir1 dir3复制文件夹到文件夹,区别在于 test_dir1不存在会创建新的文件夹
$ cp -r dir1 test_dir1复制文件中的所有文件到另一个文件夹中
cp dir/* dir3扩展选项
项 | 意义 |
-a | 复制文件和目录,以及它们的属性,包括所有权和权限。 默认情况下,复本具有用户所操作文件的默认属性。 |
i | 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。 |
-r | 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。 |
u | 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。 |
-v | 显示翔实的命令操作信息 |
-n | 不要覆盖已存在的文件(使前面的 -i 选项失效) |
- mv命令 移动文件或者文件夹
mv的命令和cp命令有许多的相似
扩展选项
参数 | 描述 |
i | 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。 |
u | 当把文件从一个目录移动到另一个目录时,仅移动 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。 |
-v | 显示翔实的命令操作信息 |
-f | 如果目标文件已经存在,不会询问而直接覆盖 |
移动文件到哪个文件
$ mv file1 file2移动目录到哪个目录
$cp dir1 dir2移动目录或文件到到哪个目录下
$cp file dir2- rm命令
说明: rm删除文件 这是一个危险的命令 因为linux没有回收站 所以当你删除了文件是不能后悔的
项 | 意义 |
i | 在删除之前,提示用户确认。 |
-r | 递归地删除目录及目录中的内容 |
-f | 忽视不存在的文件,不显示提示信息 |
-v | 显示翔实的命令操作信息 |
删除文件
rm file1 file2删除文件夹
rm -r dir1小心 rm! 不要使用 rm / 这样会把你的系统毁掉
ln 文件链接 (硬链接|硬链接)
- 硬链接
$ ln file link硬链接和符号链接比起来,硬链接是最初 Unix 创建链接的方式,而符号链接更加现代。 在默认情况下,每个文件有一个硬链接,这个硬链接给文件起名字。当我们创建一个 硬链接以后,就为文件创建了一个额外的目录条目
硬链接有两个重要局限性:
- 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
- 一个硬链接不能关联一个目录
一个硬链接和文件本身没有什么区别
- 符号链接
$ ln -s file link创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个 特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。
- 链接实战
链接文件
```
ln -s file2 ln_file2
```链接文件夹
```
ln -s dir4 ln_dir4
cd ln_dir4
```显示命令
- 概览:
- type – 说明怎样解释一个命令名
- which – 显示会执行哪个可执行程序
- man – 显示命令手册页
- apropos – 显示一系列适合的命令
- info – 显示命令 info
- whatis – 显示一个命令的简洁描述
- alias – 创建命令别名
- 到底什么是命令
- 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等
- 是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,cd 命令,就是一个 shell 内部命令。
- 是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。
- 是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。
- type-显示命令的类型
说明: type 命令是 shell 内部命令,它会显示命令的类别,给出一个特定的命令名(做为参数)。
$ type cd
cd is a shell builtin
$ type ls
ls is hashed (/bin/ls)- 定位
- which - 显示一个可执行程序的位置
在 PATH 变量指定的路径中搜索可执行文件的所在位置。它一般用来确认系统中是否安装了指定的软件。
说明:有时候在一个操作系统中,不只安装了可执行程序的一个版本。然而在桌面系统中,这并不普遍, 但在大型服务器中,却很平常。为了确定所给定的执行程序的准确位置,使用 which 命令
rimideiMac-10:ln_dir4 admin$ which ls
/bin/ls(某些系统中)这个命令只对可执行程序有效,不包括内部命令和命令别名,别名是真正的可执行程序的替代物
- whereis 命令
whereis 命令主要用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/)查询。这个数据库是 Linux 系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行 updatedb 命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得 whereis 命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到。 - locate
locate 命令跟 whereis 命令类似,且它们使用的是相同的数据库。但 whereis 命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。
- help 帮助文档
rimideiMac-10:ln_dir4 admin$ help cd
cd: cd [-L|-P] [dir]
Change the current directory to DIR. The variable $HOME is the
default DIR. The variable CDPATH defines the search path for
the directory containing DIR. Alternative directory names in CDPATH
are separated by a colon (:). A null directory name is the same as
the current directory, i.e. `.'. If DIR begins with a slash (/),
then CDPATH is not used. If the directory is not found, and the
shell option `cdable_vars' is set, then try the word as a variable
name. If that variable has a value, then cd to the value of that
variable. The -P option says to use the physical directory structure
instead of following symbolic links; the -L option forces symbolic links
to be followed.注意表示法:出现在命令语法说明中的方括号,表示可选的项目。一个竖杠字符 表示互斥选项。
这种表示法说明,cd 命令可能有一个”-L”选项或者”-P”选项,进一步,可能有参数“dir”
- 许多可执行程序支持一个”—help”|-h选项,这个选项是显示命令所支持的语法和选项说明
rimideiMac-10:ln_dir4 admin$ python --help
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-b : issue warnings about str(bytes_instance), str(bytearray_instance)
and comparing bytes/bytearray with str. (-bb: issue errors)
-B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser; also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
-h : print this help message and exit (also --help)
-i : inspect interactively after running script; forces a prompt even
if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-I : isolate Python from the user's environment (implies -E and -s)
-m mod : run library module as a script (terminates option list)
-O : remove assert and __debug__-dependent statements; add .opt-1 before
.pyc extension; also PYTHONOPTIMIZE=x
-OO : do -O changes and also discard docstrings; add .opt-2 before
.pyc extension
-q : don't print version and copyright messages on interactive startup
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S : don't imply 'import site' on initialization- 一些程序不支持”—help”选项
rimideiMac-10:ln_dir4 admin$ ls --helpls: illegal option – -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file …]
```
- man -显示程序手册页
rimideiMac-10:ln_dir4 admin$ man ls手册文档的格式有点不同,一般地包含一个标题,命令语法的纲要,命令用途的说明, 和命令选项列表,及每个选项的说明。然而,通常手册文档并不包含实例,它打算 作为一本参考手册,而不是教材。
- apropos
rimideiMac-10:ln_dir4 admin$ apropos mkdir
mkdir(1) - make directories
mkdir(2), mkdirat(2) - make a directory file- whatis -显示非常简洁的命令说明
rimideiMac-10:ln_dir4 admin$ whatis mkdir
mkdir(1) - make directories
mkdir(2), mkdirat(2) - make a directory file- info - 显示程序 Info 条目
说明:GNU 项目提供了一个命令程序手册页的替代物,称为 “info”。info 内容可通过 info 阅读器 程序读取。info 页是超级链接形式的,和网页很相似。
```
info ls
```
>info 程序读取 info 文件,info 文件是树型结构,分化为各个结点,每一个包含一个题目。 info 文件包含超级链接,它可以让你从一个结点跳到另一个结点。一个超级链接可通过 它开头的星号来辨别出来,把光标放在它上面并按下 enter 键,就可以激活它。- alias 创建你自己的命令
说明: alias 可以用于 自己创建一个属于自己的命令,语句结构 alias name=‘string’
rimideiMac-10:ln_dir4 admin$ ll
-bash: ll: command not found
rimideiMac-10:ln_dir4 admin$ alias ll='ls -l'
rimideiMac-10:ln_dir4 admin$ ll
total 0
drwxr-xr-x 5 admin staff 170 9 19 09:51 dir5
-rw-r--r-- 1 admin staff 0 9 19 09:43 test2
rimideiMac-10:ln_dir4 admin$ type ll
ll is aliased to `ls -l'重定向
- 说明 : I/O 重定向。“I/O”代表输入/输出, 通过这个工具,你可以重定向命令的输入输出,命令的输入来自文件,而输出也存到文件。 也可以把多个命令连接起来组成一个强大的命令管道
- 配合io使用的命令
cat - 连接文件
sort - 排序文本行
uniq - 报道或省略重复行
grep - 打印匹配行
wc - 打印文件中换行符,字,和字节个数
head - 输出文件第一部分
tail - 输出文件最后一部分 - 标准输入,输出,和错误
与 Unix 主题“任何东西都是一个文件”保持一致,程序,比方说 ls,实际上把他们的运行结果 输送到一个叫做标准输出的特殊文件(经常用 stdout 表示),而它们的状态信息则送到另一个 叫做标准错误的文件(stderr)。默认情况下,标准输出和标准错误都连接到屏幕,而不是 保存到磁盘文件。除此之外,许多程序从一个叫做标准输入(stdin)的设备得到输入,默认情况下, 标准输入连接到键盘。
I/O 重定向允许我们可以更改输出走向和输入来向。一般地,输出送到屏幕,输入来自键盘, 但是通过 I/O 重定向,我们可以改变输入输出方向。
- 重定向标准输出
使用 > 把本来应该输出到屏幕上面的信息输出到文本上面
rimideiMac-10:ln_dir4 admin$ ls / > test1.txtrimideiMac-10:ln_dir4 admin$ let test1.txt
```
但是 当我们得到一个错误的输出时候,这个时候程序就不会把信息写入文本
```
rimideiMac-10:ln_dir4 admin$ ls /bin/ac > test2ls: /bin/ac: No such file or directory
```
重定向错误输出的话我们需要使用
```
rimideiMac-10:ln_dir4 admin$ ls /bin/ac 2> test2
```
现在的bash给我们提供了一种方法 同时提供重定向错误和标准输出
```
rimideiMac-10:ln_dir4 admin$ ls /bin/ac &> test2
```- cat (concatenate)- 连接文件
cat 命令读取一个或多个文件,然后复制它们到标准输出,就像这样:
rimideiMac-10:ln_dir4 admin$ cat test1.txt
Applications
Library
Network
System
Users
Volumes
bin
cores
data
dev
etc
home
installer.failurerequests
net
private
sbin
tmp
usr
var参数 | 描述 |
n | 对输出的所有行编号,由 1 开始对所有输出的行数编号 |
-s | 有连续两行以上的空白行,就代换为一行的空白行 |
tac 将 cat 反写过来,所以它的功能就跟 cat 相反,cat 是由第一行到最后一行连续显示在屏幕上,而 tac 则是由最后一行到第一行反向在屏幕上显示出来
- 管道线
- 使用方式:
命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被 一个 shell 特性所利用,这个特性叫做管道线。使用管道操作符”|”(竖杠),一个命令的 标准输出可以管道到另一个命令的标准输入:
rimideiMac-10:ln_dir4 admin$ ls / |less把ls的标准输出管道到less的标准输入
可以使用xargs 把输出的命令改成一行或者安装自己的指定行数打印
ls / | xargsls / | xargs -n 4-n 每行打印多少个
- 过滤器:
管道线经常用来对数据完成复杂的操作。有可能会把几个命令放在一起组成一个管道线。 通常,以这种方式使用的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后 输出它。第一个我们想试验的过滤器是 sort。想象一下,我们想把目录/bin 和/usr/bin 中 的可执行程序都联合在一起,再把它们排序,然后浏览执行结果:
rimideiMac-10:ln_dir4 admin$ ls /bin/ /usr/bin/ | sort | less因为我们指定了两个目录(/bin 和/usr/bin),ls 命令的输出结果由有序列表组成, 各自针对一个目录。通过在管道线中包含 sort,我们改变输出数据,从而产生一个 有序列表。
- uniq - 报道或忽略重复行
uniq 命令经常和 sort 命令结合在一起使用。uniq 从标准输入或单个文件名参数接受数据有序 列表(详情查看 uniq 手册页),默认情况下,从数据列表中删除任何重复行。所以,为了确信 我们的列表中不包含重复句子(这是说,出现在目录/bin 和/usr/bin 中重名的程序),我们添加 uniq 到我们的管道线中:
```
rimideiMac-10:ln_dir4 admin$ ls /bin/ /usr/bin/ | sort |uniq | less
```
>在这个例子中,我们使用 uniq 从 sort 命令的输出结果中,来删除任何重复行- grep wc
- grep
说明: grep 是个很强大的程序,用来找到文件中的匹配文本。
比如说,我们想在我们的程序列表中,找到文件名中包含单词“zdiff”的所有文件。这样一个搜索, 可能让我们了解系统中的一些程序与文件压缩有关系。
rimideiMac-10:~ admin$ ls /bin/ /usr/bin/ | sort | grep zdiff |less$ grep 'root' /etc/passwd将/etc/passwd 文件中出现 root 的行取出来
$ grep -v 'root' /etc/passwd将/etc/passwd 文件中未出现 root 的行取出来
- wc 统计的工具,主要用来显示文件所包含的行、字和字节数
描述 |
统计字节数 |
统计行数 |
统计字符数,这个标志不能与 -c 标志一起使用 |
统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串 |
打印最长行的长度 |
canvasdeMBP:project canvas$ cat test.py | wc -c165847
canvasdeMBP:project canvas$ cat test.py | wc -l
1380
canvasdeMBP:project canvas$ cat test.py | wc -m
165847
canvasdeMBP:project canvas$ cat test.py | wc -w
12420
canvasdeMBP:project canvas$ cat test.py | wc -m
165847
12420
canvasdeMBP:project canvas$ cat test.py | wc -l
```- head / tail -打印文件开头部分/结尾部分
说明:
有时候你不需要一个命令的所有输出。可能你只想要前几行或者后几行的输出内容。 head 命令打印文件的前十行,而 tail 命令打印文件的后十行。默认情况下,两个命令 都打印十行文本,但是可以通过”-n”选项来调整命令打印的行数。
它们也能用在管道线中:
rimideiMac-10:log admin$ head -n 5 fsck_hfs.log
rimideiMac-10:log admin$ tail -n 5 fsck_hfs.log
rimideiMac-10:log admin$ ls /usr/bin | tail -n 5tail 有一个选项允许你实时的浏览文件。当观察日志文件的进展时,这很有用,因为 它们同时在被写入。
```
tail -f /var/log/system.log
```高级键盘技巧
- clear - 清空屏幕
- history - 显示历史列表内容
- ! 回顾历史命令
- 表9-1: 光标移动命令
按键 | 行动 |
Ctrl-a | 移动光标到行首。 |
Ctrl-e | 移动光标到行尾。 |
Ctrl-f | 光标前移一个字符;和右箭头作用一样。 |
Ctrl-b | 光标后移一个字符;和左箭头作用一样。 |
Alt-f | 光标前移一个字。 |
Alt-b | 光标后移一个字。 |
Ctrl-l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |
权限
- 说明:
- Unix 传统中的操作系统不同于那些 MS-DOS 传统中的系统,区别在于它们不仅是多任务系统,而且也是 多用户系统。这到底意味着什么?它意味着多个用户可以在同一时间使用同一台计算机。然而一个 典型的计算机可能只有一个键盘和一个监视器,但是它仍然可以被多个用户使用。例如,如果一台 计算机连接到一个网络或者因特网,那么远程用户通过 ssh(安全 shell)可以登录并操纵这台电脑。 事实上,远程用户也能运行图形界面应用程序,并且图形化的输出结果会出现在远端的显示器上。 X 窗口系统把这个作为基本设计理念的一部分,并支持这种功能。
- Linux 系统的多用户性能,不是最近的“创新”,而是一种特性,它深深地嵌入到了 Linux 操作系统的 设计过程中。想一下 Unix 系统的诞生环境,这会很有意义。多年前,在个人电脑出现之前,计算机 都是大型的,昂贵的,集中化的。一个典型的大学计算机系统,例如,是由坐落在一座建筑中的一台 大型中央计算机和许多散布在校园各处的终端机组成,每个终端都连接到这台大型中央计算机。 这台计算机可以同时支持很多用户。
- 权限系统中的命令
- id – 显示用户身份号
当用户创建帐户之后,系统会给用户分配一个号码,叫做用户 ID 或者 uid,然后,为了符合人类的习惯,这个 ID 映射到一个用户名。系统又会给这个用户 分配一个原始的组 ID 或者是 gid
rimideiMac-10:log admin$ id
uid=503(admin) gid=20(staff) groups=20(staff),703(com.apple.sharepoint.group.3),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),701(com.apple.sharepoint.group.1),33(_appstore),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),399(com.apple.access_ssh)uid 是用户的独立id gid是用户所属的用户组 后面的groups是表示这个系统中的用户组有哪些
- chmod – 更改文件模式
- 数字的意义
权限模式
ctal | Binary | File Mode |
0 | 000 | – |
1 | 001 | —x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r— |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
当我看到如下,就能分析出来 文件的所有者 admin有 读写 用户组staff对文件有 读 其他用户对文件有读权限
-rw-r--r-- 1 admin staff 0 9 19 09:48 file2更改文件或者目录的权限
rimideiMac-10:test admin$ chmod 600 file2循环递归的改变文件夹和文件里面的权限
rimideiMac-10:test admin$ chmod -R 777 dir4- 符号表示法
chmod 命令符号表示法
符号 | 意义 |
u | “user”的简写,意思是文件或目录的所有者。 |
g | 用户组。 |
o | “others” 的简写,意思是其他所有的人。 |
a | “all” 的简写,是“u”,“g”,和 “o” 三者的联合。 |
chmod 符号表示法实例
命令 | 意义 |
u+x | 为文件所有者添加可执行权限。 |
u-x | 删除文件所有者的可执行权限。 |
+x | 为文件所有者,用户组,和其他所有人添加可执行权限。等价于 a+x。 |
o-rw | 除了文件所有者和用户组,删除其他人的读权限和写权限。 |
go=rw | 给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。 |
u+x,go=rw | 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。 |
u代表 用户 g 代表用户组 o代表其他人
示例:
$ rimideiMac-10:test admin$ chmod u+x dir4
$ rimideiMac-10:test admin$ chmod u-x dir4删除权限是对文件所属的目录有w权限
- su – 以另一个用户的身份来运行 shell
- sudo – 以另一个用户的身份来执行命令
- chown – 更改文件所有者
chown 命令被用来更改文件或目录的所有者和用户组。使用这个命令需要超级用户权限。
chown 参数实例
参数 | 结果 |
bob | 把文件所有者从当前属主更改为用户 bob。 |
bob:users | 把文件所有者改为用户 bob,文件用户组改为用户组 users。 |
:admins | 把文件用户组改为组 admins,文件所有者不变。 |
bob: | 文件所有者改为用户 bob,文件用户组改为,用户 bob 登录系统时,所属的用户组。 |
$ rimideiMac-10:test admin$ chown canvas file2passwd – 更改用户密码
只要输入 passwd 命令,就能更改你的密码。shell 会提示你输入你的旧密码和你的新密码:
```
$ passwd
```进程
- 说明:
通常,现在的操作系统都支持多任务,意味着操作系统(给用户)造成了一种假象,(让用户觉得) 它同时能够做多件事情,事实上,它是快速地轮换执行这些任务的。Linux 内核通过使用进程,来 管理多任务。通过进程,Linux 安排不同的程序等待使用 CPU。
有时候,计算机变得呆滞,运行缓慢,或者一个应用程序停止响应。在这一章中,我们将看一些 可用的命令行工具,这些工具帮助我们查看程序的执行状态,以及怎样终止行为不当的进程。 - 进程是怎样工作的
当系统启动的时候,内核先把一些它自己的程序初始化为进程,然后运行一个叫做 init 的程序。init, 依次地,再运行一系列的称为 init 脚本的 shell 脚本(位于/etc),它们可以启动所有的系统服务。 其中许多系统服务以守护(daemon)程序的形式实现,守护程序仅在后台运行,没有任何用户接口。 这样,即使我们没有登录系统,至少系统也在忙于执行一些例行事务。
一个程序可以发动另一个程序,这个事实在进程方案中,表述为一个父进程创建了一个子进程。
内核维护每个进程的信息,以此来保持事情有序。例如,系统分配给每个进程一个数字,这个数字叫做 进程 ID 或 PID。PID 号按升序分配,init 进程的 PID 总是1。内核也对分配给每个进程的内存进行跟踪。 像文件一样,进程也有所有者和用户 ID,有效用户 ID,等等。 - ps – 报告当前进程快照
rimideiMac-10:test admin$ ps
PID TTY TIME CMD
4506 ttys000 0:00.04 -bash
4533 ttys001 0:00.25 -bash上例中,列出了两个进程,进程 4506 和进程 4533,各自代表命令 bash 和 ps。正如我们所看到的, 默认情况下,ps 不会显示很多进程信息,只是列出与当前终端会话相关的进程。
- 如果给 ps 命令加上选项,我们可以得到更多关于系统运行状态的信息:
rimideiMac-10:test admin$ ps x
PID TT STAT TIME COMMAND
385 ?? S 0:06.06 /usr/sbin/cfprefsd agent
386 ?? S 0:09.18 /usr/libexec/UserEventAgent (Aqua)
388 ?? S 1:19.98 /usr/sbin/distnoted agent加上 “x” 选项(注意没有开头的 “-” 字符),告诉 ps 命令,展示所有进程,
STAT表示进程的状态
状态 | 意义 |
R | 运行。这意味着,进程正在运行或准备运行。 |
S | 正在睡眠。 进程没有运行,而是,正在等待一个事件, 比如说,一个按键或者网络数据包。 |
D | 不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动器的 I/O。 |
T | 已停止. 已经指示进程停止运行。稍后介绍更多。 |
Z | 一个死进程或“僵尸”进程。这是一个已经终止的子进程,但是它的父进程还没有清空它。 (父进程没有把子进程从进程表中删除) |
< | 一个高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。 进程的这种属性叫做 niceness。具有高优先级的进程据说是不好的(less nice), 因为它占用了比较多的 CPU 时间,这样就给其它进程留下很少时间。 |
N | 低优先级进程。 一个低优先级进程(一个“好”进程)只有当其它高优先级进程执行之后,才会得到处理器时间。 |
- 另一个流行的选项组合是 “aux”(不带开头的”-“字符)。这会给我们更多信息:
rimideiMac-10:test admin$ ps aux
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
admin 432 100.0 0.3 4566564 27932 ?? R 日03下午 201:51.72 /System/Library/CoreServices/Dock.app/Contents/MacOS/Dock
admin 113 99.3 0.4 4563544 31160 ?? Rs 日03下午 655:29.85 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/login
admin 5119 1.6 1.8 4983908 147960 ?? S 3:02下午 0:29.01 /Applications/Google /Contents/Versions/68.0.3440.106/G
_windowserver 174 0.9 0.7 5638312 59348 ?? Ss 日03下午 20:16.25 /System/Library/PrivateFrameworks/SkyLight.framework/R这个选项组合,能够显示属于每个用户的进程信息。
题 | 意思 |
SER | 用户 ID. 进程的所有者。 |
CPU | 以百分比表示的 CPU 使用率 |
MEM | 以百分比表示的内存使用率 |
SZ | 虚拟内存大小 |
SS | 进程占用的物理内存的大小,以千字节为单位。 |
TART | 进程运行的起始时间。若超过24小时,则用天表示。 |
- 查找某个程序特定的程序
rimideiMac-10:test admin$ ps -ef|grep redis503 540 1 0 日03下午 ?? 0:08.94 /usr/local/opt/redis/bin/redis-server 0.0.0.0:6379
503 5403 4533 0 3:27下午 ttys001 0:00.00 grep redis
```
4. top – 显示任务
虽然 ps 命令能够展示许多计算机运行状态的信息,但是它只是提供,ps 命令执行时刻的机器状态快照。 为了看到更多动态的信息,我们使用 top 命令:
```
$ top
```
5. bg –
把一个任务放到后台执行
在后台运行程序 也可以使用 & 执行
6. kill – 给一个进程发送信号
```
kill 9527
```
7. shutdown – 关机或重启系统网络系统
- 说明:
当谈及到网络系统层面,几乎任何东西都能由 Linux 来实现。Linux 被用来创建各式各样的网络系统和装置, 包括防火墙,路由器,名称服务器,网络连接式存储设备等等 - ping - 发送 ICMP ECHO_REQUEST 软件包到网络主机
最基本的网络命令是 ping。这个 ping 命令发送一个特殊的网络数据包,叫做 IMCP ECHO_REQUEST,到 一台指定的主机。大多数接收这个包的网络设备将会回复它,来允许网络连接验证。
注意:大多数网络设备(包括 Linux 主机)都可以被配置为忽略这些数据包。通常,这样做是出于网络安全 原因,部分地遮蔽一台主机免受一个潜在攻击者地侵袭。配置防火墙来阻塞 IMCP 流量也很普遍
rimideiMac-10:test admin$ ping www.baidu.com
PING www.a.shifen.com (180.97.33.108): 56 data bytes
64 bytes from 180.97.33.108: icmp_seq=0 ttl=54 time=37.258 ms
64 bytes from 180.97.33.108: icmp_seq=1 ttl=54 time=37.536 ms
64 bytes from 180.97.33.108: icmp_seq=2 ttl=54 time=37.661 ms一旦启动,ping 命令会持续在特定的时间间隔内(默认是一秒)发送数据包,直到它被中断(按下组合键 Ctrl-c)
- traceroute - 打印到一台网络主机的路由数据包
这个 traceroute 程序(一些系统使用相似的 tracepath 程序来代替)会显示从本地到指定主机 要经过的所有“跳数”的网络流量列表
rimideiMac-10:test admin$ traceroute www.baidu.com
traceroute: Warning: www.baidu.com has multiple addresses; using 180.97.33.108
traceroute to www.a.shifen.com (180.97.33.108), 64 hops max, 52 byte packets
1 * * *
2 10.4.0.2 (10.4.0.2) 2.873 ms 1.298 ms 4.211 ms
3 1.163.70.125.broad.cd.sc.dynamic.163data.com.cn (125.70.163.1) 24.743 ms 3.445 ms
100.64.0.1 (100.64.0.1) 2.700 ms
4 220.167.87.201 (220.167.87.201) 44.881 ms 7.184 ms 3.658 ms
5 171.208.199.181 (171.208.199.181) 3.891 ms
171.208.199.237 (171.208.199.237) 6.653 ms
171.208.199.205 (171.208.199.205) 3.264 ms
6 202.97.66.194 (202.97.66.194) 36.510 ms
202.97.122.213 (202.97.122.213) 39.014 ms
202.97.29.253 (202.97.29.253) 31.803 ms
7 202.102.73.150 (202.102.73.150) 42.186 ms
202.102.69.250 (202.102.69.250) 34.208 ms
202.102.73.150 (202.102.73.150) 38.738 ms对于那些没有提供标识信息的路由器(由于路由器配置,网络拥塞,防火墙等 方面的原因),我们会看到几个星号
- netstat - 打印网络连接,路由表,接口统计数据,伪装连接,和多路广播成员
程序被用来检查各种各样的网络设置和统计数据。通过此命令的许多选项,我们 可以看看网络设置中的各种特性。使用“-ie”选项(或者ifconfig),我们能够查看系统中的网络接口:
rimideiMac-10:test admin$ ifconfiglo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
ether ac:87:a3:2a:ef:b5
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (none)
status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether b8:09:8a:c7:ac:e5
inet6 fe80::8a1:d9f6:338c:5833%en1 prefixlen 64 secured scopeid 0x6
inet 10.2.1.64 netmask 0xfffff800 broadcast 10.2.7.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active```
>第一个,叫做 eth0,是 因特网接口,和第二个,叫做 lo,是内部回环网络接口,它是一个虚拟接口,系统用它来 “自言自语” eth1 内网地址- wget - 非交互式网络下载器
wget www.baidu.comssh
- rsa加密算法
rsa算法是一种非对称的加密算法,他的最大特点就是公钥加密,私钥解密 - ssh-keygen
使用ssh-keygen生成一对公钥私钥对 - ssh 登录格式
ssh root@ip -p port - scp使用方式
scp root@ip -p port:文件路径 文件路径
查找文件
- locate – 通过名字来查找文件
locate 程序快速搜索路径名数据库,并且输出每个与给定字符串相匹配的文件名。比如说, 例如,我们想要找到所有名字以“zip”开头的程序。因为我们正在查找程序,可以假定包含 匹配程序的目录以“bin/”结尾。
[me@linuxbox ~]$ locate bin/zip
/usr/bin/zip
/usr/bin/zipcloak配合 grep 使用
[me@linuxbox ~]$ locate zip | grep bin
/bin/bunzip2
/bin/bzip2
/bin/bzip2recover- find – 在目录层次结构中搜索文件
locate 程序只能依据文件名来查找文件,而 find 程序能基于各种各样的属性, 搜索一个给定目录(以及它的子目录),来查找文件
rimideiMac-10:test admin$ find ~ -name 'redis'/Users/admin/.virtualenvs/django_drf_movie_rimi/lib/python3.6/site-packages/redis
```
>find 格式为 第一个是 从哪里开始查找 第二个查找的目标文件
```
$ find / -type l -name "*.txt"
```
> 查找为连接符号 并且名字以text结尾的文件
```
find / -type l -name "*.txt" -perm 777
```
> 查找为连接符号 并且名字以text结尾的文件,并且权限为777
```
find / -type l -name "*.txt" -user canvas
```
> 查找为连接符号 并且名字以text结尾的文件,并且文件拥有者为 canvas
```
find ~/project -name "*.py" -exec ls -l {} \;
```
>找到所有的py文件结尾的文件,并且执行exec这个命令 {}表示占位符 ;表示exec执行命令完毕,但是因为;是特殊符号,所以需要加上\;表示结束归档和备份
*.tar.gz和*.tgz用 tar -xzf 解压tar.xz用 tar -Jxvf 解压- 命令扩展解析
-x 解压
-J 有xz属性的 xz
-z:有gz属性的 gz
-f:使用档案本身的名字
-v: 显示所有过程 - 压缩 tar -czf jpg.tar.gz *.jpg 命令
软件包管理
- apt-get install
- 源文件,先进入源文件管理系统,拷贝源文件地址描述文件
cd /etc/apt
sudo cp sources.list sources.list.bak
sudo vi sources.list- 更新源
sudo apt-get update- 搜索软件
sudo apt-cache search softwareName- 删除软件
sudo apt-get remove softwareName磁盘管理
linux 磁盘挂载
mount 挂载一个磁盘
$mount使用Mount查看所有的挂载点
$umount使用umount 卸载挂载点
ubuntu挂载磁盘
$ umount /dev/sdb4
$ sudo mount /dev/sdb4 ~/volumes/test/这个时候 通过test文件夹就可以操作磁盘
附加: macos挂载(可读写)磁盘方式
$ diskutil umountDisk /dev/disk2s4取消挂载点
$ mkdir -p /Volumes/mytest
$ sudo mount_ntfs -o rw,nobrowse /dev/disk2s4 /Volumes/mytest/新建目录 从新挂载磁盘 选择可写方式
















