虚拟机安装教程:https://blog.csdn.net/qq_41805715/article/details/100026299
CentOS安装教程:https://blog.csdn.net/qq_41805715/article/details/100026502
一. linux是什么?操作系统/应用程序?
linux就是一个操作系统,如window、unix、Mac OS
计算机主机由一堆硬件组成,为了有效地控制这些硬件资源,于是乎就有操作系统的产生。操作系统除了有效地控制这些硬件资源的分配,并提供计算机运行所需的功能(如网络功能)之外,为了要提供程序员更容易开发软件的环境,所以操作系统也会一整组系统调用接口来给程序员开发用。
内核与硬件的关系非常紧密,早期的linux是针对386的计算机来开发的,由于linux只是一个操作系统,并不含有其他的应用程序,因此工程师在在下了linux之后,只是使计算机Ready,接下来接下来高级工程师再根据自己的需求,在Linux上安装其所需要的软件。
二. linux是一个操作系统,那什么是操作系统呢?
如果能够将所有硬件驱动,并且提供一个软件的参考接口来给工程师进行开发,开发软件的工作就会变得简单,这就是操作系统。
从上图可以看出操作系统包括内核和系统调用两部分。
内核(Kernel)
操作系统(Operating System,OS)其实也是一组程序,这组程序的重点在于管理电脑的所有活动(如cpu分配)及驱动系统中的所有硬件。
让CPU可以开始判断逻辑与运算数值,让硬盘可以被存取,让网卡可以开始传输数据,让所有的外置设备可以运转,这些功能就是操作系统的内核完成的。
内核主要管理硬件与提供相关的功能(如读写硬盘、网络功能、CPU资源分配等),这些管理操作非常重要,若用户直接能够使用内核的话,万一用户不小心将内核程序停止或破坏,将导致整个系统的崩溃。因此内核程序放置到内存当中的区块是受保护的,并且启动后一直常驻在内存中。
内核功能是什么呢?
- 系统调用接口(System Call Interface)
提供简易的接口方便程序员利用硬件资源。
- 进程管理(Process control)
管理多个任务,让CPU的资源作有效分配。
- 内存管理(Memory management)
提供虚拟内存功能,当内存不足时提供交换分区(swap)功能。
- 文件系统管理(Filesystem management)
管理文件的输入与输出工作(I/O),不同文件格式支持。如win98不支持NTFS
- 设备驱动(Device drivers)
驱动硬件设备,最核心工作。
系统调用(System Call)
既然硬件是内核管理的,那么想要开发应用程序就必须参考内核的功能,将从参考硬件函数变为参考内核,还是很麻烦。
操作系统通常会提供一套应用程序编程接口(Application Programming Interface,API)给程序员开发软件,开发人员只要遵守API开发软件即可。如我们学习C语言,只需要参考C语言的函数,不用考虑内核相关功能,内核的系统调用会将C语言的相关语法转成内核可以了解的函数。
驱动程序
驱动程序是操作系统中相当重要的一环。不过硬件在持续进步,包括主板、显卡、硬盘等。较晚退出的较新的硬件,例如显卡,操作系统自然不支持。
操作系统该如何驱动这块新的显卡呢?
API给硬件开发商,让他们可以根据这个接口,设计可以驱动硬件的驱动程序。
几个关键概念的介绍!!!
操作系统的内核层直接参考硬件规格写成,所以同一个操作系统程序不能够在不一样的硬件架构下运行。
操作系统只是管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统等。即仅让电脑Ready,真正实现功能的是应用程序软件。
应用程序的开发都是参考操作系统提供的API,所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上运行。
三. linux的常用命令
命令行模式下命令的执行:
命令行模式登录后所运行的程序被称为壳(Shell),这是因为这个程序负责最外面跟用户沟通,所以才被戏称为壳程序。
[sl@aubin~]$ command [-options] parameter1 parameter2 ...
指令 选项 参数(1) 参数(2)
(1)一行指令中第一个输入的部分绝对是『命令(command)』或『可执行文件(例如Shell脚本)』
(2)command 为命令的名称,例如变换工作目录的命令为 cd 等等;
(3)中刮号[]并不存在于实际的指令中,而加入选项设定时,通常选项前会带 - 号,例如 -h;有时候会使用选项的完整全名,则选项前带有 -- 符号,例如 --help;
(4)parameter1 parameter2.. 为依附在选项后面的参数,或者是 command 的参数;
(5)命令, 选项, 参数等这几个东西中间以空格来区分,不论空几格 shell 都视为一格;
(6)按下[Enter]按键后,该指令就立即执行。[Enter]按键代表著一行指令的开始启动。
(7)指令太长的时候,可以使用反斜线 (\) 来跳脱[Enter]符号,使指令连续到下一行。
(8)在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。
基本命令操作:
1. ls列出文件
ls -a:所有的文件列出来,包括隐藏文件
ls -al:详细信息列出来
2. date:日期
date:+%Y/%m/%d按照格式输出
[sl@aubin ~]$ date +%Y/%m/%d
2019/08/23
date +%H:%M
date --help:帮助文档
man date:详细的帮助文档
3. cal:日历
cal 2018
cal 10 2018
cal 13 2018
4. bc:计算,输入计算公式,退出:quit命令
5. sudo passwd root:设置密码
su:切换到超级用户
6. shutdown -h now:立刻关机,其中 now 相当于时间为 0 的状态
shutdown -h 20:13:系统在今天的 20:25 分会关机,若在21:25才下达此指令,则隔天才关机
shutdown -h +10:系统再过十分钟后自动关机
shutdown -r now:系统立刻重新启动
shutdown -r +30 'The system will reboot':再过三十分钟系统会重新启动,并显示后面的讯息给所有在在线的使用者
shutdown -k now 'This system will reboot':仅发出警告信件的参数!系统并不会关机啦!吓唬人!
7. 观察系统的使用可以用【who】命令
8. 查看网络连接状态,可以执行【netstat -a】命令
9. 查看后台执行程序可以执行【ps -aux】命令
10. 数据同步写入磁盘命令【sync】
11. linux是多人多任务系统,不能随便关机
注:系统是单人多任务的情况,即使你的计算机关闭,别人不受影响。Linux是多人多任务系统,每个程序(或说是服务)都是在后台执行,因此,在你看不到的屏幕后其实可能有相当多人同时在你的主机上工作,直接关机,会导致其他人的文件数据中断。
linux的文件权限:
1.用户与用户组
linux 最优秀的地方之一就在于它的多人多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux一般将文件可读写的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。
文件拥有者:
初次接触Linux的朋友大概会觉得很怪异,怎么『Linux有这么多用户, 还分什么用户组,有什么用?』。这个『用户与用户组』的功能是相当健全而好用的一个安全防护呢!
由于Linux是个多人多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这个『文件拥有者』的角色就显的相当的重要了!
用户组:
用户组最有用的功能之一,就是当你在团队开发资源的时候啦! 举例来说,假设有两组专题生在我的主机里面,第一个专题组别为projecta,里面的成员有 class1, class2, class3三个;第二个专题组别为projectb,里面的成员有class4, class5, class6。 这两个专题之间是有竞争性质的,但却要缴交同一份报告。每组的组员之间必须要能够互相修改对方的资料, 但是其他组的组员则不能看到本组自己的文件内容,此时该如何是好?
Linux底下这样的限制是很简单啦!我可以经由简易的文件权限设定,就能限制非自己团队(亦即是用户组) 的其他人不能够阅览内容!而且亦可以让自己的团队成员可以修改我所建立的文件! 同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的文文件资料。
另外,如果teacher这个帐号是projecta与projectb这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个用户组的权限时,你可以设定teacher这个帐号, 『同时支援projecta与projectb这两个用户组!』,也就是说:每个帐号都可以有多个用户组的支持呢!
文件拥有者:
第一栏:
第一个字符代表这个文件是『目录、文件或链接文件等等』(-)普通文件
接下来的字符中,以三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
第一组为『文件拥有者可具备的权限』
第二组为『加入此用户组之帐号的权限』
第三组为『非本人且没有加入本用户组之其他帐号的权限』
第二栏:
表示有多少文件名链接到此节点(i-node):每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。
i-node的内容:
Size文件的字节数
Uid文件拥有者的User ID
Gid文件的Group ID
Access文件的读、写、执行权限
文件的时间戳,共有三个:
指inode上一次变动的时间
指文件内容上一次变动的时间
指文件上一次打开的时间
链接数,即有多少文件名指向这个inode
文件数据block的位置
Blocks块数
Blocks 块大小
设备号码
查看 i-node
stat .bashrc:查看 i-node
除了文件名以外的所有文件信息,都在inode之中
i-node的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
i-node的号码
ls -ali :查看i-node的号码
inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。
找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
ls -i命令,可以看到文件名对应的inode号码
硬链接:
不同文件名链接到同一个inode上,文件是完全一样的文件,只是有不一样的别名
touch original创建文件,文件名叫original
ls -l original 查看original的详细信息
ln original dest 硬链接original
ls -ali original dest 查看original和dest详细信息
软链接:
两个完全不同的文件,只是通过链接的可以找到另一个
ln -s orginal dest 软链接到original 通过original可以找到dest
i-node的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
移动文件或重命名文件,只是改变文件名,不影响inode号码。
打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第三栏:表示文件(或目录)的拥有者账号
第四栏:表示这个文件所属的用户组
第五栏:为这个文件容量大小,单位为Bytes
第六栏:为文件的创建日期或是最后修改时间
ls -l -full -time 可以查看完整的日期
第七栏:为文件名
比较特殊的是:如果文件名之前多一个『 . 』,则代表这个文件为『隐藏文件』。 可以使用『ls』及『ls -a』这两个指令去感受一下什么是隐藏文件。
2.如何修改文件属性与权限:
chgrp:改变文件所属用户组
要被改变的用户组名称必须要在/etc/group文件内存在才行,否则就会显示错误!
chgrp [-R] dirname/filename ...
选项与参数:
进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况
chown:改变文件拥有者
使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。
chown bin ccc 把文件ccc拥有者改为bin
chown sl:sl ccc 把文件ccc所有者改为sl
chmod:改变文件的权限
权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。
1)数字类型改变文件权限
linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限, 文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
owner= rwx = 4+2+1 = 7
group= rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
chmod 777 ccc将ccc文件所有人的权限改为可读可写可执行
chmod 752 ccc将ccc文件所有者权限改为可读可写可执行,用户组可读可执行,其他可写
2)符号类型改变文件权限
基本上就九个权限分别是(1)user (2)group (3)others三种身份,用u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那麽读写的权限就可以写成r, w, x。
假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时,基本上就是:
user(u):具有可读、可写、可执行的权限;
group与 others (g/o):具有可读与执行的权限。
chmod u=rwx,go=rx ccc
chmod a+w ccc 给文件ccc的所有用户加上可写权限
chmod a-w ccc 给文件ccc的所有用户减去可写权限
组件 | 內容 | r | w | x |
文件 | 详细数据data | 读到文件內容 | 修改文件內容 | 执行文件內容 |
目录 | 文件名 | 读到文件名 | 修改文件名 | 进入该目录的权限(key) |
3.linux文件种类与扩展名
文件种类:
常规文件[-]
目录[d]
链接文件[l]
区块(block)设备文件[b]
字符(character)设备文件[c]
数据接口文件(socket)[s]
数据传送文件(FIFO,pipe)[p]
扩展名:
linux的文件是没有所谓的扩展名,一个Linux文件能不能被执行,与它的第一栏的十个属性有关,与文件名根本一点关系没有,这个观念跟windows差别很大,windows中可执行的文件名扩展名通常为.com、.exe、.bat等,而在Linux下面,只要你的权限中具有x的话,即代表这个文件具有可以被执行的能力。
可以被执行与可以执行成功是不一样的,x代表这个文件具有可执行的能力,但是能不能执行成功,还是要看该文件的内容。
通常会用适当的扩展名来表示改文件是什么种类
4.linux目录配置
FSH(Filesystem Hierarchy Standard)标准:
主要目的是希望让使用者了解到已安装软件通常放置于哪个目录下。
| 可分享(shareable) | 不可分享(unshareable) |
不变(static) | /usr (软件存放处) | /etc (配置文件) |
/opt(第三方辅助软件) | /etc(启动与内核文件) | |
可变动(variable) | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
5.绝对路径和相对路径
绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
.代表当前的目录,也可以使用./来表示
..代表上一层目录,也可以../来代表
-代表前一个工作目录
~代表目前使用者身份所在的家目录
~account代表account这个使用者的家目录
(account是个账号名称)
注:需要特别注意的是:在所有目录底下都会存在的两个目录,分别是『.』与『..』 分别代表此层与上层目录的意思。
cd /var/spool/mail先进入/var/spool/mail/目录
cd ../cron 从mail进入/var/spool/cron/目录内
根目录是有上层目录的,上层目录就是它自己
常见目录处理命令:
cd : 变换目录
pwd :显示目前的目录
mkdir :建立一个新的目录
rmdir : 删除一个空的目录
cd ~sl 切换到sl的家目录
cd ~切换都root的家目录
cd 也是到root的家目录
cd ..到父目录
pwd 查看路径
cd -表示回到刚刚的目录
cd /var/spool/mail绝对路径
cd ../postfix相对路径
pwd(print working directory,显示目前所在的目录)
#pwd [-P]
-P :显示出真正的路径,而非使用链接 (link) 路径
mkdir(make directory,建立新目录)
#mkdir [-mp]
-m :设定文件的权限!直接设定,不需要看默认权限的脸色~
-p :帮助你直接将所需要的目录(包含上层目录)递归建立起来!
ls -ld text* 查看前面带text目录
rmdir(remove directory,删除“空”的目录)
#rmdir [-p] 目录文件
-p :连同『上层』『空的』目录也一起删除
文件与目录的查找ls
[root@aubin ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@aubin ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@aubin ~]# ls [--full-time] 文件名或目录名称..
选项与参数:
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-d :仅列出目录本身,而不是列出目录内的文件数据(常用)
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)
#ls -al ~家目录的所有详细信息
#ls --color=never
#ls -al --full-time
cp复制
[root@aubin ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@aubin ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用) 完全复制
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用) 询问是否复制
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归复制,用于目录的复制行为;(常用)
最后需要注意的,如果源文件有两个以上,则最后一个目的文件一定要是『目录』才行!
-d:若源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身。
rm [-fir] 文件或目录
[root@aubin ~]# rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
把bashrc1 bashrc2移动到mvtext2
文件内容查看命令
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
od 以二进制的方式读取文件内容!
cat 由第一行开始显示文件内容
[root@aubin ~]# cat [-AbEnTv]
选项与参数:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
# cat /etc/issue 列出文件内容
#cat -n /etc/issue
#cat -A /etc/man_db.conf 将 /etc/man_db.conf 的内容完整的显示出来(包含特殊字符)
nl 显示的时候,顺道输出行号!
[root@aubin ~]# nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的字符数。
less
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个数据的第一行去;
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程式;
tar只看尾巴几行
[root@aubin ~]# tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
which
[root@aubin ~]# which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
find
#find / -mtime 0通过时间查找的方式
tab文件补全,命令补全
ctrl+c终端程序
touch创建文件,进行时间修改
vim程序编辑器vim /etc/group
:quit退出
按i进入编辑模式
[shift]+{[PageUp][PageDown]}上下翻页
exit退出
rm 删除文件
su切换到超级用户
su 普通用户名 切换到普通用户
rm -r ddd删除ddd文件夹
ls -la 显示目录详细信息
find查找的时候毁磁盘,不建议用,不过find用处比较强大
which和whereis在指定条件下查找
locate在数据库下查找比较差,查的时候建议用locate,不过24小时只更新一次,最新的查不到