虚拟机安装教程: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 SystemOS)其实也是一组程序,这组程序的重点在于管理电脑的所有活动(如cpu分配)及驱动系统中的所有硬件。

       让CPU可以开始判断逻辑与运算数值,让硬盘可以被存取,让网卡可以开始传输数据,让所有的外置设备可以运转,这些功能就是操作系统的内核完成的。

内核主要管理硬件与提供相关的功能(如读写硬盘、网络功能、CPU资源分配等),这些管理操作非常重要,若用户直接能够使用内核的话,万一用户不小心将内核程序停止或破坏,将导致整个系统的崩溃。因此内核程序放置到内存当中的区块是受保护的,并且启动后一直常驻在内存中。

 

内核功能是什么呢?

 

  • 系统调用接口(System Call Interface

       提供简易的接口方便程序员利用硬件资源。   

  • 进程管理(Process control

        管理多个任务,让CPU的资源作有效分配。

  • 内存管理(Memory management

       提供虚拟内存功能,当内存不足时提供交换分区(swap)功能。

  • 文件系统管理(Filesystem management

        管理文件的输入与输出工作(I/O),不同文件格式支持。如win98不支持NTFS

  • 设备驱动(Device drivers

        驱动硬件设备,最核心工作。

 

系统调用(System Call)

 

       既然硬件是内核管理的,那么想要开发应用程序就必须参考内核的功能,将从参考硬件函数变为参考内核,还是很麻烦。

       操作系统通常会提供一套应用程序编程接口Application Programming InterfaceAPI)给程序员开发软件,开发人员只要遵守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;

          (4parameter1 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这个帐号是projectaprojectb这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个用户组的权限时,你可以设定teacher这个帐号, 同时支援projectaprojectb这两个用户组!,也就是说:每个帐号都可以有多个用户组的支持呢!

文件拥有者:

 

第一栏:

第一个字符代表这个文件是目录、文件或链接文件等等』(-)普通文件

接下来的字符中,以三个为一组,且均为『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小时只更新一次,最新的查不到

 

 

 


 


 


 

 

 

 

 

 

 

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