开发者社区> f7bks4km5g52i> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

初识 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发展背景(了解)

微信图片_20221209161449.png


如图,简而言之,其是由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的不同的版本,具体的大家可以自行上网去搜,网上一大片一大片的资料。笔者在此就不再赘述。


操作系统(了解)

image.png


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


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


我们把操作系统一般称为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 一行只输出一个文件。


我们举一个例子:

image

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

如图:

image

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

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

image


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


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


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


image

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


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


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


那Linux系统怎么区分呢?


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


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


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


2、cd指令

cd

image


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


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


cd ..   : 返回上级目录

cd /home/litao/linux/ :   绝对路径

cd ../day02/ :  相对路径

cd ~:  进入用户家目

cd -:   返回最近访问目录


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


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

image

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

image

 然后编译运行

image

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

然后我们执行它:

image



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

image

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

image

3、pwd指令

pwd

功能:显示用户当前所在的目录

它的功能就这么简单。


我们来举个例子:

image

 好,我们继续。

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

image

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

image


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


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


4、touch指令

touch

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


比如:

image

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

image



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


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


5、mkdir指令

mkdir
mkdir -p


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


举个例子:


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

image

image


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


递归创建文件:

image


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


补充:tree命令

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


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


如图:

image

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 删除目录及其下所有文件

微信图片_20221209161850.png



7、man指令

man

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

man 语法: man [选项] 命令


比如:

image.png


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

image

image



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


image


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

image

常用选项:

-b 对非空输出行编号

-n 对输出的所有行编号

-s 不输出多行空行


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


而      tac   是逆向输出


image

如果我用tac,

image


然后我们再来看cp


cp

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


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


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

image



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


cp -r

cp -f     //强制拷贝

9、mv命令

mv

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


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


1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录), mv命令将文件重命名或将其移至一个新的目录中。

2. 当第二个参数类型是文件时, mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。

3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个, mv命令将各参数指定的源文件均移至目标目录中。


举例:


1、重命名:

image

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

image


-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖

-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖


10、more指令

more

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


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

image.png

image.png



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


如果要跳转到某一行

image

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

image


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


11、less指令

less

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


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


-i 忽略搜索时的大小写

-N 显示每行的行号

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与 / 或 ? 有关)

N:反向重复前一个搜索(与 / 或 ? 有关)

q:quit

image.png


12、tail和head

tail

head

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


默认查看10行。


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

例如:

image

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

image


那么我如果想要显示中间的某多少行,比如显示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


image


时间设定方面(了解):


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″ //这样可以设置全部时间

image



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


14、Cal指令

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


命令格式: cal [参数][月份][年份]

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


image

我们就简单来说了。


image

15、find命令

find -name

image


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


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


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


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


16、grey命令

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

微信图片_20221209162307.png



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


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


当然,它也有-n选项。


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


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

image.png



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


17、zip/unzip指令

压缩和解压缩。

image.png

zip

unzip

压缩:

image.png



解压缩:


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



18、tar指令

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


常用选项:

image.png


-c :建立一个压缩文件的参数指令(create 的意思);

-x :解开一个压缩文件的参数指令!

-t :查看 tarfile 里面的文件!

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!

-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!

-C : 解压到指定目录


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


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


19、bc指令

bc

就是用于计算。


很简单的东西。

image.png



20、uname命令

语法: uname [选项]

功能: uname用来获取电脑和操作系统的相关信息。

补充说明: uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。

常用选项:  

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


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

image.png



权限

文件访问者的分类

Linux下分为两种用户:


超级用户和普通用户。


超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”


做个比方:


文件和文件目录的所有者: u---User(中国平民 法律问题)

文件和文件目录的所有者所在的组的用户: g---Group(不多说)

其它用户: o---Others (外国人)



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


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

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

image.png





关于所属组的说法:

image.png



前面的9列,image.png



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

image.png

文件类型

d:文件夹

-:普通文件

l:软链接(类似Windows的快捷方式)

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件


基本权限

i.读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

ii.写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

iii.执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

iv.“—”表示不具有该项权限


文件权限值的表示方法

a)字符表示方法

image.png

image.pngb)8进制数值表示方法

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

a)chmod


功能: 设置文件的访问权限

格式: chmod [参数] 权限 文件名

常用选项:

R -> 递归修改目录文件的权限

说明:只有文件的拥有者和root才可以改变文件的权限

chmod

① 用户表示符+/-=权限字符

+ : 向权限范围增加权限代号所表示的权限

- : 向权限范围取消权限代号所表示的权限

= : 向权限范围赋予权限代号所表示的权限

用户符号:

u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户


我们来演示一下:

image.png


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


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


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


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

image.png

image.png


②三位8进制数字


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


举例:

image.png




b)chown


change own

功能:修改文件的拥有者

格式: chown [参数] 用户名 文件名

image.png


c)chgrp

功能:修改文件或目录的所属组

格式: chgrp [参数] 用户组名 文件名

常用选项: -R 递归修改文件或目录的所属组


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


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


image.png

d)umask


image.png


可以这样去更改umask


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


粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除


注意:


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

image.png


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

image.png




补充:


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


image.png


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
LINUX下C语言用access()检查文件可读、可写权限
LINUX下C语言用access()检查文件可读、可写权限
0 0
【Linux】Linux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask
【Linux】Linux权限管理————shell运行原理 | Linux权限管理 | 粘滞位 | 权限掩码umask
0 0
【Linux】Linux基本权限
【Linux】Linux基本权限
0 0
Linux 服务器报错Permission denied: ‘/root/.cache‘ ,PYTHON_EGG_CACHE无权限的问题
Linux 服务器报错Permission denied: ‘/root/.cache‘ ,PYTHON_EGG_CACHE无权限的问题
0 0
Linux下修改Mysql的用(root的密码及修改root登录权限
Linux下修改Mysql的用(root的密码及修改root登录权限
0 0
LINUX清理垃圾桶提示“没有权限”或“目录非空”
LINUX清理垃圾桶提示“没有权限”或“目录非空”
0 0
【看表情包学Linux】shell 命令及运行原理 | Linux 权限 | 文件权限的修改和转让 | 目录的权限 | Sticky bit 粘滞位(二)
本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。
0 0
【看表情包学Linux】shell 命令及运行原理 | Linux 权限 | 文件权限的修改和转让 | 目录的权限 | Sticky bit 粘滞位(一)
本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。
0 0
linux权限
linux权限
0 0
Linux——文件或目录的权限管理、网络管理、进程管理、服务管理的相关命令
Linux——文件或目录的权限管理、网络管理、进程管理、服务管理的相关命令
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Decian GNU/Linux安全合规之路
立即下载
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载
冬季实战营第二期:Linux操作系统实战入门
立即下载