Linux 常用命令 运维 一把梭
- cd 切换目录
- pwd 查看当前所在目录
- ls 查看当前文件列表
/bin #常用系统命令 /sbin #系统管理命令 /boot #启动分区 /sys #内核参数调整
/dev #设备文件 /lib #32位库文件 /lib64 #64文库文件 /media /run /mnt #临时设备的挂载点
/opt #第三方软件安装位置 /proc #系统信息 /etc #系统配置目录 /home #普通用户家目录
/root #超级用户家目录 /var,/srv #系统数据
编辑Linux命令行的辅助操作
- Ctrl+u组合键:清空至行首
- Ctrl+K组合键:清空至行尾
- Ctrl+L组合键:清屏,或者clear
- Ctrl+C组合键:取消本次命令编辑
- Ctrl+a组合键:切换到行首
- Ctrl+e组合键:切换到行尾
创建文件/文件夹
创建文件夹
mkdir [-mp] 目录名
- -m 选项用于手动配置所创建目录的权限,而不再使用默认权限。
- -p 选项递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo。
创建文件
touch 文件名
创建文件的四种方式:
vi filename
echo " ">filename.txt (若文件存在,则会替换)
cat >filename.txt (若文件存在,则会替换)
touch filename.txt (若文件存在,则会更新时间)
删除文件/文件夹
rm [-fidr] 文件或目录 / rmdir 文件夹
- -f:强制删除
- -i:交互模式,在删除前询问用户是否操作
- -r:递归删除,常用在目录的删除
- -d 删除文件夹
复制文件/文件夹
cp [-adfilprsu] 源文件(source) 目标文件(destination)
- -a:是指archive的意思,也说是指复制所有的目录
- -d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身
- -f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制
- -i:若目标文件(destination)已存在,在覆盖时会先询问是否真的操作
- -l:建立硬连接(hard link)的连接文件,而非复制文件本身
- -p:与文件的属性一起复制,而非使用默认属性
- -r:递归复制,用于目录的复制操作
- -s:复制成符号连接文件(symbolic link),即“快捷方式”文件
- -u:若目标文件比源文件旧,更新目标文件
移动文件/文件夹
mv [-finvu] 源文件 目标文件
- -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
- -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
- -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
- -v:显示文件或目录的移动过程;
- -u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;
管道
管道:将第一个命令输出的内容通过管道符交给第二个命令去处理。依次类推。
管道符是 “|”
常用来作为接收数据管道命令:grep sed awk cut head top less more wc join sort split
将一个目录内容保存在一个文件里面(ls.txt) : ls | cat>ls.txt
vim 文本编辑器
使用 vim 文件名 即可打开相应文件
- 按 i / Insert 键可进行对文件的操作(进行输入模式)
- 按 esc 可退出对文件的操作(退出输入模式 跳到命令模式)
- 0 / Home 键 移动光标到行首
- $ / End 键 移动光标到行尾
- Ctrl+f / PgDn 键 向下翻一屏
- Ctrl+b / PgUp 键 向上翻一屏
:w - 保存文件,不退出 vim
:w file -将修改另外保存到 file 中,不退出 vim
:w! -强制保存,不退出 vim
:wq -保存文件,退出 vim
:wq! -强制保存文件,退出 vim
:q -不保存文件,退出 vim
:q! -不保存文件,强制退出 vim
:e! -放弃所有修改,从上次保存文件开始再编辑
- 查找关键词 /关键词 回车即可 ; n键向下查找,N键向上查找
- [n]G 光标移到第n行,未指定n时移到末行
- u 撤销上一个命令所做的修改
字符串替换: :%s/const/var (将当前的文件中所有的const替换成var)
- s命令的一般格式是::[n1,n2]s/p1/p2/[g][c]
- n1, n2 表示目标行的行号范围,可以用“%”代表所有行;未指定范围时,目标行就是光标所在的当前行
- p1 是用做搜索的字符串模式,p2是用做替换的字符串模式
- s命令可以带g和c选项:g表示替换目标行中所有匹配的字符串,没有g的话则只替换目标行中第一个 匹配的字符串;选项c表示替换前要求用户确认
实用小技巧
把一个文件的内容导入到当前文件中 :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 命令查找文件
- -amin n : 在过去 n 分钟内被读取过
- -anewer file : 比文件 file 更晚被读取过的文件
- -atime n : 在过去 n 天内被读取过的文件
- -cmin n : 在过去 n 分钟内被修改过
- -cnewer file :比文件 file 更新的文件
- -ctime n : 在过去 n 天内创建的文件
- -mtime n : 在过去 n 天内修改过的文件
- -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
- -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
- -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
- 查找当前目录及其子目录下所有文件后缀为 .c 的文件: find . -name "*.c"
- 查找当前目录下大于2K的文件,+ 表示大于,- 表示小于 find ./ -size +2K
创建软连接(快捷方式)
ln -s 程序的源路径 需要创建快捷方式的路径 创建软连接
ln -s /root/node/bin/node /usr/local/bin
如果去除 -s 执行会创建一个硬链接,类似于复制。
软连接的源文件如果被删除,则软连接无法使用。
压缩与解压缩
tar 打包
tar本身是一个打包工具,可以把目录打包成一个文件,它把所有文件整合成一个大文件,方便复制或移动
tar不仅可以打包目录,也可以打包文件,其中不管打包还是解包,原文件是不会删除的,会覆盖当前已存在的目录
基本语法:tar [ 选项 ] XXX.tar.gz 将要打包进去的内容
选项 | 功能 |
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
-C | 解压到指定目录 |
- 压缩多个文件: tar -zcvf node.tar.gz a.txt b.txt (将a.txt和b.txt压缩到node.tar.gz中)
- 压缩目录: tar -zcvf node.tar.gz /home (将home目录压缩到node.tar.gz中)
- 解压到当前目录: tar -zxvf node.tar.gz (解压node.tar.gz到当前目录)
- 解压到指定目录 : tar -zxvf node.tar.gz -C /root (解压node.tar.gz到/root目录)
gzip和gunzip压缩
对文件进行压缩和解压缩的命令,压缩生成.gz文件,不保留原来的文件
压缩文件 : gzip 文件名
解压文件 : gunzip 压缩文件名 或 gzip -d 压缩文件名
zip 和 unzip 压缩
压缩命令: zip [选项] xxx.zip 将要压缩的内容
解压命令: unzip [选项] xxx.zip
- 压缩多个文件: zip node.zip a.txt b.txt (将a.txt和b.txt压缩到node.zip中)
- 压缩目录: zip -r node.zip /home (将home目录压缩到node.zip中)
- 解压到当前目录: unzip node.zip (解压node.tar.gz到当前目录)
- 解压到指定目录 : unzip node.zip -d /root (解压node.tar.gz到/root目录)
Xshell 相关
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应用程序的软件包中可以包含两种不同的内容
- 一种就是可执行文件,也就是解开包后就可以直接运行的。在Windows中所 有的软件包都是这种类型。安装完这个程序后,你就可以使用,但你看不到源程序。而且下载时要注意这个软件是否是你所使用的平台,否则将无法正常安装。
- 另一种则是源程序,也就解开包后,你还需要使用编译器将其编译成为可执行文件。这在Windows系统中是几乎没有的,因为Windows的思想是不开放源程序的。
- 通常,用tar打包的,都是源程序;而用rpm、dpkg打包的则常是可执行程序。
搞定使用tar打包的应用软件
- 如果是常用的.tar.gz压缩包则使用 tar -zxvf 软件包名 命令对其解压与解包;如果不是,则先用解压软件,再执行“tar –xvf 解压后的tar包”进行解包
- 阅读附带的INSTALL文件、README文件
- 执行“./configure”命令为编译做好准备
- 执行“make”命令进行软件编译
- 执行“make install”完成安装
- 执行“make clean”删除安装时产生的临时文件
- 一般来说, Linux的应用软件的可执行文件会存放在/usr/local/bin目录下,最可靠的还是看这个软件的 INSTALL和README文件,一般都会有说明。
- 指定安装目录,即在./configure命令后面加参数--prefix=/**,如:./configure --prefix=/usr/local/aaaa,即把软件装在/usr/local/路径的aaaa这个目录里。一般的软件的默认安装目录在/usr/local或者/opt里
搞定使用rpm打包的应用软件
- 安装: rpm –ivh rpm软件包名
- 卸载: rpm –e 软件名
- 例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行: rpm –ivh software-1.2.3-1.i386.rpm;而当卸载时,则应执行:rpm –e software
搞定使用deb打包的应用
- 安装:dpkg –i deb软件包名
- 卸载:dpkg –e 软件名
用户权限
非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/passwdlamp: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/shadowlamp:!!:15710:0:99999:7:::
这个用户还没有设置密码,所以密码字段是 "!!",代表这个用户没有合理密码,不能正常登录。同时会按照默认值设定时间字段,例如密码有效期有 99999 天,距离密码过期 7 天系统会提示用户“密码即将过期”等
3. 在 /etc/group 文件中创建一行与用户名一模一样的群组
[root@localhost ~]# grep "lamp" /etc/grouplamp:x:500:
该群组会作为新建用户的初始组
4. 在 /etc/gshadow 文件中新增一行与新增群组相关的密码信息
[root@localhost ~]# grep "lamp" /etc/gshadowlamp:!::
没有设定组密码,所以这里没有密码,也没有组管理员
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 用户名
删除用户
- userdel testuser 删除用户testuser
- rm -rf testuser 删除用户testuser所在目录
当不再需要该访问权限时,需要将其删除。 在Linux上,应遵循一系列步骤,才能正确,有条理地从计算机中删除用户,其文件和帐户。完整流程如下:
1. 审查用户流程
- 通过ps -u 用户名 列出该用户正在运行的进程
- 通过top -U 用户名 可以更清晰的查看该用户正在运行的进程
- 在终止他的流程之前,我们将通过锁定密码来冻结帐户。
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
- sudo userdel --remove 用户名
- sudo deluser --remove-home 用户名
切换用户
su - 用户名
su是switch user的缩写,表示用户切换;没有用户名则默认切换root用户
显示用户uid和gid
两种方式
- id 用户名
- vim /etc/passwd
用户组
1. groupadd 命令创建用户组
groupadd –g 888 users 创建一个用户组users,其GID为888
2. gpasswd 命令为组添加成员
只有root和组管理员能够改变组的成员
- gpasswd –a user1 users 把user1用户添加到users组
- gpasswd -d user1 users 把user1用户在users组中移除
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 文件最后修改的时间。
修改文件权限 chmod
第一种方式:+、-、= 变更权限
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。
- + 、-、= 变更权限的方式实现: chmod u=rwx, g=xr, o=x /home/abc.txt
- 使用给数字的方式实现: chmod 751 /home/abc.txt
修改文件所有者 chown
- chown newowner file 改变文件的所有者
- chown newowner:newgroup file 改变用户的所有者和所有组
- -R 如果是目录 则使其下所有子文件或目录递归生效
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
修改文件所在组 chgrp
- chgrp newgroup file 改变文件的所有组
请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 police chgrp -R police /home/kkk
查看系统进程
PS 命令
- ps -ef | grep 进程名称 指定查看进程信息
- ps -aux 列出进程的信息和进程ID号,可以结合进程号,使用kill命令,将进程杀死
top 命令
top命令用于动态的监控进程活动与负载的相关信息
第一行:分别是:系统时间,运行时间,登录终端数,系统负载(其中的三个数值分别是1分钟,5分钟,15分钟,的平均值,数值越小意味着负载越低,).
第二行:进程总数,,运行中的进程数,睡眠中的进程数,停止的进程数,僵死的进程数.
第三行: 用户占用资源的百分比,系统内核占用资源百分比,改变优先级的进程资源百分比,空闲资源百分比,
第四行: 物理内存总量,内存使用量,内存空闲量,作为内核缓存的内存量.
第五行: 虚拟内存总量,虚拟内存使用量,虚拟内存空闲量,已被提前加载的内存量.
定时任务
crontab是一个命令,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
通过crontab我们可以在固定的时间执行指定的系统指令或script脚本。时间间隔的单位是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)。
任务分类
- 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件,内容如下:
前四行用来配置crond任务运行的环境变量,其中:第一行SHELL变量指定了系统要使用哪个shell,这里是bash;第二行PATH变量指定了系统执行命令的路径;第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户;第四行的HOME变量指定了在执行命令或者脚本时使用的主目录(可能没有该HOME)。
- 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录下,其文件名与用户名一致。如:root用户的定时任务配置文件为/var/spool/cron/root
用法
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字段,表示每十分钟执行一次。
crond服务操作命令
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秒执行,以此类推,得到:
Linux三大文本处理工具
grep sed awk
grep 命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 grep全称是Global Regular Expression Print,表示全局正则表达式显示。 它的使用权限是所有用户
grep [选项] ”关键词“ [文件]
选项
- -i :忽略大小写
- -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
- -n :显示行号
- -w :匹配整个单词
- -r :递归查找
- -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
- -o :只显示被模式匹配到的字符串。
- --color :将匹配到的内容以颜色高亮显示。
- -A n:显示匹配到的字符串所在的行及其后n行,after
- -B n:显示匹配到的字符串所在的行及其前n行,before
- -C n:显示匹配到的字符串所在的行及其前后各n行,context
例子:
- 在文件中查找指定内容(在/etc/passwd中查找内容root) grep "root" /etc/passwd
- 在多个文件中(/etc/passwd /etc/shadow /etc/gshadow)查找指定内容(root) grep root /etc/passwd /etc/shadow /etc/gshadow
- 使用-l参数列出包含指定内容(mysql)的文件的文件名(/etc/passwd /etc/shadow /etc/fstab /etc/mtab) grep -l mysql /etc/passwd /etc/shadow /etc/fstab /etc/mtab
- 在文件中查找指定内容并显示匹配的行号 grep -n root /etc/passwd /etc/shadow
- 使用$符号输出指定内容结尾的行 (/etc/passwd中查找所有以bash结尾的内容) grep bash$ /etc/passwd
sed命令
sed全称是:stream editor 流编辑器 (用于过滤和转换文本的流编辑器)
对文件的操作无非就是”增删改查“,sed命令就是实现对文件的”增删改查“。
sed 不会直接修改源文件数据
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 字符串替换
sed 's/pattern/replacement/flags' 文件名
flags 标记 功能
- n 1~512 之间的数字
表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 6 个 A,但用户只想替换第二个 A,这是就用到这个标记; - g 对数据中所有匹配到的内容进行替换
如果没有 g,则只会在第一次匹配成功时做替换操作。
sed ‘s/old/new/’ test 匹配每一行的第一个old替换为new
例如,一行数据中有 3 个 A,则只会替换第一个 A; - i 忽略大小写,g跟i可同时使用
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 删除命令
sed '[#]d' 文件名
1. sed 'd' test.txt 删除文件中所有内容
2. sed '3d' test.txt 删除指定行(第3行)内容
3. sed '1,4d' test.txt 删除指定区间(1~4)内容
sed a和i 添加、插入命令
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 内容
sed c 取代命令
1. sed '3c you are beautiful' test.txt 将第3行内容替换成you are beautiful
2. sed '1,2c hi' test.txt 将1~2行内容替换成hi
sed -e 多点编辑
一条sed命令,删除test/txt第2行到末尾的数据,并把hani替换为HANI
sed -e '2,$d' -e 's/hani/HANI/g' test.txt
sed -i 直接修改文件内容
sed -i '6d' test.txt 真实删除test.txt文件中第6行的内容
sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
Linux 常用命令 运维 一把梭相关推荐
- linux系统基本运维命令
linux系统基本运维命令 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 linux系统基本运维命令 查看操作系统版本信息 ...
- linux服务器运维操作命令,Windows和Linux系统服务器运维基本操作指令
原标题:Windows和Linux系统服务器运维基本操作指令 服务器总归是机械化设备,在运行过程中难免会出现一些问题,遇到这些问题怎么办?请运维人员代维修?即使请也会造成,运维人员维护不及时和成本太高 ...
- linux命令txt,Linux常用命令(非常详细!)
原标题:Linux常用命令(非常详细!) 文件命令: 1.pwd (print work directory) 译:查看路径 2.ls (list) 译:查看目录下的文件和文件夹 例:ls -l (以 ...
- 来不及解释!Linux常用命令大全,先收藏再说
摘要:Linux常用命令,很适合你的. 一提到操作系统,我们首先想到的就是windows和Linux.Windows以直观的可视化的方式操作,特别适合在桌面端PC上操作执行相应的软件.相比较Windo ...
- linux常用命令速查手册PDF下载
Linux常用命令速查手册 需要该PDF文档的朋友扫码关注下方二维码[入门小站],后台回复 「1001」 自取 点击下面标题即可获取对应资料 LeetCode刷题开源手册 LeetCode题解[jav ...
- linux常用命令速查手册
Linux常用命令速查手册 需要该PDF文档的朋友扫码关注下方二维码[入门小站],后台回复 「1001」 自取 点击下面标题即可获取对应资料 LeetCode刷题开源手册 LeetCode题解[jav ...
- Linux常用命令汇总 - 近乎全量命令!
一提到操作系统,我们首先想到的就是windows和Linux.Windows以直观的可视化的方式操作,特别适合在桌面端PC上操作执行相应的软件.相比较Windows来说,Linux的很多管控都需要用命 ...
- Linux 系统日常运维九大技能和运维网络知识总结
一.Linux 系统日常运维九大技能 1.安装部署 方式:U盘,光盘和网络安装 其中网络安装已经成为了目前批量部署的首选方式:主要工具有Cobbler和PXE+kickstart 可以参考如下链接内容 ...
- 超详细的Linux常用命令锦集,推荐收藏!!!【持续更新】
目录 Linux系统简介 Linux常用命令大全 一.系统操作相关命令 1.系统信息处理 2.系统重启及关机 二.文件操作相关命令 1.文件及目录操作 2.文件搜索操作 3.文件挂载系统 4.文件权限 ...
最新文章
- 【Timbre,Amplitude,Pitch】声音的基本属性
- 【转】人脸识别功能的用户体验设计优化
- 埃拉托斯特尼筛法(埃筛)
- Java字节码反编译工具
- Android官方开发文档Training系列课程中文版:键盘输入处理之控制输入法的显示方式
- Linux学习笔记002---Windows下安装CentOS7_带有UI桌面_图解
- 进程栈大小 与 线程栈大小-转
- 在线SQL美化格式化工具
- day11--Matplotlib--柱形图与盒图
- paip.html 及css调试工具---debugbar
- 研究支付业务中,银行、支付机构与银联、网联的关系逻辑
- 从酒店服务员到世界500强大数据工程师,月薪4K到年薪40W,我经历了什么?
- Eclipse PHPEclipse 配置
- f和摄氏度怎么换算_华氏度和摄氏度的换算
- 《数据结构与算法》(十八)- 平衡二叉树
- html视频播放后自动跳转到页面,在html5视频中跳转到currentTime后自动播放(autoplay after jump to currentTime in html5 video)...
- ubuntu加装固态硬盘设置
- Arty A7-100(XC7A100TCSG324)开箱照
- 海量数据去重之SimHash算法简介和应用
- 营销QQ年收入几十万自动来粉丝终极玩法