计算机软硬件体系结构是层状结构, 如下图:

操作系统是进行软硬件资源管理的软件
操作系统是系统软件, 不是硬件
负责管理协调硬件, 软件等计算机资源的工作
向上提供良好稳定的运行服务
先有的指令系统, 再有的图形化界面.
指令操作和图形化操作本质上没有区别, 只是形式上不同.
语法: ls[选项][目录或文件]
功能: 对于目录, 该命令列出该目录下的所有子目录与文件.对于文件, 将列出文件名以及其他信息.
ls列出当前目录的所有文件名

ls -l列出文件的详细信息, l 相当于 list
一般会直接 ll 简写
这是文件的属性列表, 包括文件权限, 大小, 文件名, 创建时间等等.

由此可以看到, 文件包括文件内容和文件属性
我们学习文件操作, 也就是学习对文件内容和文件属性的操作
文件内容可以为 0, 但是只要一个文件存在, 他一定会有文件属性.
虽然在 windows 中创建一个空文件, 打开属性设置显示该文件为 0 字节.

但是存储这些属性信息也是需要空间的, 所以一个空文件也是占据空间的.
ls -a 列出目录下的所有文件, 包括以 . 开头的隐含文件

在每个目录里, 都一定会有两个隐含文件:
一个是 ., 一个是 ..
.: 代表当前路径
..: 代表上级路径
关于路径
什么叫做路径呢?
在 Linux 下, 路径是由 / 进行间隔的一串字符串. 例如: /usr/bin
两斜杠之间一定是一个目录或者路径, 最后一个名称可能是文件或者目录
为什么要有路径呢? 为了唯一找到一个文件
Linux 整体目录是一个多叉树的样子

根据树的结构可以得到以下结论:
- 叶子结点一定是普通文件或者空文件夹
- 非叶子结点一定是目录
- 访问一个文件的本质, 就是先通过路径找到文件本身
- 路径的本质就是多叉树搜索路径
- 每个结点只有一个父结点, 向上具有唯一性, 反过来向下也就具有唯一性. 根据唯一的路径可以找到目标文件.
绝对路径: 从根目录开始的形成的路径(无论处在哪里, 都能唯一锁定一个文件)
/root/usr/bin/
相对路径: 相对于自身所处目录为参考点的路径.例如上图, 现在所处bit目录, 想访问到passwd的路径是: ../etc/passwd
使用 tree 指令, 就可以看到指定目录的树状图

ls -d 将目录像文件一样显示, 而不是显示其下的文件.
一般会配合 -l, 这样就可以看到指定目录的属性信息了

ll -d / 也可以看到显示出了信息, / 是系统的根目录

语法: pwd
功能: 显示用户当前所在的目录
pwd 全称为 print work direction
会显示自根目录到当前目录的路径

语法: cd 目录名
功能: 改变工作目录. 将当前工作目录改变到指定的目录下
cd .. 返回上级目录

cd /usr/bin 按绝对路径访问

cd ../test_02 按相对路径访问

cd ~ 进入用户家目录
此时的用户是 root , 直接进入 root 下的目录 /root
若是普通用户, 则会进入 /home/xxx

默认登陆的时候, 默认登陆时所处的路径就是当前家目录.
在 windows 就是桌面, 桌面也是一个文件夹, 叫 /Desktop
cd - 返回最近访问目录

语法: touch[选项]...文件...
功能: touch 命令参数可更改文档或目录的日期时间, 包括存取时间和更改时间, 或者新建一个不存在的文件.
touch file1.txt 在当前目录下创建一个名为 file1.txt 的空文件

语法: mkdir[选项]dirname
功能: 在当前目录下创建一个名为 dirname 的目录
mkdir 1 在当前目录下创建一个名为 1 的空目录

