Linux基础学习

任何装置在Linux底下都是档案。
Linux下的目录结构是一层一层读取的,要注意档案权限和目录权限的结合使用。
Linux系统会将系统内所有的档案都记录在一个数据库档案里面。

Linux下的断行字符为$。
Linux文件系统下,文件的权限和属性放在i-node 里面。可用ls -i查看。

一般档案(-)目录档案(d) 连接档(l)

连接档案分为硬链接和软链接。软连接类似于Windows下的快捷方式。

档案与目录的管理的一般操作有显示属性(ls),拷贝(cp),删除档案(rm),移动目录或档案(mv)。

Linux档名的限制:单一档案或者目录的最大容许文件名为255个字节;
(完整文档)包含完整路径和名称及目录的完整档案名为4096个字节。
怎么样区分哪一个是路径名,哪一个是目录名呢,可以通过/ 来判别。
也可以通过basename 和 dirname指令。

basename /etc/sysconfig/network
network   #取得档案名称
dirname  /etc/sysconfig/network
/etc/sysconfig  #取得路径名称

查询使用的distribution使用的是是哪一个Linux标准(Linux standard base)以及一些基本信息。
lsb_release -a

uname -r 实际的核心版本

切换用户 su
su name 只改变当前用户
su - name 改变当前用户,并把工作目录改成name的家目录。
~代表当前用户的家目录 cd ~
~name 代表name的家目录

. 代表当前目录,也可以用./来表示
… 代表上一层目录,也可以用…/来表示
– 代表前一个工作目录
~ 代表当前用户所在的家目录
~name 代表name这个用户所在的家目录

在所有的目录下都存在.和 …这两个目录。
根目录下的当前目录和上层目录是自己。

与目录有关的常用命令:
cd
cd 后面可跟绝对路径或者相对路径。
一进入系统,会在当前用户的家目录。
cd 后面不跟任何参数和 cd ~的功能一样。

pwd
显示目前所在目录
pwd -P 显示出实际的工作目录,不是链接文件本身的目录。

mkdir

–p 可以将目录递归的建立起来。
–m 创建目录时设置相应的文件权限。

mkdir -p test1/test2/test3  #当然这个命令是在已经存在的目录下在建立目录
mkdir -p /home/user/test/test1 #这个是从根目录下开始建立,系统会先建立/home,然后/home/user,依次进行。如果目录已经存在,会报错。
mkdir -m 711 test2
#默认文件权限为755

rmdir

rmdir 不加参数进行目录的删除时候,只能删除空目录,被删除的目录里面不能存在其他的目录和文档。
rmdir -p 路径 来删除上层目录
rmdir -r 目录名 强制删除,删除该目录以及目录下所有的东西

区分
绝对路径:由根目录开始写的文件名和目录名称
相对路径:相对于当前目录的文件名写法

当name不是root时候,家目录/home/name
当name是root时候,家目录/root

LANG=en_US
date
cal
bc
quit 离开bc模式
scale=number number为显示的小数点的位数 scale=3
calender [month] [year] eg: cal 10 2009

Tab 要连按两次
跟在一串指令第一个字后面 命令补全
跟在一串指令第二个字以后 档案补齐

CTRL+c 将运行 的指令进行中断

说明文档所在的目录 /usr/share/doc

文书编辑器 nano nano 1.txt P164
谁在线 who
网络联机状态 netstat -a
背景的执行程序 ps -aux
数据同步 sync

run level 0 关机
run level 3 纯文本
run level 5 图形接口
run level 6 重新启动

更改文件权限与权限
chgrp :改变文档所属群组
被改变的组名必须在/etc/group档案内存中
查看 ls -al filename(-a 显示隐藏档案内容)

ls

ls /etc 显示的是经过排序的文件名以及 蓝色显示目录白色显示档案名。
在这里插入图片描述
–time=ctime 输出权限改变时间。

cp

cp 命令不仅可以复制目录或档案,还可以建立连接档(也就是快捷方式)

在这里插入图片描述
举例:

                                        指令完成的结果
