操作系统
- Linux期末复习
认识Linux
安装Linux
图形界面与命令行
文件管理与常用命令
文件/目录的打包和压缩
gzip压缩文件和gunzip、zcat压缩文件命令
一般压缩解压文件:
gzip [文件名] gunzip [解压文件名]
一般压缩解压文件:
gzip [文件名]
gunzip [解压文件名]
一般压缩解压文件:
gzip [文件名]
gunzip [解压文件名]
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt
[root@localhost stdio]# gzip hello.txt
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt.gz
[root@localhost stdio]# gunzip hello.txt.gz
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt
[root@localhost stdio]#
如果不想删除源文件要怎么做呢?使用如下命令:
gzip -c [文件名] > [压缩文件名.gz]
zcat [解压文件名.gz] >[压缩文件名.gz]
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt
[root@localhost stdio]# gzip -c hello.txt >hello.txt.gz
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt hello.txt.gz
[root@localhost stdio]# zcat hello.txt.gz >he.txt
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt hello.txt.gz he.txt
[root@localhost stdio]#
在上面的命令中,zcat [解压文件名.gz] >[压缩文件名.gz] 与 gunzip -c [解压文件名.gz] >[压缩文件名.gz] 作用一样,另外,zcat [文件名]会将文件压缩信息输出在窗口上,即输出在 std。
一般压缩解压文件:
bzip2 [文件名]
bunzip2 [解压文件名]
//压缩解压后不会删除原文件
bzip2 -k [文件名]
bunzip2 -k [解压文件名]
例子:
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt
[root@localhost stdio]# bzip2 hello.txt
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt.bz2
[root@localhost stdio]# bunzip2 hello.txt.bz2
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt
[root@localhost stdio]# bzip2 -k hello.txt
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt hello.txt.bz2
[root@localhost stdio]# rm hello.txt
rm:是否删除普通文件 "hello.txt"?y
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt.bz2
[root@localhost stdio]# bunzip2 -k hello.txt.bz2
[root@localhost stdio]# ls
1.c 2.c 3.c hello.txt hello.txt.bz2
[root@localhost stdio]#
在Linux系统中,tar 是一个非常重要的归档工具,用于将一组文件和目录打包到一个单一的.tar文件中。它创建的这种归档文件并不进行压缩,仅仅是将多个文件集合在一起,并保持原始文件的权限、所有权和其他元数据信息。
tar -cvf [文件名]
tar -xvf [解压文件名]
然而,为了减少存储空间占用以及在网络上传输时加快速度,通常会结合使用 tar 和压缩工具(如gzip或bzip2)对归档文件进行压缩。这里 -z 或 -j 参数的作用就是启用压缩功能
tar -czvf [文件名]
tar -xzvf [解压文件名]
tar -cjvf [文件名]
tar -xjvf [解压文件名]
如果要选择性的归档或压缩、解压某个文件或目录,那么需要加 w,如下:
tar -cwzvf [文件名]
tar -xwzvf [解压文件名]
tar -cwjvf [文件名]
tar -xwjvf [解压文件名]
在命令中;
如果加选项 -C (directory),则说明转到指定的目录,命令如下:
[root@localhost ~]# tar -cjvf stdio.tar stdio/
stdio/
stdio/1.c
[root@localhost ~]# tar -xjvf stdio.tar -C st/
stdio/
stdio/1.c
[root@localhost ~]# cd st/
[root@localhost st]# ls
stdio
[root@localhost st]# ls stdio/
1.c
[root@localhost st]#
存放用户登录用户信息的文件位置:/etc/passwd 文件中域的的格式:
username:passwd:uid:gid:userinfo:home:shell:
例子:
[root@localhost st]# tail -1 /etc/passwd daliu:x:1008:1006::/home/daliu:/bin/bash
/etc/passwdw 文件中域的含义
域 | 含义 |
---|---|
username | 用户名 |
password | 登录密码(一般显示的是密码转换后的乱码) |
uid | 用户ID(0-99一般为系统保留) |
gid | 用户组ID |
userinfo | 用户信息 |
home | 分配该用户的主目录(但位置是人为决定的,自己可以修改) |
shell | 登录后启动的shell |
一般root用户的UID为0,UID一般是唯一的为的是区分不同的用户,但UID为0的除外,UID为0则说明为超级用户;
创建用户时,系统会分配一个主目录给用户一般在 home 目录下,例如用户user主目录为 /home/user。
Linux系统中的/etc/shadow
文件是存放用户密码信息的重要安全文件,也称为“影子口令文件”。它的主要作用是存储用户的加密密码以及与密码相关的属性,以增强系统的安全性。
在早期的Unix/Linux系统中,密码是以明文或简单加密的形式存储在/etc/passwd
文件中。为了提高系统的安全性,从1970年代末期开始引入了影子口令的概念,将密码字段从/etc/passwd
移出,并存放在只有超级用户(root)可以读取的/etc/shadow
文件中,而原来的 /etc/passwd 中的密码字段显示 x ,这就是上面的例子中显示x的原因。
通过这种方式,即使攻击者获取了/etc/shadow
文件,由于密码已经被高度加密,直接破解难度大大增加,从而有效提高了系统的密码安全级别。同时,通过对密码策略的设定,还可以实现对用户密码复杂度和有效期的管理。
域 | 含义 |
---|---|
username | |
password | |
min | |
max | |
warm | |
inactive | |
expire | |
flag |
下面就举个例子:
[root@localhost st]# tail -1 /etc/passwd daliu:x:1008:1006::/home/daliu:/bin/bash
[root@localhost st]# tail -1 /etc/shadow daliu:$6$f703Izgm$gIA74I6Vyqdjstz3BazhvEUVWfSyelNuv7UKTUtB3cScauSctebqrBIr/KShHnBcWWQideao3aucMrXsO.I6Z/:19694:0:99999:7:::
用户组一方面是为了查找用户时更方便,比如查找user用户,你不需要去passwd文件一行一行的查找,你只需要去group文件找到对应的用户组即可。
同样的,用户组也有类似passwd、shadow之和这样的文件,分别为group、gshadow.
/etc/group 文件中域的含义如下:
域 | 含义 |
---|---|
group_name | 组用户名 |
group_password | 加密后的用户组口令 |
group_id | 用户组ID |
group_members | 以逗号隔开的用户清单 |
/etc/gshadow 文件中域的含义如下:
域 | 含义 |
---|---|
group_name | 组用户名 |
group_password | 加密后的用户组口令 |
group_members | 以逗号隔开的用户清单 |
1.添加用户与用户组———— useradd & groupadd
用法:
值得注意的是,对于选项的-d、-md,加了m表示在/home目录创建用户目录,如果不加,表示该目录已存在不需要再使用m,详细请结合下面的展开内容来开。
用法: groupadd [选项] [组名] ,一般会用到的选项有
2.删除用户与用户组———— userdel & groupdel
3.修改用户与用户组———— usermod 、passwd & gpasswd
对于usermod的进一步说明,除了上面提到的选项,还有如下选项:
3.登录用户与用户组———— su newgrp
root用户与普通用户之间的切换使用su,如果要切换根目录则需要在su 后加-,即: su - [用户]。
在Linux中,组的登录使用 newgrp ,即 newgrp [组名]。
下面通过一个例子加以理解:
添加一个用户名为15user,且该用户在用户组15group中,设置用户组和用户密码为123,创建一个用户15user2让该用户为用户组管理员,修改user的UID为2024,最后删除所用所建信息。
在上面的例子中,我们使用gpasswd -A来设置用户组管理员。
我们先用ls -l 查看文件的权限信息:
在上面的开头有三段他们分别表示为文件所有者、同组用户、其他用户:
其中的d表示目录。
使用数字进行文件权限的划分,其中r=4、w=2、x=1、-=0,这样rwx这组权限就是4+2+1=7,r-x这组权限就是5。
例如:chown sjh:sjh result.txt
格式:chgrp group file
其中group:组名或组代号
功能: 改变文件或目录组群
例如:chgrp user result.txt
关于chown与chgrp的命令的例子:
格式:umask [mask]
功能:设置文件或目录的默认权限
注意:系统默认屏蔽的权限为022(umask的默认值为0022),因此新 创建的目录权限就为777-022=755,用字符表示就是rwxr-xr-x,新创 建的普通文件权限为666-022=644,即rw–r–r–。
1)查看文件隐藏属性:lsattr
2)修改文件隐藏属性:chattr
chattr [+-=] [ ai] 文件或目录名称
文件特殊权限有以下三种:
1)SUID:Set UID(只对二进制程序有效,对shell script无效)
例如:ll /usr/bin/passwd
注意:当用户执行passwd命令的时候,需要修改/etc/shadow文件,而该文件普通用户并没有任何权限。
2)SGID:Set GID
例如:ll /usr/bin/locate 注意:当用户执行locate命令的时候,需要读取/var/lib/mlocate/mlocate.db文件。
3)SBIT:Sticky Bit (只对目录有效)
设置方法:
chmod -o+t [指定目录名]
或者
chmod 1777 [指定目录名]
对一个目录进行如上设置以后,假设有用户A和B,用户A在该目录下创建的文件只有他自己的root用户可以删,像B这样的其他用户删不了。
接下里介绍两个软件安装的工具,分别是RPM:Red Hat Package Manager(Red Hat软件包管,以及YUM:Yellow dog Dpdater,Modified.
RPM工具不需要网络,需要提前准备好安装包,但是他也有缺点安装的时候如果缺少依赖包你还需要再安装依赖包;
而YUM工具需要再有网的状态下才可以下载,它免去了依赖包提醒,自动将依赖包下载好,较为方便,我跟推荐使用YUM。
1.安装软件包(install)
rpm -ivh rpm软件包全名:
2.查询已安装的软件包(query)
rpm –qa //查询出本机所有已经安装的软件
rpm –q httpd //查询httpd软件包是否已经安装
rpm -q【i l c d R】 vsftpd
rpm -qf /etc/inittab
查询未安装的软件包:
rpm -qp 【i l c d R】 gconf-editor-2.28.0-3.el6.i686.rpm
3.升级与更新(upgrade/freshen)
rpm -Uvh 软件包名称
//原来没有安装过的,直接安装;如果已安装过,则更新至新版
rpm -Fvh 软件包名称
//原来没有安装过的,不安装;如果已安装过,则更新至新版
4.卸载RPM包(erase)
rpm -e vsftpd
注意:卸载时只需要给出软件包名称vsftpd,而不需要给出软件包的全部名称信息vsftpd-2.2.2-6.el6.i686.rpm。
yum在线升级机制:
软件包管理:
yum的软件组功能:
yum groupinfo Eclipse(查询Eclipse软件组的相关信息)
(1)IDE硬盘:hd[a-d]*
hd表示硬盘类型为IDE,中括号中的字母为a、b、c、d中的一个,a是基本盘,b是从盘,是辅助主盘,d是辅助从盘,*指分区,即主分区和扩展分区。
例如:hda1代表第一块IDE硬盘上的第一个分区。hdb5代表第二块IDE硬盘的第一个逻辑分区。
(2)SCSI/SATA硬盘:sd[a-p]*
sd表示SCSI/SATA硬盘。SCSI/SATA的引导盘使用设备文件/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4作为主分区或者扩展分区,而以/dev/sda5,/dev/sda6等作为逻辑分区。
先使用ls -l /dev |grep ‘sd’查看文件里是否有可用的磁盘,如果没有需要创建一个磁盘,创建步骤:
1.通过虚拟机设置增加一块SCSI硬盘,大小为5G,重启系统。
2.将该硬盘分为2个主分区(每个主分区的大小为1G),1个扩展分区(大小为3G),将第2个主分区制作成swap分区。
命令:
3.将扩展分区划出2个逻辑分区(大小分别为1G、2G)。命令:
ls /dev/sd*
fdisk –l /dev/sda
fdisk /dev/sdc
mkfs –t ext4 /dev/sdc1
还可以写成**mkfs.ext4 /dev/sdc1
**mkswap dev/sdb2
fsck –t ext4 /dev/sdc1
badblocks /dev/sdb5
df
,或使用df -h
输出更易于查看。上面的-t意思是参数TYPE的意思,后面接ext4()、vfat(FAT32)、ntfs()等,
注意: C盘必须已经被格式化为FAT32格式。
mount 不带任何参数执行mount命令,则会显示当前系统中已经挂载的所有的文件系统列表。
格式: umount <设备名或挂载点>
说明:卸载指定的设备,既可以使用设备名也可以使用挂载点。
举例: # umount /dev/cdrom
每条记录由6个字段组成。
1.设备名称 2.设备挂载点 3.文件系统类型 4.挂载选项 5.是否备份 6.自检顺序
如果想要系统自动挂载/dev/sdc5分区,可在/etc/fstab
文件添加下面这行:
/dev/sdc5 /usr/music ext4 defaults 0 0
注意:由于fstab文件非常重要,如果这个文件有错误,就可能会造成系统不能正常启动。因此向fstab文件中添加数据时应非常小心。修改完该文件后务必使用mount -a
命令测试有没有错误。
以sdb1为例
第一步:先配置sdb磁盘,然后挂载sdb1磁盘
第二步:使用quotaon /sdb1/生成aquota.group和aquota.user文件
第三步:对用户或用户组进行磁盘限制,例如:edquota -u user1,然后会进入一个文件,文件里的0表示禁用,在里面可以设置创建文件个数或文件大小的软限制、硬限制;
第四步:我们登录user1,在/sdb/目录下创建文件,使用 db if=/dev/zero of=/sdb1/test/ bs=1k count=10
这条命令进行测试,这是一个写文件大小的命令,这样可以快速测试文件大小的软限制和硬限制;
第五步:子里面建文件,检验创建文件个数的软限制和硬限制;
第六步: 可以使用repquota -u查看目录的情况;
第七步:关闭磁盘匹配额,quotatoff /sdb1/