mkdir -p a/b/c 递归建立 a/b/c 目录

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 ./* 删除当前目录的所有文件, 不删除隐藏文件
* 是通配符, 指指定路径下的所有文件

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, 为什么环境里没有呢, 这里就要引入三种开发环境.
开发三种环境
一般来说, 各厂商提供的云服务器都是生产环境, 是非常干净的操作系统, 不会安装开发强相关的工具, 这里的 man-pages 就是一种.
man man 查看 man 的相关资料

man 3 printf 查看库函数中 printf 的资料

语法: cp[选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp 指令用于复制文件或目录, 如同时指定两个或两个以上的文件或目录, 且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中. 若同时指定多个文件和目录, 而最后的目的地并非一个已存在的目录, 则会出现错误信息.
cp -f 强制复制文件或目录, 不论目的文件或者目录是否存在

cp -i 覆盖文件前先询问用户

cp -r 递归处理目录

拷贝不会拷贝隐藏文件, 因为
- 如果用户知道要拷贝隐藏文件, 肯定会手动拷贝
- 如果用户不知道隐藏文件的存在, 肯定不会想拷贝它们
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 移动多个文件到已存在目录

对指令重命名.
语法: alise [指定命令]='[命令+选项]'
命令的本质就是可执行文件
例如, 在 /usr/bin 里存放的都是指令, 都是可执行文件

yum 就是 python 写的

比如写了一个打印 HelloLinux 的程序

可以使用 alias 指令将其修改为 hello

如果不将 alias hello='./test' 放在配置文件 ~/.bashrc 中, 重启终端该指令就会失效.
echo 默认将输入的字符串输出到显示器上

echo [内容] > [文件名] 可以将内容输出重定向入指定文件中, 如果该文件不存在, 会自动创建一个.

Linux 下一切皆文件
通过 > 输出重定向, 本来应该是在显示器上显示的, 现在显示在文件当中.
向显示器打印就是向显示器文件的内容写入.
键盘写入文件的同时回显在显示器上, 显示器的读方法是空, 键盘的写方法是空.
那么各种各样的设备, 都有读方法和写方法.
大部分硬件也都有读方法, 有些硬件的写方法为空.
Linux 就想用统一思想来解决读写文件和设备.
Linux 设计者设计了Linux 下一切皆文件的设计理念.
虽然提高了 Linux 系统的编码维护成本, 但是更为统一方便.
注: 直接 >[文件名] 可以创建新文件或者清空一个文件

重定向会覆盖历史内容, 不想覆盖可以使用追加重定向 >>
echo "111111" >> c 追加一行内容到 c

语法: cat[选项][文件]
功能: 查看文件的内容
常用选项:
-b对非空输出行编号-n对输出的所有行编号-s不输出多行空行
cat c

cat -b c

cat -n c

cat -s c

cat 不跟文件名 输入什么, cat 就打印什么

cat 从键盘读取了什么, 就向显示器文件显示什么.
默认读取的时候是从键盘文件中读入的, 如果添上了文件就是从文件中读入的.
也就是说 cat 文件 相当于 cat < 文件 把本来应该从键盘读取的内容改为从普通文件进行输入
总结:
> 按 w 打开
>> 按 a 打开
< 按 r 打开
语法: more[选项][文件]
功能: more 命令, 功能类似于 cat
常用选项:
-n对输入的所有行编号q退出 more
但 more 只能按回车, 不推荐使用
less工具也是对文件或其他输入进行分页显示的工具, 应该说是 Linux 正统查看文件内容的工具, 功能极其强大.less的用法比起more更加的有弹性. 在more的时候, 我们并没有办法向前翻, 只能向后看- 但若使用了
less时, 就可以使用[pageup][pagedown]等按键的功能能来往前往后翻看文件, 更容易用来查看一个文件的内容.- 除此之外, 在
less里头可以拥有更多的搜索功能, 不止可以向下搜, 也可以向上搜.
语法: less[参数] 文件
功能: less 与 more 类似, 但是 less 可以随意浏览文件.
选项:
-i忽略搜索时的大小写-N显示每行的行号/字符串向下搜索"字符串"的功能?字符串向上搜索"字符串"的功能n重复前一个搜索N反向重复前一个搜索qquit
head 与 tail 就像他的名字一样的浅显易懂, 它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的开头至标准输出中, 而 tail 想当然就是看档案的结尾.
语法 head[参数]...[文件]...
功能 head 用来显示档案的开头至标准输出中, 默认 head 命令打印其相应文件的开头 10 行
选项
-n<行数>显示的行数
head file.txt

head -3 file.txt

tail 命令从指定点开始将文件写道标准输出.
使用 tail 命令的 -f 选项可以方便的查阅正在改变的日志文件, tail -f filename 会把 filename 里最尾部的内容显示在屏幕上, 并且不断刷新, 使你看到最新的文件内容.
语法 tail[必要参数][选择参数][文件]
功能 用于显示指定文件末尾内容, 不指定文件时, 作为输入信息进行处理. 常用查看日志文件.
选项
-f循环读取-n<行数>显示行数

关于命令行管道
如果想显示第 8001 - 8010 行该怎么办呢
第一种想法:
先用 head 把前 8010 行的内容输入重定向至一个 tmep 文件
再用 tail 把最后 10 行显示出来

但是这样会多出一个中间文件
第二种想法
使用管道, 直接将前一条命令的输出交给第二条指令的输入

head 默认是输入重定向至显示器文件, 而 | 是一个管道, 将本应放入显示器文件的内容放入管道中, 再使用 tail 指令将管道文件中的内容作为输入.
这是一种流水线作业处理.
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 的午夜)开始所经过的秒数, 不考虑闰秒.
关于软件开发的日志与时间戳
Unix 时间戳是 1970-1-1 午夜 到现在所经过的秒数, 这表示时间戳是 递增且可以进行范围查找的
时间可以完美运用在日志中, 日志是辅助程序员进行问题排查的.
程序会定时打印软件的情况, 如果程序挂掉, 程序员就可以通过日志了解到程序挂掉的信息, 其中就包括很重要的时间信息.
日志等级分为: DEBUG, Normal, Warning, Fatal.
cal 指令可以用来显示(阳历)日历. 公历是现在国际通用的历法.
命令格式 cal[参数][月份][年份]
功能 用于查看日历等时间信息, 如只有一个参数, 则表示年份, 如有两个参数, 则表示月份和年份.
常用选项
-3显示系统前一个月, 当前月, 下一个月的月历
-j显示在当年中的第几天
-y显示当前年份的日历


- Linux 下
find命令在目录结构中搜索文件, 并执行指定的操作.- Linux 下
find命令提供了相当多的查找条件, 功能很强大. 由于find具有强大的功能, 所以它的选项也很多.
语法 find pathname -options
功能 用于在文件树中查找文件, 并作出相应的处理(可能访问磁盘)
常用选项 -name 按照文件名查找文件, 支持 * 和 ?

第一次查的时候需要慢慢找,如果短时间内还要查找同一名称的文件,速度会快很多,因为之前的结果被放在了缓存中。
which 可以查指令

whereis 可以查包含指令在内的文档、库。

语法 grep[选项]搜寻字符串 文件
功能 在文件中搜索字符串, 将找到的行打印出来
grep 'A' c 在 c 文件中查找 ‘A’ 贪心策略查找

grep -i 'A' c 忽视大小写

grep -n 顺便输出行号

grep -v 反响选择,显示没有符合的那一行

grep 与管道结合可以更好的查找到需要的信息
例如: ps ajx | grep 'sleep' 查找睡眠进程

按顺序显示文件内容
sort c

sort -r c 逆向排序

相邻重复行进行压缩, 只会显示一行
uniq c

uniq -u 仅显示出现一次的行

uniq -d 仅显示出现多次的行

uniq -c 去重并统计重复行
那么结合 sort 、 uniq指令和管道 就可以把重复行去重

结合上面的几个查看文件内容的相关指令,如果要查看出现 1 的不重复行的行数,以下指令即可
cat c | grep '1' | sort | unique | wc -l

语法 zip 压缩文件.zip 目录或文件
功能 将目录或文件压缩成 zip 格式
常用选项
-r递归处理,将指定目录下的所有文件和子目录一并处理
zip -r test_01.zip test_01/ 将 test_01 所有文件夹打包

unzip test_01.zip -d ./tmp

在 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 解包解压显示过程制定目录(目录必须存在)
语法 uname [选项]
功能 uname 用来获取电脑和操作系统的相关信息
补充说明 uname 可显示linux主机所用的操作系统的版本, 硬件的名称等基本信息.
uname -a 显示体系结构信息
体系结构信息, 狭义上指CPU架构(x86…), 广义上指 软件+硬件的体系结构
uname -a

cat /etc/redhat-release 商业化发行版

cat /proc/cpuinfo CPU信息

cat /proc/meminfo 内存信息

[TAB] 按键—具有[命令补全]和[档案补齐]的功能
[Ctrl]-c 按键—让当前的程序[停掉]
[Ctrl]-d 按键—[键盘输入结束(EOF)]或者exit
[history]查看历史输入的命令
◆ 安装和登录命令: 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。
本章完.