cp -r dir1 dir2				dir2/dir1
cp -r dir1  dir2/newdir  dir2/newdir,将dir1复制到dir2目录下,并更改目录名称
cp -r dir1/dir2  newdir  newdir     将dir2复制到当前的工作目录下,并改名。
//下面是对档案进行的操作
cp  dir1/file   dir2        dir2/file
cp  dir1/file   dir2/file2  dir2/file2  复制并改名 

注意
如果cp命令不加参数进行复制,复制过来的档案文件和原档案权限和属性有出入。解决此类问题可以加入参数-a(完整的复制,相当于-pdr)或者-p。此时,如果-a操作者不是root用户,那么目标文件的拥有者和群组也得不到随意的修改,可能会和原目标文件的这些属性不一样。

如果复制链接文件时,不用参数,复制的是源文件,而不是连接文件属性,需要用-d。
目标档案的拥有者一般是操作指令用户本身。
档案要进行复制,最少要有读的权限。

若 ~/.bashrc 比 /tmp/bashrc 新才复制过来

cp -u ~/.bashrc  /tmp/bashrc

将家目录下 .bashrc 及 .bash_history 复制到 /tmp 底下

cp ~/.bashrc  ~./bashrc_history /tmp

注意:可以将多个数据放到一个目录中,最后的destination必须是目录。

rm

-f 强制删除,不会出现警告信息。
-i 互动模式,在删除之前询问使用者是否进行动作
-r 递归删除 (不加这个参数,只能删除空目录)
可以和通配符*一起使用。 * 的含义是0到无穷多的任意字符。
删除/tmp 目录下以b打头的档案。

rm -i /tmp/b*

如果要求删除当前目录中以-打头的档案:

rm ./-filename

mv

mv 可以进行移动档案或目录 以及 更名

mkdir test
mv test test1

如果有多个档案来源或者目录进行移动,则destination的目标文件必须是目录。
用途: 测试新旧档案,更改名称。

格式: chgrp name 文件名

chown : 改变文档的拥有者
用户必须要系统中,即在/etc/passwd档案中。
chown user:group file 或者
chown user.group file(去掉user只更改group)
对于目录来说,如果需要的话,要用参数-R
chown -R user:group dirname

chmod : 改变文档的权限

第一种,用数字修改
用vim编辑一个shell文件之后,文件的权限通常是-rw-rw-r–,即664。如果要变为可执行文件,并且不让他人进行修改 -rwxr-xr-x。chmod 755 file。
如果不希望被其他人进行查看 ,则chmod 740 file。

第二种,用身份需改
u,g,o分别代表user,group,other。
a代表所有的身份
+(加入权限)/ -(去掉权限) / =(设定权限)
chmod u=rwx,go=rx filename

档案是含有数据的地方,一般包括文本文件,数据库内容文件,二进制可执行文件等等。在Windows底下一个档案是否具有可执行能力,是由其扩展名决定,例如:.exe , .bat。但是在Linux底下,档案可执行是由x权限决定的。

目录主要记录文件名列表。r表示对该目录有读取权限,可以用ls将目录内容列表出来,不代表可以进入该目录。x表示用户是否可以进入改目录作为工作目录。改变工作目录的命令cd。

要开放目录给任何人浏览时,至少应该给予r和x的权限。

/tmp的目录权限是744,且目录的拥有者为root。
建立目录的命令 mkdir filename
建立空档案 touch
读档案内容 cat

.sh 脚本或批处理文件
*Z, *.tar, *.tar.gz, *.zip, *.tgz 压缩文件
*.html, *.php 网页相关文档

FHS标准
重点在于规范每个特定目录下应该放置什么样的数据
在这里插入图片描述
/bin 存放单人维护模式下还能被执行的命令
/boot 存放开机时使用的档案,包括Linux核心档案,开机选单以及开机所需的配置文件等等
/dev 任何装置和接口设备都是以档案的形式存在于这个目录中。
/etc 系统的主要配置文件。例如人员账号密码文件,各种服务的启动项
/home 系统默认的用户家目录
/lib 存放开机时用到的函数库,/lib/modules这个目录存放的是核心相关的模块(驱动程序)
/media 存放的是可移除装置
/mnt 用于暂时挂载

