文章目录
- 一. 操作系统简述
- 二. Linux 下基本指令
- 01. ls 指令
- 补充知识点 1 (关于路径)
- 02. pwd 指令
- 03. cd 指令
- 04. touch 指令
- 05. mkdir 指令
- 06. rmdir 指令 && rm 指令
- 07. man 指令
- 补充知识点 2 (开发三种环境)
- 08. cp 指令
- 09. mv 指令
- 10. alise 指令
- 补充知识点 3 (命令的本质)
- 11. echo 指令
- 补充知识点 4 (Linux下一切皆文件)
- 12. cat 指令
- 13. more 指令
- 14. less 指令
- 15. head 指令
- 16. tail 指令
- 补充知识点 5 (命令行管道)
- 17. 时间相关的指令
- 补充知识点 6 (日志与时间戳)
- 18. Cal 指令
- 19. find 指令
- 20. grep 指令
- 21. sort 指令
- 22. uniq指令
- 23. zip/unzip 指令
- 24. tar 指令
- 25. uname -r 指令
- 26. 其他一些获取系统信息的指令
- 27. 重要的几个热键
- 28. 扩展命令
一. 操作系统简述
计算机软硬件体系结构是层状结构, 如下图:
操作系统是进行软硬件资源管理的软件
操作系统是系统软件, 不是硬件
负责管理协调硬件, 软件等计算机资源的工作
向上提供良好稳定的运行服务
二. Linux 下基本指令
先有的指令系统, 再有的图形化界面.
指令操作和图形化操作本质上没有区别, 只是形式上不同.
01. ls 指令
语法: ls[选项][目录或文件]
功能: 对于目录, 该命令列出该目录下的所有子目录与文件.对于文件, 将列出文件名以及其他信息.
ls
列出当前目录的所有文件名
ls -l
列出文件的详细信息, l 相当于 list
一般会直接 ll
简写
这是文件的属性列表, 包括文件权限, 大小, 文件名, 创建时间等等.
由此可以看到, 文件包括文件内容和文件属性
我们学习文件操作, 也就是学习对文件内容和文件属性的操作
文件内容可以为 0, 但是只要一个文件存在, 他一定会有文件属性.
虽然在 windows 中创建一个空文件, 打开属性设置显示该文件为 0 字节.
但是存储这些属性信息也是需要空间的, 所以一个空文件也是占据空间的.
ls -a
列出目录下的所有文件, 包括以 .
开头的隐含文件
在每个目录里, 都一定会有两个隐含文件:
一个是 .
, 一个是 ..
.
: 代表当前路径
..
: 代表上级路径
补充知识点 1 (关于路径)
关于路径
什么叫做路径呢?
在 Linux 下, 路径是由 /
进行间隔的一串字符串. 例如: /usr/bin
两斜杠之间一定是一个目录或者路径, 最后一个名称可能是文件或者目录
为什么要有路径呢? 为了唯一找到一个文件
Linux 整体目录是一个多叉树的样子
根据树的结构可以得到以下结论:
- 叶子结点一定是普通文件或者空文件夹
- 非叶子结点一定是目录
- 访问一个文件的本质, 就是先通过路径找到文件本身
- 路径的本质就是多叉树搜索路径
- 每个结点只有一个父结点, 向上具有唯一性, 反过来向下也就具有唯一性. 根据唯一的路径可以找到目标文件.
绝对路径: 从根目录开始的形成的路径(无论处在哪里, 都能唯一锁定一个文件)
/root/usr/bin/
相对路径: 相对于自身所处目录为参考点的路径.例如上图, 现在所处bit目录, 想访问到passwd的路径是: ../etc/passwd
使用 tree
指令, 就可以看到指定目录的树状图
ls -d
将目录像文件一样显示, 而不是显示其下的文件.
一般会配合 -l
, 这样就可以看到指定目录的属性信息了
ll -d /
也可以看到显示出了信息, /
是系统的根目录
02. pwd 指令
语法: pwd
功能: 显示用户当前所在的目录
pwd
全称为 print work direction
会显示自根目录到当前目录的路径
03. cd 指令
语法: cd 目录名
功能: 改变工作目录. 将当前工作目录改变到指定的目录下
cd ..
返回上级目录
cd /usr/bin
按绝对路径访问
cd ../test_02
按相对路径访问
cd ~
进入用户家目录
此时的用户是 root
, 直接进入 root
下的目录 /root
若是普通用户, 则会进入 /home/xxx
默认登陆的时候, 默认登陆时所处的路径就是当前家目录.
在 windows 就是桌面, 桌面也是一个文件夹, 叫 /Desktop
cd -
返回最近访问目录
04. touch 指令
语法: touch[选项]...文件...
功能: touch
命令参数可更改文档或目录的日期时间, 包括存取时间和更改时间, 或者新建一个不存在的文件.
touch file1.txt
在当前目录下创建一个名为 file1.txt
的空文件
05. mkdir 指令
语法: mkdir[选项]dirname
功能: 在当前目录下创建一个名为 dirname
的目录
mkdir 1
在当前目录下创建一个名为 1
的空目录
mkdir -p a/b/c
递归建立 a/b/c 目录
06. rmdir 指令 && rm 指令
rmdir
是一个与mkdir
相对应的指令. mkdir
时建立目录, 而rmdir
是删除目录
语法: rmdir[-p][dirName]
适用于对象: 具有当前目录操作权限的所有使用者
功能: 删除空目录
rmdir a
失败
rmdir 1
成功
rm 命令可以同时删除文件或目录
语法: rm[-f-i-r-v][dirName/dir]
适用对象: 所有使用者
功能: 删除文件或目录
rm file1.txt
删除 file1.txt
文件
rm -f
不用询问就能删除
rm -r
递归的删除目录下所有文件
递归删除相当于深度优先遍历叶子结点, 返回时删除
rm -rf ./*
删除当前目录的所有文件, 不删除隐藏文件
*
是通配符, 指指定路径下的所有文件
07. man 指令
Linux 的命令有很多参数, 我们不可能全部都记住, 可以通过联机手册获取帮助. 访问 Linux 手册的指令是 man
语法: man[选项]命令
常用选项:
-k
: 根据关键字搜索联机帮助num
: 只在 num 章节找-a
: 将所有的章节都显示出来
解释一下,面手册分为 8 章
1 是普通的命令
2 是系统调用,如 open,write 之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文
件)
3 是库函数,如 printf,fread4 是特殊文件,也就是/dev 下的各种设备文件
5 是指文件的格式,比如 passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向 environ 这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由 root 使用,如 ifconfig
如果使用 man
找不到某个章节, 输入指令 yum install -y man-pages
, 为什么环境里没有呢, 这里就要引入三种开发环境.
补充知识点 2 (开发三种环境)
开发三种环境
- 开发环境
- 测试环境
- 生产环境: 真实线上环境, 写完测完真正给用户提供服务的地方, 不能随便动.
一般来说, 各厂商提供的云服务器都是生产环境, 是非常干净的操作系统, 不会安装开发强相关的工具, 这里的 man-pages
就是一种.
man man
查看 man 的相关资料
man 3 printf
查看库函数中 printf
的资料
08. cp 指令
语法: cp[选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp
指令用于复制文件或目录, 如同时指定两个或两个以上的文件或目录, 且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中. 若同时指定多个文件和目录, 而最后的目的地并非一个已存在的目录, 则会出现错误信息.
cp -f
强制复制文件或目录, 不论目的文件或者目录是否存在
cp -i
覆盖文件前先询问用户
cp -r
递归处理目录
拷贝不会拷贝隐藏文件, 因为
- 如果用户知道要拷贝隐藏文件, 肯定会手动拷贝
- 如果用户不知道隐藏文件的存在, 肯定不会想拷贝它们
09. mv 指令
mv
命令是 move
的缩写, 可以用来移动文件或者将文件改名(move (rename) files), 是 Linux 系统下常用的命令, 经常用来备份文件或者目录.
语法: mv[选项] 源文件或目录 目标文件或目录
功能:
- 视
mv
命令中第二个参数的类型不同(是目标文件还是目标目录),mv
命令将文件重命名或将其移至一个新的目录 - 当第二个参数类型是文件时,
mv
命令完成文件重命名. 此时, 源文件只能有一个(也可以是原目录名), 它将所给的源文件或者目录重命名为给定的目标文件名. - 当第二个参数是已存在的目录名称时, 源文件或目录参数可以有多个,
mv
命令将各参数指定的源文件均移至目标目录中
常用选项
-f
如果目标文件已经存在, 不会询问直接覆盖
-i
如果目标文件已经存在, 就会询问是否覆盖
mv file.txt file1.txt
将 file.txt
改名为 file1.txt
mv a aa
将 a
改名为 aa
mv file1.txt try_grep aa/b
移动多个文件到已存在目录
10. alise 指令
对指令重命名.
语法: alise [指定命令]='[命令+选项]'
补充知识点 3 (命令的本质)
命令的本质就是可执行文件
例如, 在 /usr/bin
里存放的都是指令, 都是可执行文件
yum
就是 python 写的
比如写了一个打印 HelloLinux
的程序
可以使用 alias
指令将其修改为 hello
如果不将 alias hello='./test'
放在配置文件 ~/.bashrc
中, 重启终端该指令就会失效.
11. echo 指令
echo
默认将输入的字符串输出到显示器上
echo [内容] > [文件名]
可以将内容输出重定向入指定文件中, 如果该文件不存在, 会自动创建一个.
补充知识点 4 (Linux下一切皆文件)
Linux 下一切皆文件
通过 >
输出重定向, 本来应该是在显示器上显示的, 现在显示在文件当中.
向显示器打印就是向显示器文件的内容写入.
键盘写入文件的同时回显在显示器上, 显示器的读方法是空, 键盘的写方法是空.
那么各种各样的设备, 都有读方法和写方法.
大部分硬件也都有读方法, 有些硬件的写方法为空.
Linux 就想用统一思想来解决读写文件和设备.
Linux 设计者设计了Linux 下一切皆文件的设计理念.
虽然提高了 Linux 系统的编码维护成本, 但是更为统一方便.
注: 直接 >[文件名]
可以创建新文件或者清空一个文件
重定向会覆盖历史内容, 不想覆盖可以使用追加重定向 >>
echo "111111" >> c
追加一行内容到 c
12. cat 指令
语法: cat[选项][文件]
功能: 查看文件的内容
常用选项:
-b
对非空输出行编号-n
对输出的所有行编号-s
不输出多行空行
cat c
cat -b c
cat -n c
cat -s c
cat 不跟文件名
输入什么, cat
就打印什么
cat
从键盘读取了什么, 就向显示器文件显示什么.
默认读取的时候是从键盘文件中读入的, 如果添上了文件就是从文件中读入的.
也就是说 cat 文件
相当于 cat < 文件
把本来应该从键盘读取的内容改为从普通文件进行输入
总结:
>
按 w 打开
>>
按 a 打开
<
按 r 打开
13. more 指令
语法: more[选项][文件]
功能: more
命令, 功能类似于 cat
常用选项:
-n
对输入的所有行编号q
退出 more
但 more
只能按回车, 不推荐使用
14. less 指令
less
工具也是对文件或其他输入进行分页显示的工具, 应该说是 Linux 正统查看文件内容的工具, 功能极其强大.less
的用法比起more
更加的有弹性. 在more
的时候, 我们并没有办法向前翻, 只能向后看- 但若使用了
less
时, 就可以使用[pageup][pagedown]等按键的功能能来往前往后翻看文件, 更容易用来查看一个文件的内容.- 除此之外, 在
less
里头可以拥有更多的搜索功能, 不止可以向下搜, 也可以向上搜.
语法: less[参数] 文件
功能: less
与 more
类似, 但是 less
可以随意浏览文件.
选项:
-i
忽略搜索时的大小写-N
显示每行的行号/字符串
向下搜索"字符串"的功能?字符串
向上搜索"字符串"的功能n
重复前一个搜索N
反向重复前一个搜索q
quit
15. head 指令
head
与 tail
就像他的名字一样的浅显易懂, 它是用来显示开头或结尾某个数量的文字区块, head
用来显示档案的开头至标准输出中, 而 tail
想当然就是看档案的结尾.
语法 head[参数]...[文件]...
功能 head
用来显示档案的开头至标准输出中, 默认 head
命令打印其相应文件的开头 10 行
选项
-n<行数>
显示的行数
head file.txt
head -3 file.txt
16. tail 指令
tail
命令从指定点开始将文件写道标准输出.
使用 tail
命令的 -f
选项可以方便的查阅正在改变的日志文件, tail -f filename
会把 filename
里最尾部的内容显示在屏幕上, 并且不断刷新, 使你看到最新的文件内容.
语法 tail[必要参数][选择参数][文件]
功能 用于显示指定文件末尾内容, 不指定文件时, 作为输入信息进行处理. 常用查看日志文件.
选项
-f
循环读取-n<行数>
显示行数
补充知识点 5 (命令行管道)
关于命令行管道
如果想显示第 8001 - 8010 行该怎么办呢
第一种想法:
先用 head
把前 8010 行的内容输入重定向至一个 tmep 文件
再用 tail
把最后 10 行显示出来
但是这样会多出一个中间文件
第二种想法
使用管道, 直接将前一条命令的输出交给第二条指令的输入
head
默认是输入重定向至显示器文件, 而 |
是一个管道, 将本应放入显示器文件的内容放入管道中, 再使用 tail
指令将管道文件中的内容作为输入.
这是一种流水线作业处理.
17. 时间相关的指令
date 显示
date
指定格式显示时间 date +%Y%m%d
date
用法 date[OPTION]...[+FORMAT]
在显示方面, 使用着可以设定欲显示的格式, 格式设定为一个加号后接数个标记, 其中常用的标记列表如下
%H
: 小时
%M
: 分钟
%S
: 秒
%X
: 相当于%H:%M:%S
>%d
: 日
%m
: 月份
%Y
: 年份
%F
: 相当于%Y-%m-%d
时间戳
时间->时间戳:date + %s
时间戳->时间: date -d@0
, 得到时间戳为 0 的时间
Unix 时间戳是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数, 不考虑闰秒.
补充知识点 6 (日志与时间戳)
关于软件开发的日志与时间戳
Unix 时间戳是 1970-1-1 午夜 到现在所经过的秒数, 这表示时间戳是 递增且可以进行范围查找的
时间可以完美运用在日志中, 日志是辅助程序员进行问题排查的.
程序会定时打印软件的情况, 如果程序挂掉, 程序员就可以通过日志了解到程序挂掉的信息, 其中就包括很重要的时间信息.
日志等级分为: DEBUG, Normal, Warning, Fatal.
18. Cal 指令
cal
指令可以用来显示(阳历)日历. 公历是现在国际通用的历法.
命令格式 cal[参数][月份][年份]
功能 用于查看日历等时间信息, 如只有一个参数, 则表示年份, 如有两个参数, 则表示月份和年份.
常用选项
-3
显示系统前一个月, 当前月, 下一个月的月历
-j
显示在当年中的第几天
-y
显示当前年份的日历
19. find 指令
- Linux 下
find
命令在目录结构中搜索文件, 并执行指定的操作.- Linux 下
find
命令提供了相当多的查找条件, 功能很强大. 由于find
具有强大的功能, 所以它的选项也很多.
语法 find pathname -options
功能 用于在文件树中查找文件, 并作出相应的处理(可能访问磁盘)
常用选项 -name
按照文件名查找文件, 支持 *
和 ?
第一次查的时候需要慢慢找,如果短时间内还要查找同一名称的文件,速度会快很多,因为之前的结果被放在了缓存中。
which
可以查指令
whereis
可以查包含指令在内的文档、库。
20. grep 指令
语法 grep[选项]搜寻字符串 文件
功能 在文件中搜索字符串, 将找到的行打印出来
grep 'A' c
在 c 文件中查找 ‘A’ 贪心策略查找
grep -i 'A' c
忽视大小写
grep -n
顺便输出行号
grep -v
反响选择,显示没有符合的那一行
grep
与管道结合可以更好的查找到需要的信息
例如: ps ajx | grep 'sleep'
查找睡眠进程
21. sort 指令
按顺序显示文件内容
sort c
sort -r c
逆向排序
22. uniq指令
相邻重复行进行压缩, 只会显示一行
uniq c
uniq -u
仅显示出现一次的行
uniq -d
仅显示出现多次的行
uniq -c
去重并统计重复行
那么结合 sort
、 uniq
指令和管道 就可以把重复行去重
结合上面的几个查看文件内容的相关指令,如果要查看出现 1 的不重复行的行数,以下指令即可
cat c | grep '1' | sort | unique | wc -l
23. zip/unzip 指令
语法 zip 压缩文件.zip 目录或文件
功能 将目录或文件压缩成 zip
格式
常用选项
-r
递归处理,将指定目录下的所有文件和子目录一并处理
zip -r test_01.zip test_01/
将 test_01
所有文件夹打包
unzip test_01.zip -d ./tmp
24. tar 指令
在 Linux, 更多的是用到 tar
指令, 这个指令既包括打包, 也包括解包
与 tar
指令相关的文件是 .tar.gz
也可写成 .tgz
tar -czf xxx.tgz xxx
打包压缩指名
tar -xzf xxx.tgz
解包解压默认包名
tar -cvzf xxx.tgz xxx
显示过程
tar -xvzf xxx.tgz
显示过程
tar -xvzf xxx.tgz -C xxx
解包解压显示过程制定目录(目录必须存在)
25. uname -r 指令
语法 uname [选项]
功能 uname
用来获取电脑和操作系统的相关信息
补充说明 uname
可显示linux主机所用的操作系统的版本, 硬件的名称等基本信息.
uname -a
显示体系结构信息
体系结构信息, 狭义上指CPU架构(x86…), 广义上指 软件+硬件的体系结构
uname -a
26. 其他一些获取系统信息的指令
cat /etc/redhat-release
商业化发行版
cat /proc/cpuinfo
CPU信息
cat /proc/meminfo
内存信息
27. 重要的几个热键
[TAB] 按键—具有[命令补全]和[档案补齐]的功能
[Ctrl]-c 按键—让当前的程序[停掉]
[Ctrl]-d 按键—[键盘输入结束(EOF)]或者exit
[history]查看历史输入的命令
28. 扩展命令
◆ 安装和登录命令: login、 shutdown、 halt、 reboot、 install、 mount、 umount、 chsh、 exit、 last;
◆ 文件处理命令: file、 mkdir、 grep、 dd、 find、 mv、 ls、 diff、 cat、 ln;
◆ 系统管理相关命令: df、 top、 free、 quota、 at、 lp、 adduser、 groupadd、 kill、 crontab;
◆ 网络操作命令: ifconfig、 ip、 ping、 netstat、 telnet、 ftp、 route、 rlogin、 rcp、 finger、 mail、 nslookup;
◆ 系统安全相关命令: passwd、 su、 umask、 chgrp、 chmod、 chown、 chattr、 sudo ps、 who;
◆ 其它命令: tar、 unzip、 gunzip、 unarj、 mtools、 man、 unendcode、 uudecode。
本章完.