初识 Linux系统编程 第一节——Linux基本指令与权限

初识 Linux系统编程 第一节——Linux基本指令与权限,第1张

初识 Linux系统编程 第一节——Linux基本指令与权限

目录

Linux发展背景(了解)

开源(了解)

企业应用现状(了解)

Linux在服务器领域的发展(了解)

Linux在桌面领域的发展(了解)

Linux在移动嵌入式领域的发展(了解)

Linux在云计算/大数据领域的发展(了解)

发行版本(了解)

*** 作系统(了解)

Linux下的基础指令:(重点)

1、ls指令

2、cd指令

3、pwd指令

4、touch指令

5、mkdir指令

递归创建文件

 补充:tree命令

6、 rm(rmdir)指令

7、man指令

 8、cp命令(配合cat和echo讲解)

 9、mv命令

10、more指令

11、less指令

12、tail和head

13、date等时间相关的指令

14、Cal指令

 15、find命令

16、grey命令

17、zip/unzip指令

18、tar指令

19、bc指令

 20、uname命令

 权限

文件访问者的分类

 文件类型和访问权限(事物属性)

文件类型

基本权限

文件权限值的表示方法

a)字符表示方法​

b)8进制数值表示方法​ 

文件访问权限的相关设置方法

a)chmod

b)chown

change own

c)chgrp

d)umask

粘滞位


Linux发展背景(了解)

如图,简而言之,其是由Unix启发、发展而来 。然后现在历经了三十多年的发展,已经被广泛使用。

开源(了解)

什么是开源精神?

翻了翻网页,发现说的还是很长、很大,说到底,就是对于一个源代码,对外免费公开,任何人都有使用、传播、商业利用等等的权利,唯一的要求,就是当你在更新它的代码的时候,必须同样遵循开源精神,即公开出来,让别人能够看到并且使用。

企业应用现状(了解) Linux在服务器领域的发展(了解)


随着开源软件在世界范围内影响力日益增强, Linux服务器 *** 作系统在整个服务器 *** 作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度, Linux服务器产品一定能够冲击更大的服务器市场。据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时, Linux在服务器市场的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器 *** 作系统领域中的中坚力量。


Linux在桌面领域的发展(了解)


近年来,特别在国内市场, Linux桌面 *** 作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗
Linux、深度Linux等系统软件厂商都推出的Linux桌面 *** 作系统,目前已经在政府、企业、 OEM等领域得到了广泛应用。另外SUSE、 Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看, Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。


Linux在移动嵌入式领域的发展(了解)


Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android *** 作系统就是创建在Linux内核之上的。目前, Android已经成为全球最流行的智能手机 *** 作系统,据2015年权威部门最新统计, Android *** 作系统的全球市场份额已达84.6%。
此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的 *** 作系
统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功与Linux与开源的力量。


Linux在云计算/大数据领域的发展(了解)


互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台, Linux占据了核心优势;据Linux基金会的研究, 86%的企业已经使用Linux *** 作系统进行云计算、大数据平台的构建,目前, Linux已开始取代Unix成为最受青睐的云计算、大数据平台 *** 作系统。
 

发行版本(了解)

Debian
Ubuntu
红帽企业级Linux
CentOS
Fedora
Kali Linux
这些都是Linux的不同的版本,具体的大家可以自行上网去搜,网上一大片一大片的资料。笔者在此就不再赘述。

*** 作系统(了解)

在这里,我们只需要感性的了解一下。 

我们所买的手机、电脑,一般都是一堆硬件,然后其必须要装上自己所需要的 *** 作系统,而在 *** 作系统上,我们才能装上一些应用软件。

我们把 *** 作系统一般称为OS(operator system),其是搞管理的软件。

Linux下的基础指令:(重点) 1、ls指令
ls

作用:对于目录,该命令列出该目录下的所有子目录与文件。

           对于文件,将列出文件名以及其他信息。

当然了,其也有着一些选项,但是我们不常用。不过我们还是在这里列举出来。

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。 ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型, “*”表示可执行的普通文件; “/”表示目录; “@”表
示符号链接; “|”表示FIFOs; “=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。 (递归)
-1 一行只输出一个文件。
 

我们举一个例子:

现在,我在我的服务器上登录上了我的账号,那么,现在,我执行  ls  指令:

如图:

 在这里,我们就可以看到,我在该账号下,存在两个文件夹:1_lesson 和 2_lesson。

如果我想更详细地知道文件的属性信息,我还可以:

注意:  ls -l   可以简化成   ll

Linux中,以点(.)开头的文件,通常叫做隐藏文件

而  ls 不会将隐藏文件显示出来。 

 

 一个 . 代表当前目录;两个 .. 代表上级目录

对于一个文件来说,除了有它的文件内容,还有它的文件属性,而我们刚刚ll多出来的一些内容,实际上就是其文件属性(包括文件名)。 

而在windows系统下,通过文件名的后缀来区分文件的类别;但是在Linux下文件类型和其后缀没有特别的关系的。(当然有一些特殊的情况:比如我们用gcc去编译的时候,其也是需要匹配.c后缀的文件的)