环境变量PATH,PATH前面加上$表示后面接的是变量。显示环境变量:echo $PATH
注意
1.一般的用户的PATH中是不包含sbin这个目录的。
2.每个目录之间是用冒号进行分割开的。每个目录是有顺序之分的。
3.同一个命令有不同的路径,哪一个目录先被查询到,哪一个就会被先执行。

如果普通用户发现该命令没有配置到PATH中,那么我们可以使用绝对路径执行该命令。

如果设置环境变量呢?例如:ls 在/bin/ls中,
PATH="$PATH":/bin

mv 可将档案在不同的目录下进行移动。将/bin/ls 移动到/root中
mv /bin/ls /root 此时移动完的目录下的路径是/root/ls。

档案内容的查询

cat

由第一行开始显示档案内容。
在这里插入图片描述

tac

从最后一行开始显示。

nl

添加打印行号。
与cat -n 的区别在于 nl可以将行号做比较多的显示设置,包括位数以及自动补零。

-b 有两种形式:
-b a:无论是否为为空行,同样的也列出行号。与cat -n相同。
-b t : 如果存在空行,空行不要列出行号。(默认)

nl  -b a  -n rz  -w 3 /etc/issue

前面的三条命令是将档案内容全部地显示在屏幕上。more和less命令可以进行翻页。less可以进行向上翻页。

more

more 档案名
在这里插入图片描述

less

less 档案名
在这里插入图片描述

head

取出档案的前几行。
head [-n number ] 档案。
-n 后面是整数,表示显示档案的前几行,后面跟的是负数,表示显示除了后面number行都显示。
如果不加任何参数,默认表示显示前十行。

head /etc/man.config

head -n 6 /etc/man.config

head -n -10 /etc/man.config

tail

显示出文档的后几行
-n number number前面不加正号表示显示文件后面多少行的内容。
number 前面加+号表示从第number行开始显示一直到结尾。

-f 表示持续监测。结束CTRL + c 。

tail  /etc/man.config

tail  -n  20  /etc/man.config

tail -n +100  /etc/man.config

tail  -f /var/log/messages        /var/log/messages可能会随时写入数据,要将写入的数据立刻显示到屏幕上,就可以利用-f选项。

思考
如何显示 /etc/man.config 癿第 11 到第 20 行呢

head -n 20  /etc/man.config | tail  -n 10

od

查阅非文本文件的时候会用到。
在这里插入图片描述

touch

修改档案时间,建立新档案。

我们常说的文件属性中,mtime最重要。

mtime 当档案内容进行更新时,这个时间就会进行更新。
ctime 当档案的状态发生改变时,就会更新这个时间,比如权限和属性被修改等等。
atime 当档案内容被调用的时候,就会更新读取时间。例如时候cat命令。

我们来复习一下ls命令吧。现在要查看/etc/man.config档案的相关属性。

ls -l /etc/man.config  #默认的显示的是mtime

ls -l --time=ctime   /etc/man.config

ls -l --time=atime  /etc/man.config

简化指令:ll 与ls -l 功能相同。
可以同时输入多个命令,中间用分号隔开。在这里插入图片描述
注意
即使我们把原档案的所有属性进行复制,源文件与目标文件的ctime也可能是不一样的,ctime是不能进行复制的,因为ctime记录了档案近期的状态。

在Linux中,除了rwx权限之外,在Ext2/Ext3文件系统下,我们还可以设定其他的隐藏属性。

umask

档案预设权限。
在档案或目录建立的时候,都会有默认的权限,这个东西就跟umask有关啦。umask就是指定用户建立目录或者档案时候的默认权限值。

查看预设权限的方式有两种:

umask 
#result
0022
umask -S
#result
u=rwx,g=rx,o=rx

直接使用umask查询,第一组数字时特殊权限使用的。
用户建立档案的时候,可以没有x权限,但是目录如果要进入必须有x权限。
默认权限:
档案
-rw-rw-rw-
目录
drwxrwxrwx
注意,umask所显示的值,指的是目录或者档案所缺少权限值的总和。

所以我们如何设置默认的权限值?直接umask 数字。例如:umask 002

umask 002
touch test
mkdir  dirtest
ll  #自行查看结果。回顾,mkdir -m也可以建立想要的权限目录。

思考
假设输入命令umask 003,此时建立的文档和目录的权限值是多少?

