Linux用户和用户组管理
基本概念
- Linux用户和用户组
Linux 是多用户多任务操作系统,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响;linux 正是通过权限划分,给予不同用户不同权限,每个用户在权限允许范围内完成不同的任务,来实现多用户运行机制
而给授予权限的时候,对用户分别授予不太合理,应该建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要这个权限的用户放入这个组中(这就是用户组)
用户和用户组的对应关系有以下 4 种:
① 一对一:一个用户可以存在一个组中,是组中的唯一成员;
② 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
③ 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
④ 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展
- Linux的UID和GID
登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。
Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中(包含内容如下)
[root@localhost ~]# vi /etc/passwd
#查看一下文件内容
root: x :0:0:root:/root:/bin/bash
bin: x :1:1:bin:/bin:/sbin/nologin
daemon: x :2:2:daemon:/sbin:/sbin/nologin
adm: x :3:4:adm:/var/adm:/sbin/nologin
…省略部分输出…用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
① 其中用户名是方便记忆的,计算机真正存储的是UID,UID是0~65535 之间的数,不同范围的数字表示不同的用户身份
0:超级用户,管理员
1~499:系统用户/伪用户,系统使用,系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
499~65535:普通用户
② 密码位x标识用户有密码,但密码都是保存在/etc/shadow 文件中,/etc/shadow 文件只有 root 用户拥有读权限
③ GID:是用户的初始组ID
初始组:指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。
将群组ID存在/etc/group下,内容如下
[root@localhost ~]#vim /etc/group
root: x :0:
bin: x :1:bin,daemon
daemon: x :2:bin,daemon
…省略部分输出…
lamp: x :502:
组名:组密码:GID(组ID):组中用户
① 其中组中用户默认包含以这个组作为初始组的用户,而只显示以他作为附加组的用户
② 组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中
详细操作
- 添加新的系统用户(修改密码后才算真正的创建成功)
useradd 选项 用户名
选项:
-u 手动指定用户的UID,(注意范围,500~65535)
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 初始组 指定用户所属的初始组,一般以和用户名相同的组作为用户的初始组,不配置会自动创建
-G 附加组,指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
==useradd 命令有很多默认的配置值,这些默认值存在/etc/default/useradd 和 /etc/login.defs
- 修改用户密码(使用root去修改)
[root@localhost ~]#passwd [选项] 用户名
- 修改用户信息
usermod 选项 用户名
-u, -c, -d, -g, -G, -s和useradd一样
-u 手动指定用户的UID,(注意范围,500~65535)
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 初始组 指定用户所属的初始组,一般以和用户名相同的组作为用户的初始组,不配置会自动创建
-G 附加组,指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
多出来了-I, -L和-U
-l 用户名:修改用户名称
- 删除用户
[root@localhost ~]# userdel -r 用户名
-r 选项表示在删除用户的同时删除用户的家目录。
- 查看用户的UID GID和附加组信息
[root@localhost ~]# id 用户名
- 用户切换
su -用户名
-表示当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境
- 添加用户组
groupadd -g 组名
- 修改用户组
[root@localhost ~]# groupmod [选现] 组名
-g GID:修改组 ID;
-n 新组名:修改组名;
如:#把组名group1修改为testgrp
#groupmod -n testgrp group1
- 删除用户组(不能删初始组)
[root@localhost ~]#groupdel 组名
- 把用户添加进组或从组中删除
[root@localhost ~]# gpasswd 选项 组名
① -a user 将 user 用户加入到群组中。
② -d user 将 user 用户从群组中移除。
③ -A user1,… 将群组的控制权交给 user1,… 等用户管理,也就是说,设置 user1,… 等用户为群组的管理员,仅 root 用户可用。
④ -M user1,… 将 user1,… 加入到此群组中,仅 root 用户可用。
⑤ -r 移除群组的密码,仅 root 用户可用。
⑥ -R 让群组的密码失效,仅 root 用户可用。
⑦ 选项为空时,表示给群组设置密码,仅 root 用户可用。
- 切换用户的有效组
用户可以属于多个用户组,但是用户在创建文件后,默认生效的组身份是初始组
newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组
[root@localhost ~]# newgrp 组名
Linux权限管理
基本概念
针对用户和用户组设定文件权限
-
文件的所有者就是文件的创建者,所属组可以对应到用户的初始组和附加组
-
Linux的权限位:
其中各个权限对应的数字如下:
r --> 4
w --> 2
x --> 1
由于这 9 个字符分属 3 类用户,因此每种用户身份包含 3 个权限(r、w、x),通过将 3 个权限对应的数字累加,最终得到的值即可作为每种用户所具有的权限
拿 rwxrw-r-x 来说,所有者、所属组和其他人分别对应的权限值为:
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
第一位 | 用户 | 组用户 | 普通用户 |
---|---|---|---|
- | rwx | r-x | r-x |
第一位-为文件,d为目录
操作
- 更改文件和目录的所属组 changegroup
[root@localhost ~]# chgrp [-R] 所属组 文件名(目录名)
-R(注意是大写)选项长作用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息。
- 修改文件和目录的所有者和所属组
[root@localhost ~]# chown [-R] 所有者:所属组 文件或目录
root 用户拥有最高权限,可以修改任何文件的权限,而普通用户只能修改自己文件的权限(所有者是自己的文件)
- 修改文件或目录的权限
[root@localhost ~]# chmod [-R] 权限值 文件名
-R(注意是大写)选项表示连同子目录中的所有文件,也都修改设定的权限
① 使用数字来代表权限值:如:
[root@localhost ~]# chmod 777 .bashrc
② 也可以使用字母来代表权限值,chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
如:
[root@localhost ~]# chmod u=rwx,go=rx .bashrc
- 如何查看文件的权限和拥有者
ls -al 文件
[root@localhost ~]# ls -al .bashrc
-rw-r–r--. 1 root root 176 Sep 22 2004 .bashrc
第一列:规定了不同的用户对文件所拥有的权限,具体权限的含义将在后续章节中讲解。
第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
- 特殊权限
a. SUID 特殊权限
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 22984 Jan 7 2007 /usr/bin/passwd
SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
① 可执行文件可以设置SUID,对目录设置无效
② 用户要对该文件有可执行权限
③ 用户执行该文件的时候,会以文件的所有者身份执行
④ SUID权限在文件的执行过程中有效,一旦执行完毕,身份的切换也随即消失
如何添加:
① 普通加法 chmod u+s /file
② 删除权限 chmod u-s /file
③ 数字加权 chmod 4777 /file
④ 删除权限 chmod 777 /file
b. SGID(可以设置在目录上)
[root@localhost ~]# ll /usr/bin/locate
-rwx–s--x. 1 root slocate 35612 8月24 2010 /usr/bin/locate
前面学习了 SetUID,那么,什么是 SetGID 呢?很简单,当 s 权限位于所属组的 x 权限位时,就被称为 SetGID,这个时候用户在执行具有 SGID 权限的可执行文件时,用户的群组身份会变为文件所属群组
举个例子,/usr/bin/locate这个程序可以去查询/var/lib/mlocate/mlocate.db这个文件的内容,mlocate.db的权限如下:
-rwx–s--x root slocate /usr/bin/locate
-rw-r----- root slocate /var/lib/mlocate/mlocate.db
若使用vbird这个账号执行locate时,vbird就会获得用户组slocate支持,又由于用户组slocate对mlocate.db具有r权限,所以vbird就可以读取mlocate.db了。
如何添加:
① 普通加法 chmod g+s /file
② 删除权限 chmod g-s /file
③ 数字加权 chmod 2777 /file
④ 删除权限 chmod 777 /file
如果作用在目录上
当一个目录被赋予 SGID 权限后,进入此目录的普通用户,其有效群组会变为该目录的所属组,会就使得用户在创建文件(或目录)时,该文件(或目录)的所属组将不再是用户的所属组,而使用的是目录的所属组
c. SBIT(只对目录有效)
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 4 root root 4096 Apr 19 06:17 /tmp
SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件
① 普通加法 chmod o+t /file
② 删除权限 chmod o-t /file
③ 数字加权 chmod 1777 /file
④ 删除权限 chmod 777 /file
- 查看文件的权限基本信息
ls -al会列出该文件下的所有文件信息,包括隐藏的文件,而ls -l只列出显式文件,说明这两个命令还是不等同的!
ll不是命令,是ls -l的别名
安排周期任务crontab
[root@localhost ~]# crontab [选项] [file]
注意,这里的 file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab。
常用的命令选项
① -u user 用来设定某个用户的 crontab 服务,例如 “-u demo” 表示设备 demo
用户的 crontab 服务,此选项一般有 root 用户来运行。
② -e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
③ -l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
④ -r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
⑤ -i 在删除用户的 crontab 文件时,给确认提示。
[root@localhost !]# crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
- 执行的任务
强制递归删除
rm -rf 目录名
读取文件的每行的第一个字段
awk ‘{print $1}’ data2.txt
打包压缩(tar)
基本概念
- 打包和压缩的区别:
打包:将多个文件和目录集中存储在一个文件中
压缩:指的是利用算法对文件进行处理,从而达到缩减占用磁盘空间的目的;压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩
基本操作
- 打包
[root@localhost ~]#tar [选项] 源文件或目录
一般使用cvf,打包多个文件用空格隔开,打包后文件名用.tar作为扩展
[root@localhost ~]#tar -cvf 打包后文件名.tar 源文件或目录 源文件或目录 源文件或目录
-c 将多个文件或目录进行打包。
-A 追加 tar 文件到归档文件。
-f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v 显示打包文件过程;
-r 向压缩归档文件末尾追加文件
tar -rf all.tar *.gif
-u 更新原压缩包中的文件
tar -uf all.tar *.gif
- 打包并压缩
压缩命令不能直接压缩目录,必须先用 tar 命令将目录打包,然后才能用 gzip 命令或 bzip2 命令对打包文件进行压缩。例如
[root@localhost ~]#ll -d test test.tar
drwxr-xr-x 2 root root 4096 6月 17 21:09 test
-rw-r–r-- 1 root root 10240 6月 18 01:06 test.tar
#我们之前已经把test目录打包成test.tar文件
[root@localhost ~]# gzip test.tar
[root@localhost ~]# ll test.tar.gz
-rw-r–r-- 1 root root 176 6月 18 01:06 test.tar.gz
#gzip命令会把test.tar压缩成test.tar.gz
- 解打包
[root@localhost ~]#tar -xvf 压缩包
这样是默认解压到当前包下;如果想要指定解压位置,则需要使用 “-C(大写)” 选项。例如:
[root@localhost ~]# tar -xvf test.tar -C /tmp
#把文件包test.tar解打包到/tmp/目录下
- 查看文件包中有哪些文件
[root@localhost ~]#tar -tvf 压缩包
- 只是要tar命令做打包压缩(解压缩解打包)操作
① “.tar.gz” ,只不过是在打包或解打包前加了z
a. 压缩
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
#把/temp/目录直接打包压缩为".tar.gz"格式,通过"-z"来识别格式,"-cvf"和打包选项一致
b. 解压
[root@localhost ~]# tar -zxvf tmp.tar.gz
#解压缩与解打包".tar.gz"格式
② .tzr.bz2,换成j
[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/
#打包压缩为".tar.bz2"格式,注意压缩包文件名
[root@localhost ~]# tar -jxvf tmp.tar.bz2
#解压缩与解打包".tar.bz2"格式
已经挂载的设备如何卸载
[root@localhost ~]# umount 设备文件名或挂载点
磁盘操作
基本概念
- 为什么要进行磁盘的分区
① 数据安全:
a. 只用一个分区,若遇到系统需要重装或者分区需要进行格式化等,原有的重要文件无法在本硬盘保留,而若提前进行了合理分区,则用户数据不会收到影响
b. 同等外部条件下,读取越频繁,磁盘越容易受损,我们把读写频繁的目录挂载到一个单独的分区,可以把磁盘的损伤控制在一个集中的区域。
② 效率(针对目前常用的机械硬盘,固态硬盘方面还不太了解):
a. 分区将数据集中在某个磁柱的区段,当有数据要读取自该分区时, 硬盘只会搜寻相应区段,有助于数据读取的速度与效能的提升!
b. 磁盘不同区域(内圈与外圈,)的读取速度是不同的,磁盘越大,差别越明显,通常将读写频繁的目录挂载到读取速度更快的区域(总体来说,是推荐外圈),不常使用和变更的数据放在稍慢的区域将是一个比较好的选择。
- 主分区,扩展分区,逻辑分区
具体操作
磁盘分区与格式化
- 使用fdisk-l查看磁盘分区情况,磁盘信息
fdisk -l
-
fdisk /dev/sdb到要分区的磁盘
-
p查看分区情况,m查看帮助
-
n 创建分区,p创建主分区,设置分区号和分区大小 +512M
-
n创建分区,e创建扩展分区,设置分区号和分区大小
-
n创建分区,l创建逻辑分区,设置分区号和分区大小
-
分区完成w保存
-
接下来我们需要将物理分区格式化成某一个文件系统,我们使用mkds进行分区格式化操作
mkfs - t ext3 /dev/sda
- 文件系统的挂载
mount /dev/sda /mnt/firstmnt
- 卸载
- 自动挂载
修改/etc/fstab文件如下,重启计算机后该分区将自动挂载。
一个用户已经属于某一个或某几个组了,怎么让他加入新的组
查看用户所属组的组成员:
groups
让用户加入新组groupA不能直接使用
usermod -G groupA
这会让用户离开已在的组,仅仅加入groupA
应该使用
usermod -aG groupA user
查看用户的组id
[root@localhost ~]# usermod -G root lamp
#把用户加入root组
[root@localhost ~]# id lamp
uid=501(lamp) gid=501(lamp) groups=501(lamp),0(root)
#大家发现root组中加入了lamp用户的附加组信息
kill常用的几个signal
HUP 1 终端断线
INT 2 中断(同 Ctrl + C),但并不强制
QUIT 3 退出(同 Ctrl + \)
TERM 15 正常终止,是kill的默认信号
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
先用ps查找进程,再用kill杀掉
字符统计命令wc
#显示一个文件的行数
wc -l filename
#显示一个文件的字节数,每一行的换行符也要被计算上,UTF-8编码时,一个汉字是3字节,一个英文字符是一个字节
wc -c filename
#显示一个文件的字符数,一个汉字按一个字符算
wc -m filename
#显示一个文件中的最长行的长度
wc -L filename
#显示一个文件中字数,一个字被定义为由空白、跳格或换行字符分隔的字符串
wc -w filename
#注意:每行结尾的换行符也算一个字符,空格也算一个字符
#采用UTF-8编码,所以一个汉字在这里被转换为3字节
#当使用-m选项时,一个汉字就作为一个字符计算
用来统计当前目录下的文件数
ls -l | wc -l
软件包的查询命令rpm和各种查询的方法
① 查询包是否安装
-q 查询
rmp -q 包名
② 查询所有已安装的rpm包
-a 所有
rpm -qa
③ 查询软件包的详细信息
-i 信息
rpm -qi 包名
④ 查询未安装包的信息
rpm -qip 包名
⑤ 查询包中文件的安装位置
-l 列表
rpm -ql包名
⑥ 查询系统文件属于哪个rpm包
-f 属于哪个软件包
rpm -qf
⑦ 查询包的依赖性
rpm -qR
日志文件的保存路径
/var/log/
网络接口的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet #网卡类型
DEVICE=eth0 #网卡接口名称
ONBOOT=yes #系统启动时是否自动加载
BOOTPROTO=static #启用地址协议 --static:静态协议 --bootp协议 --dhcp协议
IPADDR=192.168.1.11 #网卡IP地址
NETMASK=255.255.255.0 #网卡网络地址
GATEWAY=192.168.1.1 #网卡网关地址
DNS1=10.203.104.41 #网卡DNS地址
HWADDR=00:0C:29:13:5D:74 #网卡设备MAC地址
BROADCAST=192.168.1.255 #网卡广播地址
ipconfig [interface] [options] address
添加路由的方法
- 使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了
#添加一条到莫格网段的路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)
route add -net 192.168.0.0/24 gw 192.168.0.1
添加一条到某个主机的路由
route add -host 192.168.1.1 dev 192.168.0.1
#删除一条路由 删除的时候不用写网关
route del -net 192.168.122.0 netmask 255.255.255.0
- 在linux下设置永久路由的方法:
在/etc/rc.local里添加
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.3.254
查看linux当前的所有运行的网络服务
所有监听端口及对应的进程
netstat -tlnp
命令的聚合
find命令
find path -option [ -print ] [ -exec -ok command ] {} \
find
选项:
-name: 按照文件名搜索;搜索的文件名必须和你的搜索内容一致才能找到
[root@localhost ~]# find /-name yum.conf
-iname: 按照文件名搜索,不区分文件名大小;
[root@localhost ~]#find.-iname cangls
-inum: 按照 inode 号搜索;
[root@localhost ~]# find.-inum 262147
-size[±]大小:按照指定大小搜索文件,这里的"+“的意思是搜索比指定大小还要大的文件,”-" 的意思是搜索比指定大小还要小的文件
单位应该是
k
M
c:字节
不写默认为b 512byte
w:2子节
G
[root@localhost ~]# find.-size 25k
-atime [±]时间: 按照文件访问时间搜索
-mtime [±]时间: 按照文改时间搜索
-ctime [±]时间: 按照文件修改时间搜索
链接文件
目录项:
inode结构:
软链接:
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
所以创建软链接会创建一个新的inode节点,其对应数据块内容存储所链接的文件名信息
要求:
① 软链接和软链接的文件可以不在同一个文件系统
② 可以给目录创建软连接
③ 软链接文件的源文件必须写成绝对路径,而不能写成相对路径
软连接的作用:
① 软链接主要是为了照顾管理员的使用习惯。比如,有些系统的自启动文件 /etc/rc.local 放置在 /etc 目录中,而有些系统却将其放置在 /etc/rc.d/rc.local 中,那么干脆对这两个文件建立软链接,不论你习惯操作哪一个文件,结果都是一样的
② 便于文件的管理,比如把一个复杂路径下的文件放到简单路径下
③ 解决空间不足,某个文件文件系统空间用完,但又想在他下面创建新目录,可以把另一个剩余空间多的文件系统的目录链接到该系统
硬链接:硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能
所以创建的硬链接并不会新建Inode而是links + 1,再在目录文件对应数据块上增加一条文件名和inode对应关系记录
要求:
① 硬链接和硬链接的文件必须在同一个文件系统
② 目录不能创建硬链接
ls -al 的第二列就是文件的硬链接数
ls -li 的第一列就是inode号
- 创建软连接:软连接的源文件要写成绝对路径
给源文件创建软连接/temp
In -s /root/bols /tmp
创建硬链接
#给源文件建立硬链接文件 /tmp/test-hard
ln /root/test /tmp/test-hard
Linux文件系统
文件系统的层次结构
Linux操作系统中,所有的文件和目录都被组织成一个根节点 “/” 开始的倒置树状结构
① “/” 表示根目录
② “.” 表示当前目录
③ “…” 表示父目录
Linux的文件系统到底是怎么样的
首先对于文件的结构来说,windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区)(C; D; E等)
而对Linux来说,他的文件结构是单个的树状结构
分区是对磁盘进行的,把磁盘分区号以后,可以把不同的分区挂载到不同的目录上,就不同的分区对应着不同的目录
当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备,而这些对应的动作就是“挂载”。 将物理分区细节屏蔽掉。用户只有统一的逻辑概念。所有的东西都是文件。
绝对路径和相对路径
① 绝对路径:从根目录 / 开始写,cd /root/Desktop
② 绝对路径:./Desktop,表示当前路径下的Desktop
Linux命令行下如何识别文件类型
蓝色是目录,黑色是文件
命令提示符
[root@localhost ~]#
① []:这是提示符的分隔符号,没有特殊含义。
② root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录。
③ @:分隔符号,没有特殊含义。
④ localhost:当前系统的简写主机名(完整主机名是 localhost.localdomain)。
⑤ ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。家目录就是用户的初始登陆位置,用户在自己的家目录中拥有完整权限
a. 超级用户的家目录:/root。
b. 普通用户的家目录:/home/用户名。
⑥ #:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。
基本命令
- cd 切换目录
[root@localhost ~]# cd [相对路径或绝对路径]
特殊符号 | 作 用 |
---|---|
~ | 代表当前登录用户的主目录 |
~用户名 | 表示切换至指定用户的主目录 |
- | 代表上次所在目录 |
. | 代表当前目录 |
… | 代表上级目录 |
- pwd 显示当前路径
[root@localhost ~]# pwd
- ls 查看目录下文件
[root@localhost ~]# ls [选项] 目录名称
- mkdir 创建目录
[root@localhost ~]# mkdir [-mp] 目录名
① -p 递归创建
② -m 手动设置权限
[root@localhost ~]# mkdir -m 711 test2
- touch 创建文件及修改文件时间戳
[root@localhost ~]# touch [选项] 文件名
① 访问时间(Access Time,简称 atime):只要文件的内容被读取,访问时间就会更新。例如,使用 cat 命令可以查看文件的内容,此时文件的访问时间就会发生改变。
② 数据修改时间(Modify Time,简称 mtime):当文件的内容数据发生改变,此文件的数据修改时间就会跟着相应改变。
③ 状态修改时间(Change Time,简称 ctime):当文件的状态发生变化,就会相应改变这个时间。比如说,如果文件的权限或者属性发生改变,此时间就会相应改变。
文本处理
vim
① 在vim的命令模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
② 在输入模式下,编辑文件(命令模式下按i / l / o/ O/ a/ A 进入输入模式)
③ 在编辑模式下,执行保存,查找,替换等操作
cat
① 显示文件内容
[root@localhost ~]# cat [选项] 文件名
② 把文件1 文件2 合并输入到文件3
[root@localhost ~]# cat 文件1 文件2 > 文件3
more
当使用 cat 命令查看文件内容时,如果文件过大,以至使用PgUp+上箭头组合键向上翻页也无法看全文件中的内容,该怎么办呢?这就需要使用 more 命令。
[root@localhost ~]# more [选项] 文件名
more只能往后 less可以往前
输入输出重定向
- 输入重定向:指的是重新指定设备来代替键盘作为新的输入设备;
① < 将指定文件作为命令的输入设备
[root@localhost ~]# cat < /etc/passwd
② << 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串
[root@localhost ~]# cat << 0
③ 命令 < 文件 1 > 文件 2 将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中。
cat < /etc/passwd > a.txt
- 输出重定向:指的是重新指定设备来代替显示器作为新的输出设备。
① > 把命令执行的标准输出重定向到指定文件,会覆盖指定文件的已有数据
[root@localhost ~]# cat Linux.txt > demo.txt
② >> 不覆盖
③ 2> 写错误信息,会覆盖
④ 2>> 不覆盖
grep
grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子
[root@localhost ~]# grep [选项] 模式 文件名
awk
awk 命令逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理
[root@localhost ~]# awk [选项] ‘脚本命令’ 文件名
其中脚本命令由两部分组成,‘匹配规则{执行命令}’
[root@localhost ~]# awk ‘/^$/ {print “Blank line”}’ test.txt
awk还可以直接从脚本文件中读取命令 -f
[root@localhost ~]# cat awk.sh
{print $1 "'s home directory is " $6}
[root@localhost ~]# awk -F: -f awk.sh /etc/passwd
BEGIN用于在读取先执行,END在读取后执行
[root@localhost ~]# awk ‘BEGIN {print “The data3 File Contents:”}
{print $0}
END {print “End of File”}’ data3.txt
The data3 File Contents:
Line 1
Line 2
Line 3
End of File
shell
vim tets.sh #.sh只是为了见名思意
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
shell变量
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
使用 $
your_name=“qinjx”
echo $your_name
echo ${your_name} #花括号知识作为边界
只读变量
myUrl=“http://www.google.com”
readonly myUrl
删除变量 不能删只读
unset variable_name
变量类型
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
字符串
双引号里可以有变量,也可以出现转义字符
your_name=‘runoob’
str=“Hello, I know you are “$your_name”! \n”
echo -e $str
获取字符串长度
string=“abcd”
echo ${#string} #输出 4
数组
数组名=(值1 值2 … 值n)
${数组名[下标]}
管道命令
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)
通过管道将ls -al的输出作为 下一个命令less的输入
$ ls -al /etc | less
用管道读取文件的每行的第一个字段
cat myfilr | awk ‘{print $1}’
linux考试
-
创建linux分区的时候一定要创建SWAP和根分区
-
Linux分区必须有 文件系统分区 和 交换分区
-
export定义shell的全局变量
-
在运行在多用户模式下的时候,CYRL+ALT+F 可以切换6个虚拟用户终端
-
Linux启动的第一个进程init的的第一个脚本程序是/etc/rc.d/rc/sysinit
-
所有服务的启动脚本在/etc/rc.d/init.d
-
startX用来启动X window
-
Linux的默认分区是EXT3
-
CTRL+ALT把鼠标从VM释放
-
man可以让用户获得命令的详细了解
-
Linux内核引导的时候,从文件/etc.ftsad读取要加载的文件系统,这个文件用来管理文件系统信息
-
网络管理的重要任务是 控制 和 监控
-
静态路由设当后,若网络拓扑发生变化,需要系统管理员修改路由设置
-
Linux分区必须有 文件系统分区 和 交换分区
-
mkdir -p 迭代创建 rm -r迭代删除 rm -f时强制删除 -i会给出提示(默认)
-
cp 源 目标 mv 源 目标 tar 目标 源
-
i节点和文件不是11对应的
-
. vi命令模式下重复对上一次的操作
-
使得用户登陆验证,修改/etc/shadow脚本
-
就绪进程不是linux系统进程类型
-
read命令读取文件的各个域的内容赋值给shell变量
-
硬链接只对文件进行链接
-
linux系统的开发模型是集市模型
-
与实时进程优先级有关的参数是 rt_priority
-
信号量是SYSTEM V进程间的通讯方式
-
/etc/shadow存用户口令的加密信息
-
用户文件描述符0表示标准输入设备文件描述符
-
rpm -e卸载软件包
-
进程有6种状态,使用exit系统调用后进入僵死
-
切换到用户John的主目录下 cd ~John
-
named start启动DNS守护进程
-
光盘使用的文件系统类型是ISO 9660
-
软件安装包默认的打包格式是…rpm
-
shadow只有root才有权限获取
-
linux启动系统的内核程序在/boot
-
init对应的配置文件的文件名是/etc/inittab pid是1
-
linux以文件的方式访问设备
-
前台启动的进程使用ctrl+c终止
-
设置限制用户使用磁盘空间的命令是quota
-
vi的命令
-
Linux缺省使用的文件系统是 Ext
-
关闭Linux系统 halt
-
关机 init 0
-
安装Linux操作系统的时候选择文本登陆方式,运行级为3
-
tar的几个参数
-
存放linux基本命令的目录为/bin
44. 强制杀死某个进程 kill -9 pid
-
useradd -d 指定用户目录
-
linux安装时自动创建了根用户
-
显示当前目录 pwd
-
vi里 o可以在光标当前所在行下添加新的行 .重复上次操作
-
文件查看less和more
查看的时候向光标上下移动less -
l时软连接文件
-
du可以显示目录的大小
-
mv对文件重命名
-
第二个IDE为hdb
-
成批添加用户 newuser