本篇博文总结常用的shell命令,比较基础,作为备忘待使用时查阅吧,有问题可及时在本博客或CSDN下留言。
shell基础
快捷键:
Ctrl+W
:删除光标位置前单词
Ctrl+U
:清空行
上下方向键:查看历史命令
Tab
:自动补全
Ctrl+R
:搜索先前使用的命令
Ctrl+C
:中止当前命令
Ctrl+D/logout/exit
: 退出登录shell
ESC+T
: 调换光标前的两个单词
cat /etc/shells
: 查看系统中所有可用的shell
echo $SHELL或ps -p $$
: 查看账号当前使用的Shell类型
shell脚本构成:
- shell关键字:例如if…else,for do…done
- shell命令:例如export,echo,exit,pwd,return
- linux命令:如date,rm,mkdir
- 文本处理功能:如awk,cut,sed,grep
- 函数:通过函数将一些常用的功能放在一起,例如/etc/init.d目录中的大部分或全部系统shell脚本所使用的函数都包含在文件/etc/init.d/functions中
- 控制流语句:例如if…then…else或执行重复操作的shell循环
创建一个shell脚本需要以下三步:写一个脚本,允许shell执行它,把它放到可以找到的地方
下面是一个脚本示例:
1 | #!/bin/bash |
第一行告诉shell使用什么程序解释脚本,本例中使用/bin/bash,其他脚本语言如Perl,awk,python等也同样使用这个机制
第二行是一个注释,#后面的任何内容都会被bash忽略
文件保存后,默认情况下linux是不允许执行的,需要通过chmod命令授予可执行权限chmod 755 文件名
之后就可以直接运行脚本了
用户登录时,登录shell调用的初始化文件和脚本的次序依次是:/etc/profile,/etc/profile.d目录下的脚本、$HOME/.bash_profile,$HOME/.bashrc和/etc/bashrc
shell中变量类型
shell中变量类型有系统变量和用户自定义变量两种:
env/printenv
:查看当前shell的所有系统变量和用户自定义变量
如何定义变量和给变量赋值
1 | varname=varvalue |
注意等号的周围不要有任何的空格,否则会报command not found的错误
可以将任意字符集合赋值给一个变量,比如给一个变量赋值一个字符串
1 | username=xiaowang 或者 username="xiaowang" |
给变量赋值一个数字值:
1 | var=1 |
使用变量通过$符号,
比如上面定义好了变量var,使用的时候,通过$var即可使用
默认情况下shell赋值是字符串赋值:比如下面示例,说明var变量被当做字符串了
1 | [root@iZ23kwr96m6Z ~]# var=1 |
在Bash中,如果要将算数表达式的数值赋给一个变量,可以使用let
命令,如下示例(注意下面的区别):
1 | [root@iZ23kwr96m6Z ~]# let age=1 |
将一个变量的值赋值给另一个变量:
1 | [root@iZ23kwr96m6Z ~]# a=3 |
将命令的执行结果赋值给变量(注意命令使用倾斜的单引号括起来):
1 | [root@iZ23kwr96m6Z ~]# pwd |
将bash的内置命令read
读入的值赋值给变量
1 | [root@iZ23kwr96m6Z ~]# echo -n "Enter var:";read var |
上例的意思是打印内容”Enter var”,不换行,之后再将用户输入的值赋值给变量var,所以我们通过echo $var
命令即得到变量var的值
变量命名规则
变量命名必须以字母,下划线_开头,后面跟字母,数字或者下划线字符,第一个字符不能为数字,中间不能使用?、*等特殊符号
变量名大小写敏感,不同大小写是不同的变量,如下例:
1 | [root@iZ23kwr96m6Z ~]# var=123 |
使用echo
和printf
打印变量的值
打印显示变量的值除了echo
命令外还有printf
命令,该命令语法格式如下:printf <FORMAT> <ARGUMENTS…>即根据指定格式打印参数,具体的允许格式如下:
分类符 | 描述 |
---|---|
%b | 打印相关参数并解释其中带有反斜杠\的特殊字符 |
%q | 以Shell引用的格式打印相关参数,使其可以在标准输入中重用 |
%d | 以带符号十进制数的格式打印相关参数 |
%i | 与%d相同 |
%o | 以无符号八进制数的格式打印相关参数 |
%u | 以无符号十进制数的格式打印相关参数 |
%x | 以无符号小写十六进制数的格式打印相关参数 |
%X | 与%x相同,只是十六进制数为大写 |
%f | 以浮点数的格式解析并打印相关参数 |
%e | 以双精度浮点数 |
%E | 与%e相同,只是用大写字母E |
%g | 以%f或%e的格式打印相关参数 |
%G | 以%f或%E的格式打印相关参数 |
%c | 以字符的格式打印相关参数,并且只打印参数中的第一个字符 |
%s | 以字符串的格式打印相关参数 |
%n | 指定打印的字符个数 |
%% | 打印一个字符”%” |
printf命令的格式用字符串<Format>中还可以使用一些转义字符,如下所示
转义符 | 描述 |
---|---|
\" | 打印双引号 |
\NNN | 用八进制的值表示一个ASCII字符,例如\101,即65,表示字符’A’ |
\\ | 打印一个反斜杠”\“ |
\a | 发出告警音 |
\b | 删除前一个字符 |
\f | 换页符,在某些实现中会清屏,有些会换行 |
\n | 换行 |
\r | 从行头开始,和换行不一样,仍在本行 |
\t | Tab键 |
\v | 竖直tab,和\f相似,不同机器显示有所不同,通常会引起换行 |
\xHH | 用十六进制的值表示一个ASCII字符,例如/x41,即65,表示字符’A’ |
下面是一些示例:
1 | [root@iZ23kwr96m6Z ~]# var=shell |
echo命令没有提供格式化的选项,但是支持转义符功能,在使用转义符时需要使用”-e”选项激活转义字符功能,如下
1 | [root@iZ23kwr96m6Z ~]# echo -e "SHELL: $SHELL\n User:$USER\t" |
有时需要通过${}来避免一些歧义,如下:
1 | [root@iZ23kwr96m6Z ~]# echo "the shell path is $SHELL haha" |
变量的引用
引用变量时,最好将变量用双引号””括起来,比如”$var”以免变量中的特殊字符(除$、和\)被错误解释。使用双引号可以防止变量中由多个单词组成的字符串分离,一个用双引号括起来的变量使它自身变成一个单词,即使它包含空格,请看如下例子:
1 | #将变量LIST的值分成了三个参数传递给了for循环 |
只有变量的值中包含空格或要保留其中的空格时,将变量用双引号括起来才是必要的
1 | #$(echo '"')相当于'echo '"'' |
单引号的操作类似于双引号,只是它不允许引用变量,因为在单引号中字符”$”的特殊含义会失效
export语句的使用
用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,脚本shell将终止,返回到执行该脚本之前的shell。
从这种意义上来说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export
命令对已定义的变量进行输出。
export
命令将使系统在创建每一个新的shell时,定义这个变量的一个拷贝。这个过程称之为变量输出。
export
功能说明:设置或显示环境变量。
语 法:export -fnp 变量名称=变量设置值
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。
参 数:
-f 代表变量名称或者函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
所以得出的结论是:
1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;
2、一个shell中的系统环境变量会被复制到子shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。
4、不用export定义的变量只对该shell有效,对子shell也是无效的。
例如linux上配置java_home之后需要在/etc/profilewen文件尾部添加如下配置:
1 | export JAVA_HOME=/usr/local/software/java/jdk1.8.0_231 |
如何删除变量
unset
命令用来删除相应的变量或者函数,该命令会把变量从当前shell和后续命令的环境中删除,语法如下:unset -fv 变量或函数名称
-f 表示删除一个已定义的函数;-v 删除一个变量,使用 示例如下:
1 | export JAVA_HOME= /usr/local/jdk |
使用unset命令不能删除一个只读的变量,会报错,如下:
1 | [root@iZ23kwr96m6Z ~]# readonly var=234 |
如何检查变量是否存在
使用如下的语法来检查变量是否存在:
1 | ${varName?Error:The variable is not defined} |
上述第一句中,如果变量varName已定义且不为空,则该语句相当于$varName;如果变量置为空,则该语句也为空;如果变量未定义,则此语句返回一个错误,显示?和后面的错误信息”Error:The variable is not defined”
第二句和第一句的唯一区别是,如果varName的值是空的,此语句也将返回一个错误
这两句可以用来检查脚本的完整性,如果变量未定义,脚本将会停止执行,如下例子
1 | [root@iZ23kwr96m6Z ~]# age=123 |
shell环境进阶
标准命令为什么在shell的任何路径都能执行?这是因为shell在path环境变量指定的全部路径中搜索任何可执行文件,一旦找到与输入项匹配的命令就执行,下面进行进一步了解。
回调命令历史
曾经执行过的命令,会被保存在缓冲区或者默认文件~/.bash_history中,保存命令的多少由环境变量HISTSIZE
定义。
- 可以使用
history
命令显示你之前执行过的命令 - 可以在命令行提示符下使用上下方向键查找之前执行的命令
- 可以在命令行提示符下按ctrl+r组合键后输入相应的关键字,可以搜索历史命令
- 可以简单的输入!!来重复执行上一条执行过的命令
- !关键字 可以查找最近一次执行的以关键字开头的命令
- 可以使用history列出历史命令之后,使用对应的行号执行命令,如下:
1 | [root@iZ23kwr96m6Z ~]# history |
shell中的扩展
shell中扩展方式有八种(按照扩展的先后顺序排序):大括号扩展、波浪号扩展、参数和变量扩展、命令替换、算数扩展、进程替换、单词拆分和文件名扩展,下面介绍几种扩展:
大括号扩展
看如下例子:
1 | [root@iZ23kwr96m6Z ~]# echo a{b,c,d}e |
此外bash还提供了一些按照固定步长扩展的功能,格式为{start,end,incre}
1 | [root@iZ23kwr96m6Z ~]# echo {1..9..4} |
大括号扩展在其他所有扩展之前进行,在其他扩展中的特殊字符都被保留下来。为了避免被认为是大括号拓展的一部分,”{“或者”,”可以用反斜杠转义,为了避免与参数扩展冲突,大括号扩展不会识别字符串中的”${“
波浪号扩展
波浪号前缀”~+”,会被SHELL变量PWD的值替代;”~-“会被LODPWD替代
1 | [root@iZ23kwr96m6Z ~]# echo ~+ |
命令替换
命令替换是指用命令的输出替换命令本身,命令替换有两种形式:$(COMMAND)
或者`COMMAND`
1 | [root@iZ23kwr96m6Z ~]# echo $(pwd) |
命令替换可以嵌套,使用反引号形式”``”嵌套时,里面的反引号需要用反斜杠\转义
文件名扩展
如果bash中没有设置-f选项,就会支持文件名拓展。bash支持一下三种通配符来实现文件名拓展:
- * 匹配任何字符串也包括空字符串
- ?匹配任意单个字符
- […]匹配方括号内的任意字符
1 | [root@iZ23kwr96m6Z usr]# ls |
创建和使用别名
在文件~/.bashrc
中可以为一些命令语句创建别名,一旦修改了这个文件必须重新登录shell才会生效
创建别名通过内置命令alias
,语法如下:alias name=’command’
- name—用户定义的别名 command—任意linux命令
如下例子:
1 | alias rm='rm -i' |
通过命令alias
可以查看所有的别名
1 | [root@iZ23kwr96m6Z ~]# alias |
查看某个特定别名语法为:alias 别名
,当想调用实际命令而暂停使用别名是,需要使用如下方法:\aliasname
,删除一个别名的语法为:unalias 别名
,删除当前环境中所有别名 unalias -a
注意别名请谨慎使用
修改bash提示符
登录shell后,bash前面的提示符[root@iZ23kwr96m6Z ~]#
是可以定制修改的,通过export 变量PS1即可,非重点内容此处不详述了。
常用shell(bash)命令
查看文件和目录
ls/ll
ls
列出当前目录下所有文件和目录,不带详细信息(文件类型,大小,修改日期和时间,权限等)
ls -l
每行显示一条记录,包括文件类型,大小,修改日期和时间,权限等
ls -lh
文件大小显示为更符合人类阅读习惯的格式
ls -a
列出包含隐藏文件或目录,包括”.”(当前目录)和”..”(父目录)
ls -A
列出不包括”.”(当前目录)和”..”(父目录)的所有文件和目录
ls -i
显示文件或目录的inode编号
ll
命令同ls -l
cd
1 | cd切换目录 |
pwd
pwd:显示当前的目录
cat
cat
命令,cat可以查看文件,语法为cat 文件名
,此外利用cat命令可以将两个文件合成一个文件输出:
1 | [root@iZ23kwr96m6Z usr]# ll |
less/more
less、more
命令示例:分屏显示文件
more
命令一次查看一整屏内容,查看文件语法为more 文件
,使用空格可以向下翻页more -num 文件
可以控制一次显示num行;
less
命令向前或者向后翻页都支持,less命令不需要在查看前加载整个文件,查看文件更快速,查看文件语法为less 文件名
当使用less命令打开文件后,可以使用搜索功能,搜索指定关键字,搜索到会高亮关键字:
/关键字
回车后,自动跳转到关键字第一次出现的地方,并且高亮所有关键字n,向前跳转到上一个匹配关键字的地方
N,向后跳转到下一个匹配关键字的地方
?关键字
回车后,向后搜索关键字n,向后跳转到上一个匹配关键字的地方
N,向前跳转到下一个匹配关键字的地方
使用less命令浏览较大文件时,可以使用如下屏幕导航命令:
Ctrl+F
—向前翻一个窗口的内容
Ctrl+B
—向后翻一个窗口的内容
Ctrl+D
—向前翻半个窗口的内容
Ctrl+U
—向后翻半个窗口的内容
g—跳转到文件的开头;G—跳转到文件的末尾;q或ZZ—退出less
less命令还可以打开多个文件,在多个文件中切换,以及标记某个位置以便后续返回,这里不详述
head/tail
head
命令用于打印前几行,默认打印前10行,可以通过-n指定打印多少行,语法为head -n 5 文件
也可以不使用-n选项,直接head -5 文件名
1 | #打印出除最后五行外所有内容 |
tail
命令用于显示后几行:
1 | #打印文件的后N行 |
####file
file
命令用于查看文件类型,语法file 文件
1 | #使用-i,可以以MIME类型的格式显示文件类型的信息 |
wc
wc
命令用于查看文件的行数、单词数和字符数等信息
1 | wc 文件 |
此外,使用-l选项,可以值统计文件的行数,-w统计单词数,-c统计字节数,-L统计文件中最长的行的长度
find
find
命令用于查找文件或者目录
1 | find 路径 -name 文件名 |
touch
touch
命令可用于创建文件,语法为touch 文件名
,可以同时创建多个文件touch 文件1 文件2 文件3
,touch命令有如下选项:
- -a:只改变访问时间 -c:不创建任何文件 -m:只改变修改时间 -r:使用指定文件的时间替代当前时间
mkdir
mkdir
:创建新的目录,语法为mkdir 目录名
,使用-p可以递归创建目录(父目录不存在自动创建)mkdir /a/b/c
,使用-m选项,可以设置创建的目录的权限
1 | mkdir -p -m 777 /a/b |
rmdir
1 | rmdir #删除一个空的目录 |
cp
cp
复制文件或目录,语法为cp /路径a/文件a /路径b/文件名
,使用-p选项,可以保留源文件的所有者,用户组,权限,修改和访问时间等信息,使用-R或者-r可以递归复制一个目录
scp
对于通过ssh连接的服务器,复制文件命令,比如登录跳板机将jar包赋值给其他服务器
1 | scp ./*****.jar root@ip:/usr/works/target_***/ |
mv
mv
命令用于将文件和目录从一个位置移到另一个位置,还可以用于修改文件或目录的名字,语法为mv source target
1 | #将当前目录下的文件source.txt移动到/tmp下 |
默认情况下,如果目标文件已经存在,mv命令不会提示,会直接覆盖目标文件,使用-i可以让mv命令重写或覆盖目标文件之前给出提示
使用mv可以同时移动多个文件或目录
1 | #将当前目录下的所有文件移动到目录/tmp下 |
如果只想将源目录中有而目标目录中没有的文件,可以使用-u选项
1 | #将dir1中有而dir2中没有的文件移动到dir2 |
ln
ln
建立软连接或硬连接的命令
rm
rm
删除文件或目录
1 | #同时删除多个文件 |
?号用于匹配一个字符
1 | #删除当前目录下整个文件名(包含扩展名)只有三个字符的所有文件 |
[]用于匹配包含括号内任意一个字符
1 | #删除当前目录下文件名中含有字母a,b,或c的文件 |
管理文件或目录权限
当我们使用ls -l或ll命令时,如下:
1 | [root@iZ23kwr96m6Z ~]# ls -l |
上面输出的第一列的第一个字符表示文件类型(d目录-文件l链接)2-10九个字符(如第一行rw-r–r–)表示三种用户类型的权限,具体如下:

从左至右用1-10这些数字来表示:
1 | 1、确定文件类型 |
1 | 2、确定属主(该文件的所有者)拥有该文件的权限 |
1 | 3、确定属组(所有者的同组用户)拥有该文件的权限 |
1 | 其中,第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限; |
1 | 5、链接数 |
chmod
chmod
命令用于修改权限,语法可以采用符号表达式,也可以用八进制位模式
使用符号表达式格式如下:
chmod [option]…[ugoa][[+-=][rwxug]][,…] FILE…
其中字母ugoa用于控制那些用户对文件的访问权限将被改变
- u:指文件或目录的所有者
- g:指文件或目录的用户组的成员
- o:指不在文件或目录的用户组中的其他用户
- a:指所有用户,即(ugo)
当使用符号表达式,不给出ugoa组合时,相当于使用a
操作符”+-=表示权限的授予或撤销”
- +:选定的权限将被添加
- -:选定的权限将被移除
- =:文件只拥有选定的权限
1 | #移除用户组成员的写权限 |
chmod命令的数字模式是用数字来表示读(4),写(2)和执行(1)的权限,每个用户权限组的值就是这三者组合相加得到的八进制数(0-7),如下:
- 4:r(读权限)
- 2:w(写权限)
- 1:x(执行权限)
- 表示rwx权限就是4+2+1=7,rw-权限就是4+2+0=6,r–权限就是4+0+0=4,r-x权限就是4+0+1=5
1 | #赋予所有人对文件读、写和执行的权限 |
vi/vim
vi&vim
:
vi: 创建文件或编辑文件
vi a.txt 创建文件a.txt并进入文档,按下a或者i或者o进入编辑模式,内容写完之后,按下esc键,然后输入命令:
:wq 保存并退出
注意必须要使用:
在Linux下一般使用vi编辑器来编辑文件。vi既可以查看文件也可以编辑文件。
三种模式:命令行、插入、底行模式。切换到命令行模式:按Esc键;
切换到插入模式:按 i 、o、a键;
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
chown/chgrp
chown/chgrp
修改文件所有者和用户组
其他shell命令
grep
1 | grep:查找符合条件的字符串。用法: grep [选项]... PATTERN [FILE].. |
tar
tar
tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩
一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件
格式:tar [参数] 文件
常用参数:
-c:创建一个新tar文件
-v:显示运行过程的信息
-f:指定文件名
-z:调用gzip压缩命令进行压缩
-t:查看压缩文件的内容
-x:解开tar文件
命令:
tar -cvf test1.tar ./* 将当前目录下的所有文件打包为test1.tar
tar -cvf test2.tar b.txt 将指定文件打包到test2.tar
tar -zcvf test3.tar.gz ./* 将当前目录下的所有文件打包并且压缩到test3.tar.gz
tar -xvf test1.tar 解压到当前目录
tar -xvf test3.tar.gz -C aaa 将文件解压到 aaa目录
df
df
用于显示文件系统的可用磁盘空间的数量
df列出文件系统的整体磁盘使用量
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
格式:df [参数] [目录或文件名]
常用参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
命令:
df -h 将容量结果以易读的容量格式显示出来
df -aT 将系统内的所有特殊文件格式及名称都列出来
du
du
:评估文件空间利用率
1 | du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看 |
fdisk
1 | fdisk 是 Linux 的磁盘分区表操作工具 |
ps
ps
1 | ps 显示进程 |
kill
1 | kill 杀掉某个进程,后面跟着进程的id |
管道
1 | 将一个命令的输出结果作为另外一个命令的输入 |
防火墙
1 | service iptables status 查看防火墙状态 |
关机
1 | shutdown -r now 立刻重启 |
网络
1 | ifconfig 查看网络ip地址 |
后台执行命令
crontab
cron是执行定时任务的守护进程,在系统处于多用户运行级别时,cron进程会从/etc/init.d中自动启动,进程会在目录/var/spool/cron/crontabs下搜索定时计划任务文件(文件名为创建此任务的账户名),并将找到的定时计划任务载入内存
/var/spool/cron/crontabs中的定时任务文件不要直接用编译器编辑,使用crontab
命令可以检查语法错误。cron进程还会读取/etc/crontab以及/etc/cron.d下的内容。
crontab
命令用于创建、修改、删除和查看定时任务。定时任务文件由每行命令组成,每行6个字段,由空格或者制表符分隔,前五个字段表示任务运行的时间,在最后一个字段是任务的命令。
如下:
1 | 01 * * * * root run-parts /etc/cron.hourly |
前五个字段含义依次如下:
- 分钟,0-59
- 小时,0-23
- 日期,1-31
- 月份,1-12或Jan-Dec
- 星期,0-6或Sun-Sat,0表示星期日
前五个字段还可以使用如下字符
- 星号(*) 匹配所有可能的值,比如”0 6 * * *”表示每天6点
- 连字符(-)定义一个范围,比如”0 2 * * 1-5”表示每周一到周五的凌晨两点
- 斜杠(/)表示每间隔多少时间,比如”*/5 * * * *”表示每5分钟
- 逗号(,)表示或的含义,比如”0 0,6,12,18 * * *”表示每天的0点、6点、12点和18点
1 | #使用-l选项,可以列出当前用户的所有定时计划任务 |
at
at
命令用于安排一个任务在指定的时间运行。at命令可以从标准输入读入命令,也可以从指定的文件中读入,然后在指定的时间运行这些命令。语法如下:
at -f file -q queue option time date
at命令支持比较复杂的时间和日期,使用-f选项,可以从指定的文件中读取命令内容,然后在指定时间运行。如下示例:
1 | at -f myjob.txt now +1 minutes |
1 | #列出当前用户 |
&
&
代表将任务放在后台运行
该命令是bash内置的用于并行处理进程的一个控制操作符,在命令行的末尾添加&
将会在后台运行该命令,将在当前的shell进程下启动一个子进程
1 | echo haha & |
其中[1]是这个后台任务的编号,9533为其对应的子进程号。
使用jobs
命令可以显示后台运行的进程号,运行状态等信息
1 | jobs |
如果需要将后台任务放到前台执行,使用如下命令,其中job-id为任务编号
1 | %job-id |
如果想将任务重新再放回后台执行,首先按Ctrl+Z,将上述放在前台的任务挂起,然后输入%job-id &或bg
,其中bg用于将挂起的任务放在后台继续运行。
nohup
nohup
命令:
运行一个对挂起免疫的命令,使用该命令能让你运行的命令或脚本在你退出系统后继续在后台运行
1 | #运行一个jar包 |
上面例子中[1]为任务编号,12496是该后台任务的进程号,后面一句表示该脚本运行的所有输出内容被写入到当前目录下的nohup.out中
sort
命令可以对文本进行排序,uniq
命令可以文本去重,tr
命令替换或删除字符,diff
比较两个文件,pwd
:显示目前的目录,hostname
:显示当前主机名,使用hostname 新主机名
可以修改主机名(只在当前有效,系统重启后不再生效)
1 | uptime |
用户管理
1 | Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 |
useradd
1 | useradd新增用户 |
passwd
1 | passwd给指定的用户设置密码 |
userdel
1 | userdel删除用户 |
usermod
1 | usermod修改用户信息 |
用户组管理
1 | 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。 |
groupadd
1 | groupadd增加一个新的用户组 |
groupdel
1 | groupdel删除一个用户组 |
groupmod
1 | groupmod修改用户组信息 |
newgrp
1 | newgrp切换到其他用户组 |
附图
最后附一张我关注的一个博主java3y
之前总结的脑图,我转成图片放在此处,比较简洁清晰,如有侵权,联系删除:
