/bin #常用系统命令 /sbin #系统管理命令 /boot #启动分区 /sys #内核参数调整
/dev #设备文件 /lib #32位库文件 /lib64 #64文库文件 /media /run /mnt #临时设备的挂载点
/opt #第三方软件安装位置 /proc #系统信息 /etc #系统配置目录 /home #普通用户家目录
/root #超级用户家目录 /var,/srv #系统数据
创建文件夹
mkdir [-mp] 目录名
创建文件
touch 文件名
创建文件的四种方式:
vi filename
echo " ">filename.txt (若文件存在,则会替换)
cat >filename.txt (若文件存在,则会替换)
touch filename.txt (若文件存在,则会更新时间)
rm [-fidr] 文件或目录 / rmdir 文件夹
cp [-adfilprsu] 源文件(source) 目标文件(destination)
mv [-finvu] 源文件 目标文件
管道:将第一个命令输出的内容通过管道符交给第二个命令去处理。依次类推。
管道符是 “|”
常用来作为接收数据管道命令:grep sed awk cut head top less more wc join sort split
将一个目录内容保存在一个文件里面(ls.txt) : ls | cat>ls.txt
使用 vim 文件名 即可打开相应文件
:w - 保存文件,不退出 vim
:w file -将修改另外保存到 file 中,不退出 vim
:w! -强制保存,不退出 vim
:wq -保存文件,退出 vim
:wq! -强制保存文件,退出 vim
:q -不保存文件,退出 vim
:q! -不保存文件,强制退出 vim
:e! -放弃所有修改,从上次保存文件开始再编辑
字符串替换: :%s/const/var (将当前的文件中所有的const替换成var)
把一个文件的内容导入到当前文件中 :r 文件名 ;在文件中输入 :r /root/wechat 就把wechat文件的内容导入到当前文件里面去了
导入命令的执行结果 :r !命令 ; 在文件中输入 :r !date date命令的执行结果直接导入到当前的文件的vim文件里面
连续添加//行注释 :n1,n2s/^/\/\//g n1和n2为行区间 ,在这个区间行行首添加// ;^表示行首
连续添加#行注释 :2,6s/^/#/g 在第2~6行行首添加#
取消连续行行首注释 :n1,n2/^#//g 使用 :3,6s/^#//g 将3-6行行首的#替换成空。
find 查找路径(path) -option 命令查找文件
ln -s 程序的源路径 需要创建快捷方式的路径 创建软连接
ln -s /root/node/bin/node /usr/local/bin
如果去除 -s 执行会创建一个硬链接,类似于复制。
软连接的源文件如果被删除,则软连接无法使用。
tar本身是一个打包工具,可以把目录打包成一个文件,它把所有文件整合成一个大文件,方便复制或移动
tar不仅可以打包目录,也可以打包文件,其中不管打包还是解包,原文件是不会删除的,会覆盖当前已存在的目录
基本语法:tar [ 选项 ] XXX.tar.gz 将要打包进去的内容
选项 | 功能 |
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
-C | 解压到指定目录 |
对文件进行压缩和解压缩的命令,压缩生成.gz文件,不保留原来的文件
压缩文件 : gzip 文件名
解压文件 : gunzip 压缩文件名 或 gzip -d 压缩文件名
压缩命令: zip [选项] xxx.zip 将要压缩的内容
解压命令: unzip [选项] xxx.zip
ctrl+s导致会话窗口卡住
原因:
因为ctrl+s在Xshell中是冻结会话的快捷键,所以按下ctrl+s以后,会话窗口就被冻结住了,所以无论键盘按什么或者鼠标点击都没有反应。
解决办法
ctrl+q是解除冻结的快捷键,只要按下ctrl+q以后就可以解除窗口冻结,正常操作了。
1.通常Linux应用软件的安装包有三种:
1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。
2) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。
3) dpkg包,如software-1.2.3-1.deb。它是Debain Linux提供的一种包封装格式。
2. 一个Linux应用程序的软件包中可以包含两种不同的内容
非root用户,需要在命令前使用 sudo
useradd [选项] 用户名
选项 | 含义 |
---|---|
-u UID | 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。 |
-d 主目录 | 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限; |
-c 用户说明 | 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置; |
-g 组名 | 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。 |
-G 组名 | 指定用户的附加组。我们把用户加入其他组,一般都使用附加组; |
-s shell | 手工指定用户的登录 Shell,默认是 /bin/bash; |
-e 曰期 | 指定用户的失效曰期,格式为 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八个字段; |
-o | 允许创建的用户的 UID 相同。例如,执行 "useradd -u 0 -o usertest" 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0; |
-m | 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的; |
-r | 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。 |
系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户。例如:
useradd lamp
useradd命令的背后底层逻辑
1. 在 /etc/passwd 文件中创建一行与 lamp 用户相关的数据:
[root@localhost ~]# grep "lamp" /etc/passwd
lamp:x:500:500::/home/lamp:/bin/bash
用户的 UID 是从 500 开始计算的,CentOS则是1000。同时默认指定了用户的家目录为 /home/lamp/,用户的登录 Shell 为 /bin/bash
2. 在 /etc/shadow 文件中新增了一行与 lamp 用户密码相关的数据
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!!:15710:0:99999:7:::
这个用户还没有设置密码,所以密码字段是 "!!",代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等
3. 在 /etc/group 文件中创建一行与用户名一模一样的群组
[root@localhost ~]# grep "lamp" /etc/group
lamp:x:500:
该群组会作为新建用户的初始组
4. 在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息
[root@localhost ~]# grep "lamp" /etc/gshadow
lamp:!::
没有设定组密码,所以这里没有密码,也没有组管理员
5. 默认创建用户的主目录和邮箱
[root@localhost ~]#ll -d /home/lamp/
drwx------ 3 lamp lamp 4096 1月6 00:19 /home/lamp/
[root@localhost ~]#ll /var/spod/mail/lamp
-rw-rw---- 1 lamp mail 0 1月6 00:19 /var/spool/mail/lamp
useradd 命令在添加用户时参考的默认值文件 /etc/default/useradd 和 /etc/login.defs
使用 Vim 命令查看 vim /etc/default/useradd 或 useradd -D 命令查看
\# useradd defaults file
GR0UP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
参数 | 含义 |
---|---|
GR0UP=100 | 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 lamp1 用户的主目录就为 /home/lamp1/。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。例如,lamp1 的邮箱位于 /var/spool/mail/lamp1。 |
修改各选项值有2种方式:一种是通过 Vim 文本编辑器手动修改,另一种就是使用文章开头介绍的 useradd 命令(useradd -D [选项] 参数);
选项+参数 | 含义 |
---|---|
-b HOME | 设置所创建的主目录所在的默认目录,只需用目录名替换 HOME 即可,例如 useradd -D -b /gargae。 |
-e EXPIRE | 设置密码失效时间,EXPIRE 参数应使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。 |
-f INACTIVE | 设置密码过期的宽限天数,例如 useradd -D -f 7。 |
-g GROUP | 设置新用户所在的初始组,例如 useradd -D -g bear。 |
-s SHELL | 设置新用户的默认 shell,SHELL 必须是完整路径,例如 useradd -D -s /usr/bin/csh。 |
例如,要修改新用户的默认 Shell 为 /bin/csh:
useradd -D -s /bin/csh
useradd 命令创建用户的过程是这样的,系统首先读取 /etc/login.defs 和 /etc/default/useradd,根据这两个配置文件中定义的规则添加用户,也就是向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 文件中添加用户数据,接着系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主目录,最后复制 /etc/skel 目录中的所有文件到此主目录中
passwd 用户名
当不再需要该访问权限时,需要将其删除。 在Linux上,应遵循一系列步骤,才能正确,有条理地从计算机中删除用户,其文件和帐户。完整流程如下:
1. 审查用户流程
2. 锁定账户
在终止进程之前,我们将锁定帐户,因为在终止进程时,它将注销用户。 如果我们已经更改了他的密码,他将无法重新登录
要锁定帐户,我们使用passwd
命令。 我们将使用-l
(锁定)选项
sudo passwd -l 用户名
通过sudo awk -F: '/用户名/ {print $1,$2}' /etc/shadow 命令可以查看该用户的用户名及加密密码,当加密密码前有个!时说明该账户已被锁定
3. 杀死进程
pkill
命令将查找并杀死进程
sudo pkill -KILL -u 用户名
此命令 杀死掉该用户的所有进程
4. 归档用户的主目录
毫无疑问,在这种情况下,将来将需要访问用户的文件。 要么作为调查的一部分,要么仅仅是因为替换他们可能需要参考其前任的工作。 我们将使用tar
命令来归档用户的主目录。
sudo tar -zcvf xxx.tar.gz /home/用户名
例如: sudo tar -zcvf wzx-20221229.tar.gz /home/wzx 将当前用户的文件打包
可通过ls -lh wzx-20221229.tar.gz 查看打包文件详细信息
5. 删除cron作业
最好检查是否为用户帐户安排了任何cron
作业。 cron
作业是在指定的时间或间隔触发的命令。 我们可以使用ls
检查是否为此用户帐户安排了任何cron
作业
sudo ls -lh /var/spool/cron/crontabs/用户名
如果此位置中有任何内容,则意味着该用户帐户有排队的cron
作业。 我们可以使用此crontab
命令将其删除。 -r
(删除), -u
(指定用户)
sudo crontab -r -u 用户名
6. 删除打印作业
lprm -U 用户名
7. 删除用户及用户的文件
考虑到Debian发行版的缘故,对应的命令也有所不同,deluser 或 userdel
二选一,看对应的发行版,一般为userdel
su - 用户名
su是switch user的缩写,表示用户切换;没有用户名则默认切换root用户
两种方式
1. groupadd 命令创建用户组
groupadd –g 888 users 创建一个用户组users,其GID为888
2. gpasswd 命令为组添加成员
只有root和组管理员能够改变组的成员
3. groupmod 命令修改组
groupmod –n user users
修改组名user为users
4. groupdel 删除组
groupdel users
删除组users
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root police 1213 Feb 2 09:39 abc.txt
1) 第0位确定文件类型(说明: -:普通文件, d:目录,l : 连接文件, c: 字符设备文件[键盘,鼠标] b: 块设备文件[硬盘] ) 。
2) 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 R: 读 , w : 写权限 x: 执行权限 (-表示没有)。
3) 第4-6位确定所属组(同用户组的)拥有该文件的权限 。
4) 第7-9位确定其他用户拥有该文件的权限 。
5) 1: 如果是文件,表示硬链接的数目; 如果是目录,则表示有多少个子目录 ,子目录数(有两个隐藏目录 .(代表当前目录) ..(代码上级目录)。
8) root : 文件或者目录所有者。
8) police : 文件或者目录所在的组。
8) 1213 : 表示文件大小,如果是目录,则统一为 4096 。
9) Feb 2 09:39 文件最后修改的时间。
第一种方式:+、-、= 变更权限
u:所有者(user) g:所有组(group) o:其他人(other) a:所有人(u、g、o的总和)(all)
1) chmod u=rwx,g=rx,o=x 文件、目录 【表示:给所有者rwx, 给所在组的用户 rx, 给其他人 x】
2) chmod o+w 文件、目录 【表示:给其它用户增加w 的权限】
3) chmod a-x 文件、目录 【表示:给所有用户 去掉 x权限】
1. 给abc文件 的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。chmod u=rwx, g=rx ,o=rx abc (,之间不能有空格)
2. 给abc文件的所有者除去执行的权限,增加组写的权限 chmod u-x, g+w abc
第二种方式:通过数字变更权限
r=4 w=2 x=1
rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件、目录
相当于 chmod 751 文件、目录 ( 7(rwx)5(rx)1(x) )
要求:将 /home/abc.txt 文件的权限修改成 rwxr-xr-x。
1. 将abc文件的所有者修改成 tom : chown tom abc
2. 请将 /home/kkk 目录下所有的文件和目录的所有者都修改成tom chown –R tom /home/kkk
3. 将/home/test下的所有文件和目录的所有者都改成 tom,将所在组改成police chown –R tom:police /home/test
请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 police chgrp -R police /home/kkk
top命令用于动态的监控进程活动与负载的相关信息
第一行:分别是:系统时间,运行时间,登录终端数,系统负载(其中的三个数值分别是1分钟,5分钟,15分钟,的平均值,数值越小意味着负载越低,).
第二行:进程总数,,运行中的进程数,睡眠中的进程数,停止的进程数,僵死的进程数.
第三行: 用户占用资源的百分比,系统内核占用资源百分比,改变优先级的进程资源百分比,空闲资源百分比,
第四行: 物理内存总量,内存使用量,内存空闲量,作为内核缓存的内存量.
第五行: 虚拟内存总量,虚拟内存使用量,虚拟内存空闲量,已被提前加载的内存量.
crontab是一个命令,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
通过crontab我们可以在固定的时间执行指定的系统指令或script脚本。时间间隔的单位是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)。
任务分类
1、crontab [-u user] file:-u用来指定某个用户的crontab服务,一般是像root这种高权限用户使用。file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
2、crontab [-u user] -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件内容。
3、crontab [-u user] -l:显示某个用户的crontab文件内容。如果不指定用户,则表示显示当前用户的crontab文件内容。
4、crontab [-u user] -[i]r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。-i参数指定在删除用户的crontab文件时是否给确认提示。
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
1、minute: 表示分钟,可以是从0到59之间的任何整数;
2、hour:表示小时,可以是从0到23之间的任何整数;
3、day:表示日期,可以是从1到31之间的任何整数;
4、month:表示月份,可以是从1到12之间的任何整数;
5、week:表示星期几,可以是从0到6之间的任何整数,这里的0代表星期日;
6、command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
前五个时间设定段,可以含如下特殊字符:
1、星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作;
2、逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”;
3、中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”;
4、正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
1、/sbin/service crond start 启动服务
2、/sbin/service crond stop 关闭服务
3、/sbin/service crond restart 重启服务
4、/sbin/service crond reload 重新载入配置
5、/sbin/service crond status 服务是否运行
如果需要在秒级设置定时任务,使用sleep延时:如果每10秒执行一次,每分钟60秒,可以看成:6个同时执行的crontab任务,第一个任务0秒执行,第二个任务延时10秒执行,第三个任务延时20秒执行,以此类推,得到:
grep sed awk
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 grep全称是Global Regular Expression Print,表示全局正则表达式显示。 它的使用权限是所有用户
grep [选项] ”关键词“ [文件]
选项
例子:
sed全称是:stream editor 流编辑器 (用于过滤和转换文本的流编辑器)
对文件的操作无非就是”增删改查“,sed命令就是实现对文件的”增删改查“。
sed 不会直接修改源文件数据
sed 采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据。
sed 是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构
工作原理:
sed [选项] '[脚本]' [-f 文件]
选项 | 含义 |
-n | 取消默认的输出 |
-e | 如果需要用sed对文本内容进行多种操作,则需要执行多条子命令来进行操作 |
-f | 指定脚本的文件名 |
-r | 脚本可使用正则表达式的方式 |
-i | 直接修改读取的文件内容,而不是输出到终端 |
脚本 | 含义 |
a | 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) |
c | 取代整行内容, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行 |
d | 删除 |
i | 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) |
p | 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~只输出被替换命令修改过的行 |
s | 取代匹配内容,可以直接进行取代的工作. s 的动作可以搭配正规表示法 |
示例及说明
创建一个test.txt 文件,文件内容如下
hello world,hello hani.
hello world,hello hani.
hani is a good man,hani is handsome.
this is the test script of sed test.
linux sed
123456789
/aaa/bbb/ccc
sed 's/pattern/replacement/flags' 文件名
flags 标记 功能
1. sed 编辑器只替换每行中第 2 次出现的匹配模式 sed 's/hello/HELLO/2' test.txt 替换每一行中第二次出现的hello=>HELLO
2. sed编辑器替换所有匹配的字符串 sed 's/hani/HANI/g' test.txt 将所有的hani替换成HANI
3. sed -n ‘s/hani/HANI/p’ test [-n p 只输出修改的行] -n 选项会禁止 sed 输出,但 p 标记会输出修改过的行
sed '[#]d' 文件名
1. sed 'd' test.txt 删除文件中所有内容
2. sed '3d' test.txt 删除指定行(第3行)内容
3. sed '1,4d' test.txt 删除指定区间(1~4)内容
sed '[#]a或i 插入的内容' 文件名
1. sed '3i you are beautiful' test.txt 在第3行前插入you are beautiful 内容
2. sed '3a you are more beautiful' test.txt 在第3行后插入you are more beautiful 内容
1. sed '3c you are beautiful' test.txt 将第3行内容替换成you are beautiful
2. sed '1,2c hi' test.txt 将1~2行内容替换成hi
一条sed命令,删除test/txt第2行到末尾的数据,并把hani替换为HANI
sed -e '2,$d' -e 's/hani/HANI/g' test.txt
sed -i '6d' test.txt 真实删除test.txt文件中第6行的内容
sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!