那Linux系统怎么区分呢?

其实其用的是文件属性的第一列来区分。比如,我们刚刚的文件属性第一列都是d,则表明其为目录文件(具体的我们以后会说)

那现在我想点进去1_lesson怎么办呢?我总不能用鼠标点吧。

实际上,就应当是用下面的命令——cd命令

2、cd指令
cd

 如图所示,这里,我们表示进入目录1_lesson这么一个文件夹。官方说法:

功能:改变工作目录。将当前工作目录改变到指定的目录下。

cd ..   : 返回上级目录
cd /home/litao/linux/ :   绝对路径
cd ../day02/ :  相对路径
cd ~:  进入用户家目
cd -:   返回最近访问目录

上面同时也传达出两种信息,即我们想要进入到某个路径下,那么我可以用绝对路径,也可以用相对路径。

比如,我创建了个test.c文件

然后在里面写上这样几行简单的C代码 

 然后编译运行

 我们可以看到生成了一个a.out的文件。

然后我们执行它:

可以看到,我们这里的 ./a.out 中的./就是当前目录的意思。意思是执行当前目录的a.out文件

 后面两个,我们举一个例子:

 

3、pwd指令
pwd

功能:显示用户当前所在的目录
它的功能就这么简单。

我们来举个例子:

 好,我们继续。

注意,退回到根目录的时候,就不能再回退了。

 我们在这里,和上面的cd结合在一起,来看:

 注意到,我们甚至可以直接cd /,即采用绝对路径的方式访问

有了上面三个基础命令,我们接下来,就可以“加速”了。

4、touch指令
touch

touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件.

比如:

 可以看到,我现在在2_lesson的目录下,现在,我想创建文件,那我直接:

这么个文件就创建出来了(中间的ld不用管,打错了)

 注意,touch只能创建只能普通文件。

5、mkdir指令
mkdir
mkdir -p

功能:在当前目录下创建一个名为 “dirname”的目录

举个例子:

我们在2_lesson的目录下创建一个子文件夹:

 

我们可以看到,我们一旦创建了这个文件,那么就能 看到这个文件的属性(是一个目录文件),并且可以进入。

递归创建文件:

如图,我们可以用-p选项,来完成文件夹的递归创建。即一次生成一串路径

 补充:tree命令

如果没有tree命令,可以安装一下:yum install -y tree

对于tree命令,它会以树状的形式,从所指定的目录开始,往下一直展开。

如图:

6、 rm(rmdir)指令
rmdir -p
rmdir -f

 语法: rmdir [-p][dirName]
适用对象:具有当前目录 *** 作权限的所有使用者
功能:删除空目录
常用选项:
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除

rm -r
rm -f
rm -rf

rm命令可以同时删除文件或目录

语法: rm [-f-i-r-v][dirName/dir]
适用对象:所有使用者
功能:删除文件或目录

-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
 

7、man指令
man 

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是:
man 语法: man [选项] 命令

比如:



 

 如果你这个男人不会用,那么你就可以再问一问这个男人。

 

 8、cp命令(配合cat和echo讲解)

我们来看具体的例子:

[root@VM-16-3-centos ~]# ls
1_lesson  file
[root@VM-16-3-centos ~]# cd file
[root@VM-16-3-centos file]# ls
[root@VM-16-3-centos file]# touch text.txt
[root@VM-16-3-centos file]# echo "Hello Linux"    //echo:将后面的字符串输出到显示器(文件)中
Hello Linux
[root@VM-16-3-centos file]# echo "Hello Linux" > text.txt //输出重定向,输出到text.txt文件当中
[root@VM-16-3-centos file]# ls
text.txt
[root@VM-16-3-centos file]# cat text.txt  //输出(打印)文件里的内容
Hello Linux

 注意:cat 后跟-n选项的时候,输出的内容会带上行号。

常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
 

 另外注意,cat输出文件是正序输出,

         而      tac   是逆向输出

 

如果我用tac, 

 

然后我们再来看cp

cp

比如,我将text.txt拷贝一份到同级目录下,然后重命名为my.txt文件(同一个文件目录下,文件名不可以相同)

也可以将text.txt文件拷贝到上级目录下。

我们继续上面的来进行举例:

如果我们想要拷贝文件夹,我们可以加上-r选项。

cp -r
cp -f     //强制拷贝
 9、mv命令
mv

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录

语法: mv [选项] 源文件或目录 目标文件或目录

1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录), mv命令将文件重命名或将其移至一个新的目录中。
2. 当第二个参数类型是文件时, mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个, mv命令将各参数指定的源文件均移至目标目录中。
 

举例:

1、重命名:

 2、剪切文件(也可以是文件目录)

 -f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖

10、more指令
more

对文件进行逐行阅读的工具

我们还是用刚刚那个生成字符串行的脚本工具:

 

按回车,其就会一行一行往下读。

如果要跳转到某一行

直接斜杠加上想搜索的关键字

 

其与cat的区别就是——cat是一次就将文件打印完了。

11、less指令
 
less

 less实际上就是加强版的more,其可以上翻也可以下翻,而more是只能下翻的。

并且,less还有着众多的选项,

-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
 

 

12、tail和head
tail
head

查看文件的尾和查看文件的头。

默认查看10行。

如果需要自定义,可以在后面跟上-nX选项(X表示一个具体的数)

例如:

那么我如果想要显示中间的某多少行,比如显示600-610行,我们该怎么做比较好呢?

 

[root@VM-16-3-centos my]# head -n610 my.txt | tail -n10

//意为将从头读取my.txt文件,读取610行,然后将其输入到一个管道中,“|”在这里就表示这样一个管道。
//然后再从这个管道中tail其后十行

 

13、date等时间相关的指令

date显示
date 指定格式显示时间: date +%Y:%m:%d
date 用法: date [OPTION]... [+FORMAT]

所加的选项:

%H : 小时(00..23)
%M : 分钟(00..59)
%S : 秒(00..61)
%X : 相当于 %H:%M:%S
%d : 日 (01..31)
%m : 月份 (01..12)
%Y : 完整年份 (0000..9999)
%F : 相当于 %Y-%m-%d
 

时间设定方面(了解):

date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间
 

这样所得出来的就叫做时间戳 (格林威治时间)

14、Cal指令

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。 “阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。

命令格式: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份

我们就简单来说了。

 

 15、find命令
find -name

 常跟-name 选项,上面表示在1_lesson的文件目录下,寻找debug.c的文件。

当然,还可以有 -size等等寻找方式

而which命令实际上可以去寻找命令所在的文件夹

alias可以起别名,比如,可参照ls命令,给ls起别名。

16、grey命令

我们还是用刚刚的那个字串脚本:

 可以看到,其将所有带有 9的行 过滤出来了。

注意,其在过滤的时候,是以行为基本单位的

当然,它也有-n选项。

                    -i表示不分大小写进行文本匹配

                    -v表示反向匹配。(就是把不包含这个的显示出来)

grep常用来过滤日志,或者查看文件指定内容

17、zip/unzip指令

压缩和解压缩。

zip
unzip

 压缩:

 解压缩:

 注意,我们可以用-d选项来指定解压的路径。

 

18、tar指令

打包/解包,不打开它,直接看内容

常用选项:


-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
 

 -C选项表示的是自定义 解压缩路径。

 具体其他的 -选项表示什么意思,可以参照上面的说明。 

19、bc指令
bc

就是用于计算。

很简单的东西。

 20、uname命令

语法: uname [选项]
功能: uname用来获取电脑和 *** 作系统的相关信息。
补充说明: uname可显示linux主机所用的 *** 作系统的版本、硬件的名称等基本信息。
常用选项: 

-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型, *** 作系统名称
 

这个...笔者不方便举例

 

 权限 文件访问者的分类
 

Linux下分为两种用户:

超级用户和普通用户。

超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

做个比方:

文件和文件目录的所有者: u---User(中国平民 法律问题)
文件和文件目录的所有者所在的组的用户: g---Group(不多说)
其它用户: o---Others (外国人)
 

 

可以看到,我们上面的就是root权限

 文件类型和访问权限(事物属性)

关于文件,其有着文件类型和访问权限:

关于所属组的说法:

 前面的9列,

 

(注:上图右侧文字的第三组中“使用者”应改位“所属组”,5-7位表示的是所属组的权限)

文件类型

d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
 

基本权限

i.读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
 

文件权限值的表示方法 a)字符表示方法
b)8进制数值表示方法
  文件访问权限的相关设置方法 a)chmod


功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod
① 用户表示符+/-=权限字符
+ : 向权限范围增加权限代号所表示的权限
- : 向权限范围取消权限代号所表示的权限
= : 向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
 

我们来演示一下:

 

注意,由于我们现在时root权限,所以不论我们是否删掉、怎样删掉权限,在root下还是想怎么读就怎么读,想怎么写就怎么写

注意:对于目录来说,目录的读权限是查看目录下的文件;目录的写权限则是在目录下增删新的文件(注意,和文件的内容没有关系);目录的执行权限则是能否进入该目录。

注意,如果一个目录没有了x权限,那么很有可能其r权限和w权限也会受影响(没了)。

当然,我们也可以将权限加上,甚至是批量化的加上 

 

 

 ②三位8进制数字

每一个文件的每一种权限 只有两种状态,即可以或不可以,如果我们用 '1' 表示可以,用 '0' 表示不可以,然后将其认为是8进制数字,转换为10进制,也同样可以 更改。

举例:

 

b)chown
change own

功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
 

 

c)chgrp

功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组

和上面chown的用法相同,不再赘述。

当然,我们可以用下面这种方法同时改变文件拥有者和其所属组

d)umask

 

可以这样去更改umask 

从下面的代码开始呢,我们将用普通 用户进行演示

粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
 

注意:

一个普通用户可以干掉一个不属于自己和自己所属组的文件。

 

只有加上+t属性,其才会避免这种情况的发生。

 

补充:

关于shell的说法:(从感性的角度)

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存