文档:(-rw-rw-rw-)-(-------wx)=-rw-rw-r--
目录:(-rwxrwxrwx)-(--------wx)=-rwxrwxr--

总结:
对于目录而言,目录的权限为777-umask设定的值。
对于档案而言,档案的权限为666-umask设定的值。但是要注意,666的档案权限中没有执行权限,所以减去umask的值后,也不具有执行权限。

root的umask默认为022,一般使用者默认为002。

档案的隐藏属性

档案的隐藏属性对于系统的安全起着重要的作用。
chattr 和 lsattr 指令只能在Ext2/Ext3的文件系统上生效。

chattr [±=] [ASacdistu] 档案或者目录名称
配置文件的隐藏属性
在这里插入图片描述在这里插入图片描述

lsattr

显示文件或者目录的隐藏属性
在这里插入图片描述

档案特殊权限

SUID, SGID, SBIT。
例如:
s 和 t 权限

Set UID

当s标志出现在拥有者x权限上面的时候,就称作是Set UID。那么这个权限有什么作用呢?
1.SUID仅对二进制程序有效
2.执行者对于该程序需要具有x权限
3.本权限仅在执行该程序时有效
4.执行者将拥有程序拥有者的权限

file

查看文件类型。

file ~./bashrc

我们要修改文件或者档案的时候,需要知道其所在的位置,才能进行档案的修改。可优先用whereis或者locate进行查找,如果查找不到,可用find来进行查找。因为whereis或者locate是利用数据库来搜索数据的,所以比较快,而find是搜索实际的硬盘,所以速度比较慢。

whereis

查询特定的文档。
在这里插入图片描述
当用which找不到某些指令的时候,可以用档案搜索进行查看。

locate

-i 忽略大小写差异
-r 后面可接正规表示法的显示方式

locate [-ir] keyword
手动更新locate数据库,直接输入updatedb。
updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库档案啰!因为updatedb 会去搜寻硬盘,所以弼你执行 updatedb 时,可能会等待数分钟

  • updatedb:根据 /etc/updatedb.conf 的设定定去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate 内癿数据库档案;
  • locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文名。

find

find [PATH] [option] [action]

PATH是搜索的路径,比如想搜索系统下的文件,就是 find / 参数
在这里插入图片描述
例题一:
将过去系统上面24小时之内有变更的档案列出

find  /   -mtime 0

在这里插入图片描述
例题二
搜索系统中不属于任何人的档案

find /  -nouser

在这里插入图片描述
例题三
搜索名叫passwd的档案

find  /  -name  passwd

例题四
搜寻档案中含有 SGID 或 SUID 或 SBIT 的属性

find /  -perm  +7000

在这里插入图片描述
将上一个例子找出的文件用ls -l显示出来。

find  /  -perm  +7000  -exec  ll  {}  \;

在这里插入图片描述
说明
-exec 到;,代表find额外动作开始到结束,中间就是find指令的额外动作
{} 代表find找到的内容结果会被放置在{}的位置上。
;在bash下是由特殊意义的,因此要用反斜杠进行转义

find可以用通配符进行查找。
找/etc下包含http的档案。

find  /  -name '*http*'

用which查找指令所在的目录
which [-a] command
注解
which查找指令所在的目录是通过PATH变量内的目录查找可执行文件的。
-a 是将PATH目录中可以找到的指令均列举出来。

指令和权限的关系

在这里插入图片描述
在这里插入图片描述

shell下变量的赋值规则:
使用等号进行赋值,且等号两边不能直接接空格。
变量名只能是英文或者数字,开头字符不能是数字。

如果想要把带有空格的字符串赋给相应的变量,需要单引号或者双引号。
注意 双引号可以保持原有的特性,而单引号引起的内容是一般字符。
若该变量为扩增内容时,则可用 “$变量名称” 或者 ${变量} 累加内容,如下所示:

PATH="$PATH":/home/bin

可以使用\来使特殊字符 变为一般字符。例如:’ 空格等等

取消变量名方法 ,使用unset
unset myname

name="$name"yes
name= ${name}yes

export 可以将变量在子程序中进行显示

在一串指令下达的过程中,反单引号的指令所指的内容将会被先执行,执行的结果作为外部信息传入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值