Axn_很优秀 2018-08-29 09:45:41 88305 收藏 1739
分类专栏: linux 文章标签: linux linux命令
字体颜色含义:
浅蓝色:表示链接文件;
灰色:表示其他文件;
绿色:表示可执行文件;
红色:表示压缩文件;
蓝色:表示目录;
红色闪烁:表示链接的文件有问题了;
黄色:表示设备文件,包括block,char,fifo。
用"dircolors -p"命令可以看到缺省的颜色设置,包括各种颜色和"粗体",下划线,闪烁等的定义。
日常使用命令/常用快捷键命令
开关机命令
-
shutdown --h now:立刻进行关机
-
shutdown --r now:现在重新启动计算机
-
reboot:现在重新启动计算机
-
su -:切换用户;passwd:修改用户密码
-
logout:用户注销
常用快捷命令
-
tab = 补全
-
ctrl + l -:清屏,类似clear命令
-
ctrl + r -:查找历史命令(history);ctrl+c = 终止
-
ctrl+k = 删除此处至末尾所有内容
-
ctrl+u = 删除此处至开始所有内容
常用工具命令
-
man:帮助命令
-
wc:文本统计统计 (3 5 29 a.txt :行数 单词数 字符数 文件名)
常见参数:-l:只查看行数
-w: 只查看单词数
-c:只查看字符数 -
du:文件大小统计
格式:du [选项参数] dir_path
常见参数:-s:只统计该文件目录的大小,不递归
-h:人性化的显示单位 -
find:文件检索命令
语法:find path -option [ -print ] [ -exec -ok command ] {} \;
参数说明 :find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n :文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilobytes,w是二个位元组。-typec:文件类型是c的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
实例:
(1) 将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name “*.c”
(2) 将目前目录其其下子目录中所有一般文件列出
find . -type f
(3) 将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20
(4) 查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;
(5) 查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -type f -perm 644 -exec ls -l {} \;
(6) 为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;
常用目录/文件操作命令
展示目录列表命令ls(list)
ls 展示当前目录下的可见文件
ls -a 展示当前目录下所有的文件(包括隐藏的文件)
ls -l(ll) 展示当前目录下文件的详细信息
ll -a 展示当前目录下所有文件的详细信息
ll -h 友好的显示当前目录下文件的详细信息(其实就是文件的大小可读性更强了)
pwd 显示目前的目录
切换目录命令cd(change directory)
cd test 切换到test目录下
cd … 切换到上一级目录
cd / 切换到系统根目录下
cd ~ 切换到当前用户的根目录下
cd - 切换到上一级所在的目录
目录的创建(mkdir)和删除(rmdir)命令
mkdir test 在当前目录下创建一个test目录
mkdir -p test/a/b 在test/a目录下创建一个b目录,如果上一级目录不存在,则连它的父目录一起创建
rmdir test 删除当前目录下的test目录(注意:该命令只能够删除空目录)
文件的创建(touch)和删除(rm)命令
touch test.txt 在当前目录下创建一个test.txt的文件
rm test.txt 删除test.txt的文件(带询问的删除,需输入y才能删除)
rm -f test.txt 直接删除text.txt文件
rm -r test 递 归删除,即删除test目录以及其目录下的子目录(带询问的删除)
rm -rf test 直接删除test目录以及其目录下的子目录
文件打包或解压命令tar
Linux tar(英文全拼:tape archive )命令用于备份文件。
tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
-
语法
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][–after-date=<日期时间>][–atime-preserve][–backuup=<备份方式>]
[–checkpoint][–concatenate][–confirmation][–delete][–exclude=<范本样式>][–force-local]
[–group=<群组名称>][–help][–ignore-failed-read][–new-volume-script=<Script文件>]
[–newer-mtime][–no-recursion][–null][–numeric-owner][–owner=<用户名称>]
[–posix][–erve][–preserve-order][–preserve-permissions][–record-size=<区块数目>]
[–recursive-unlink][–remove-files][–rsh-command=<执行指令>][–same-owner][–suffix=<备份字尾字符串>]
[–totals][–use-compress-program=<执行指令>][–version][–volno-file=<编号文件>][文件或目录…] -
参数
-A或–catenate 新增文件到已存在的备份文件。
-b<区块数目>或–blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
-B或–read-full-records 读取数据时重设区块大小。
-c或–create 建立新的备份文件。
-C<目的目录>或–directory=<目的目录> 切换到指定的目录。
-d或–diff或–compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或–file=<备份文件> 指定备份文件。
-F<Script文件>或–info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
-g或–listed-incremental 处理GNU格式的大量备份。
-G或–incremental 处理旧的GNU格式的大量备份。
-h或–dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或–ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-k或–keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或–starting-file=<文件> 从指定的文件开始还原。
-l或–one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或–modification-time 还原文件时,不变更文件的更改时间。
-M或–multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或–old-archive或–portability 将资料写入备份文件时使用V7格式。
-O或–stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或–same-permissions 用原来的文件权限还原文件。
-P或–absolute-names 文件名使用绝对名称,不移除文件名称前的"/“号。
-r或–append 新增文件到已存在的备份文件的结尾部分。
-R或–block-number 列出每个信息在备份文件中的区块编号。
-s或–same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或–sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或–list 列出备份文件的内容。
-T<范本文件>或–files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或–update 仅置换较备份文件内的文件更新的文件。
-U或–unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或–verbose 显示指令执行过程。
-V<卷册名称>或–label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或–interactive 遭遇问题时先询问用户。
-W或–verify 写入备份文件后,确认文件正确无误。
-x或–extract或–get 从备份文件中还原文件。
-X<范本文件>或–exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
-z或–gzip或–ungzip 通过gzip指令处理备份文件。
-Z或–compress或–uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
–after-date=<日期时间> 此参数的效果和指定”-N"参数相同。
–atime-preserve 不变更文件的存取时间。
–backup=<备份方式>或–backup 移除文件前先进行备份。
–checkpoint 读取备份文件时列出目录名称。
–concatenate 此参数的效果和指定"-A"参数相同。
–confirmation 此参数的效果和指定"-w"参数相同。
–delete 从备份文件中删除指定的文件。
–exclude=<范本样式> 排除符合范本样式的文件。
–group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
–help 在线帮助。
–ignore-failed-read 忽略数据读取错误,不中断程序的执行。
–new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
–newer-mtime 只保存更改过的文件。
–no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
–null 从null设备读取文件名称。
–numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
–owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
–posix 将数据写入备份文件时使用POSIX格式。
–preserve 此参数的效果和指定"-ps"参数相同。
–preserve-order 此参数的效果和指定"-A"参数相同。
–preserve-permissions 此参数的效果和指定"-p"参数相同。
–record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
–recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
–remove-files 文件加入备份文件后,就将其删除。
–rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
–same-owner 尝试以相同的文件拥有者还原文件。
–no-same-owner 把当前用户当成拥有者还原文件(sudo就是root)
–suffix=<备份字尾字符串> 移除文件前先行备份。
–totals 备份文件建立后,列出文件大小。
–use-compress-program=<执行指令> 通过指定的指令处理备份文件。
–version 显示版本信息。
–volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。 -
实例
压缩文件 非打包
# touch a.c
# tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
a.c
列出压缩文件内容
# tar -tzvf test.tar.gz
-rw-r–r-- root/root 0 2010-05-24 16:51:59 a.c
解压文件
# tar -xzvf test.tar.gz
a.c
Linux的权限命令
权限是Linux中的重要概念,每个文件/目录等都具有权限,通过ls -l命令我们可以 查看某个目录下的文件或目录的权限。
文件的类型:d:代表目录
-:代表文件
l:代表链接(可以认为是window中的快捷方式)
后面的9位分为3组,每3位置一组,分别代表属主的权限,与当前用户同组的用户的权限,其他用户的权限。
r:代表权限是可读,r也可以用数字4表示
w:代表权限是可写,w也可以用数字2表示
x:代表权限是可执行,x也可以用数字1表示
linux中用户的分类:
小李 小李对象 老王
所有者u 同组用户g 其他人o
linux中文件权限: r:读 w:写 x:执行 -:没有权限
文件详情信息:
-rw-r–r--. 1 root root 5 Aug 28 02:27 a.txt
drwxr-xr-x. 2 root root 4096 Aug 27 08:52 test
root:文件所属者
root:文件所属组
-
修改文件/目录的权限的命令:chmod
示例:修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,
其他用户只有读的权限:chmod u=rwx,g=rw,o=r aaa.txt
上述示例还可以使用数字表示:chmod 764 aaa.txt -
修改文件的所属用户和所属组 chown
参数:-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息
-deference 作用于符号链接的指向,而不是链接文件本身
--reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组
--from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变
--help 显示帮助信息
--version 显示版本信息
实例:
chown username: groupName aa.txt 改变所属者和所属组
chown username: aa.txt 改变所属者
chown :groupName aa.txt 改变所属组
文件/文件夹的cp rm及文件的查看
-
cp :(复制文件或目录)即拷贝文件和目录。
语法:
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 … directory
选项与参数:
-a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r:递归持续复制,用於目录的复制行为;(常用)
-s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
-u:若 destination 比 source 旧才升级 destination !
用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc’? n <==n不覆盖,y为覆盖 -
rm: (移除文件或目录)
语法:
rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
将刚刚在 cp 的实例中创建的 bashrc 删除掉!
[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc’? y
如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名! -
mv: (移动文件与目录,或修改名称)
语法:
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 … directory
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest
将某个文件移动到某个目录去,就是这样做!
将刚刚的目录名称更名为 mvtest2
[root@www tmp]# mv mvtest mvtest2 -
Linux 文件内容查看(cat tac nl more less head tail)
Linux系统中使用以下命令来查看文件的内容:
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。
(1) cat:由第一行开始显示文件内容
语法:cat [-AbEnTv]
选项与参数:
连接所有指定文件并将结果写到标准输出。
如果没有指定文件,或者文件为"-",则从标准输入读取。
-A, --show-all 等效于 -vET
-b, --number-nonblank 对非空输出行编号,同时取消 -n 选项效果
-e 等效于 -vE
-E, --show-ends 在每行结束处显示"$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行
-t 与 -vT 等效
-T, --show-tabs 将跳格字符显示为^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外
–help 显示此帮助信息并退出
–version 显示版本信息并退出
示例1:
cat f - g 先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。
cat 将标准输入的内容复制到标准输出。
示例2:
EOF,多行追加或者写到文件(>写入,若有清空写入,>>追加)|与ctrl+d结束的效果一样
$ cat > test.tex << EOF
$ …
$ …
$ EOF #顶格,如果不顶格,首行为-EOF(EOF可以为任何的字符)
$ cat > test.tex
$ …
$ …(ctrl+d结束)
(2) tac:tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:
[root@www ~]# tac /etc/issue
Kernel \r on an \m
CentOS release 6.4 (Final)
(3) nl:显示行号
语法:nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在荧幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。
实例一:用 nl 列出 /etc/issue 的内容
[root@www ~]# nl /etc/issue
1 CentOS release 6.4 (Final)
2 Kernel \r on an \m
(4) more:一页一页翻动
[root@www ~]# more /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
…(中间省略)…
–More–(28%) <== 重点在这一行喔!你的光标也会在这里等待你的命令
在 more 这个程序的运行过程中,你有几个按键可以按的:
空白键 (space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f :立刻显示出档名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
(5) less:一页一页翻动,以下实例输出/etc/man.config文件的内容:
[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
…(中间省略)…
: <== 这里可以等待你输入命令!
less运行时可以输入的命令有:
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q :离开 less 这个程序;
(6) head:取出文件前面几行
语法:head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
[root@www ~]# head /etc/man.config
默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
[root@www ~]# head -n 20 /etc/man.config
(7) tail:取出文件后面几行
语法:tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config
系统常用操作命令
-
visudo:编辑sudo命令的配置**
Allow root to run any commands anywhere
root ALL=(ALL) ALL
用户名 登录的主机=(以什么样的身份运行) 可以执行什么命令
如果想让huadian用户也居于root相关权限。
huadian ALL=(root) NOPASSWD:service iptables status
huadian ALL=(root) NOPASSWD:service iptables start
推荐用法
huadian ALL=(root) NOPASSWD:ALL
使用权限:sudo service iptables status ----(检查防火墙状态) -
ping、ifconfig:网络管理
-
service:服务管理命令
格式:service s_name start|stop|status|restart
linux系统所有自带服务名称:/etc/init.d/
常用:
关闭防火墙服务:service iptables stop
重启网络服务:service network restart
mysql数据库服务的名称:mysql版本低于5.5 mysqld
mysql版本高于5.5 mysql -
chkconfig:设置是否开机启动(ubuntu默认没有,需要安装组件)
判定是否开机启动chkconfig iptables --list(2.3.4.5是on表示开机启动)
设置:chkconfig iptables on|off -
ps:进程管理
查看java的进程:ps -ef | grep java
jps:==(ps -ef | grep java) 只有在linux中安装了JDK才能用 -
kill:杀死某个进程
kill -9 pid -
netstat:端口管理
-a:表示列举所有的连接、服务器监听
-t:列出所有tcp协议的服务
-u:列出所有udp协议的服务
-n:使用端口号来显示
-l:列出所有的监听
-p:列出所有服务的进程id(pid)
常用:netstat -atunlp -
redhat的selinux安全机制
关闭selinux安全机制:vim /etc/selinux/config
SELINUX=disabled 重启机器生效 -
date:日期 脚本之家
[root@localhost source]# date --help
用法:date [选项]… [+格式]
或:date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
(1) 以给定的格式显示当前时间,或是设置系统日期:
-d,–date=字符串 显示指定字符串所描述的时间,而非当前时间
-f,–file=日期文件 类似–date,从日期文件中按行读入时间描述
-r, --reference=文件 显示文件指定文件的最后修改时间
-R, --rfc-2822 以RFC 2822格式输出日期和时间
例如:2006年8月7日,星期一 12:34:56 -0600
–rfc-3339=TIMESPEC 以RFC 3339 格式输出日期和时间。
TIMESPEC=`date’,`seconds’,或 `ns’ 表示日期和时间的显示精度。
日期和时间单元由单个的空格分开:2006-08-07 12:34:56-06:00
-s, --set=字符串 设置指定字符串来分开时间
-u, --utc, --universal 输出或者设置协调的通用时间
–help 显示此帮助信息并退出
–version 显示版本信息并退出
(2) 给定的格式FORMAT 控制着输出,解释序列如下:
%% 一个文字的 %
%a 当前locale 的星期名缩写(例如: 日,代表星期日)
%A 当前locale 的星期名全称 (如:星期日)
%b 当前locale 的月名缩写 (如:一,代表一月)
%B 当前locale 的月名全称 (如:一月)
%c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
%C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
%d 按月计的日期(例如:01)
%D 按月计的日期;等于%m/%d/%y
%e 按月计的日期,添加空格,等于%_d
%F 完整日期格式,等价于 %Y-%m-%d
%g ISO-8601 格式年份的最后两位 (参见%G)
%G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
%h 等于%b
%H 小时(00-23)
%I 小时(00-12)
%c 按年计的日期(001-366)
%k 时(0-23)
%l 时(1-12)
%m 月份(01-12)
%M 分(00-59)
%n 换行
%N 纳秒(000000000-999999999)
%p 当前locale 下的"上午"或者"下午",未知时输出为空
%P 与%p 类似,但是输出小写字母
%r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
%R 24 小时时间的时和分,等价于 %H:%M
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S 秒(00-60)
%t 输出制表符 Tab
%T 时间,等于%H:%M:%S
%u 星期,1 代表星期一
%U 一年中的第几周,以周日为每星期第一天(00-53)
%V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w 一星期中的第几日(0-6),0 代表周一
%W 一年中的第几周,以周一为每星期第一天(00-53)
%x 当前locale 下的日期描述 (如:12/31/99)
%X 当前locale 下的时间描述 (如:23:13:48)
%y 年份最后两位数位 (00-99)
%Y 年份
%z +hhmm 数字时区(例如,-0400)
%😒 +hh:mm 数字时区(例如,-04:00)
%:😒 +hh:mm:ss 数字时区(例如,-04:00:00)
%::😒 数字时区带有必要的精度 (例如,-04,+05:30)
%Z 按字母表排序的时区缩写 (例如,EDT)
默认情况下,日期的数字区域以0 填充。
以下可选标记可以跟在"%"后:
- (连字符)不填充该域
_ (下划线)以空格填充
0 (数字0)以0 填充
^ 如果可能,使用大写字母
# 如果可能,使用相反的大小写
在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。
(3) 时间输出
date是Linux系统里自带的一个系统命令,用来显示当前的系统时间,不过默认显示的结果里包括很多信息,特别是做为文件名输出时,不是很方便,好在date命令里包含格式化输出的选项
[root@root ~]# date “+%Y-%m-%d”
2013-02-19
[root@root ~]# date “+%H:%M:%S”
13:13:59
[root@root ~]# date “+%Y-%m-%d %H:%M:%S”
2013-02-19 13:14:19
[root@root ~]# date “+%Y_%m_%d %H:%M:%S”
2013_02_19 13:14:58
[root@root ~]# date -d today
Tue Feb 19 13:10:38 CST 2013
[root@root ~]# date -d now
Tue Feb 19 13:10:43 CST 2013
[root@root ~]# date -d tomorrow
Wed Feb 20 13:11:06 CST 2013
[root@root ~]# date -d yesterday
Mon Feb 18 13:11:58 CST 2013
(4) 时间设置
我们一般使用"date -s"命令来修改系统时间
比如将系统时间设定成2011年7月13日的命令:date -s 07/13/2011
将系统时间设定成11点12分0秒的命令:date -s 11:12:00
注意:这里说的是系统时间,是linux由操作系统维护的。
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。
如果要确保修改生效可以执行如下命令。
#clock --w
这个命令强制把系统时间写入CMOS。
getopts命令获取命令行参数
傲雪星枫 2017-07-30 13:20:47 36189 收藏 7
调用格式
getopts option_string variable
参数说明
option_string 选项名称
variable 选项的值
选项之间可以使用冒号:分隔,也可以直接连接, : 表示选项后面有传值。
当getopts命令发现冒号后,会从命令行该选项后读取该值。如该值存在,将保存在特殊的变量OPTARG中。
当option_string用:开头,getopts会区分invalid option错误和miss option argument错误。
invalid option时, varname会被设成?
miss option argument时,varname会被设成:
如果option_string不用:开头,invalid option错误和miss option argument错误都会使varname被设成?。
getopts包含两个内置变量,OPTARG和OPTIND
OPTARG 保存选项后的参数值
OPTIND 表示命令行下一个选项或参数的索引
实例1
#!/bin/bash
while getopts a:b:c:d opts; do
case $opts in
a) a=$OPTARG ;;
b) b=$OPTARG ;;
c) c=$OPTARG ;;
d) d=$OPTARG ;;
?) ;;
esac
done
echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"
exit 0
执行输出
./test.sh -a 1 -b 2 -c 3 -d 4
a=1
b=2
c=3
d=
option_string a:\b:c:d
a,b,c后都有:,d后没有:
所以可以获取到a,b,c的值
例子2,option_string前加:
上例中,如果a,b,c任意一个没有传值,将会提示出错。例如 -c 不传值。
./test.sh -a 1 -b 2 -c
./test.sh: option requires an argument – c
a=1
b=2
c=
d=
我们在option_string前加上:,则可以屏蔽这个错误。
#!/bin/bash
while getopts :a:b:c:d opts; do
case $opts in
a) a=$OPTARG ;;
b) b=$OPTARG ;;
c) c=$OPTARG ;;
d) d=$OPTARG ;;
?) ;;
esac
done
echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"
exit 0
执行输出
./test.sh -a 1 -b 2 -c
a=1
b=2
c=
d=
在option_string前加上:,可以屏蔽缺失传值的错误,但如果缺失的是前面选项的值,那么获取到的值将会错误。
例如缺失a的传值,命令会把-a后的-b作为了-a的值,导致错误。
./test.sh -a -b 2 -c 3
a=-b
b=
c=
d=
因此使用getopts命令时,对于没有传值的选项,选项名称也不要加入命令行中。
例如a不传值,则-a不要加入命令行。
./test.sh -b 2 -c 3
a=
b=2
c=3
d=
实例2
[hello@Git shell]$ bash test.sh -a hello
this is -a the arg is ! hello
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “a:” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done
上面的例子显示了执行的效果和代码。
getopts的使用形式是:getopts option_string variable
getopts一共有两个参数,第一个是-a这样的选项,第二个参数是 hello这样的参数。
选项之间可以通过冒号:进行分隔,也可以直接相连接,:表示选项后面必须带有参数,如果没有可以不加实际值进行传递
例如:getopts ahfvc: option表明选项a、h、f、v可以不加实际值进行传递,而选项c必须取值。使用选项取值时,必须使用变量OPTARG保存该值。
[hello@Git shell]$ bash test.sh -a hello -b
this is -a the arg is ! hello
test.sh: option requires an argument – b
Invalid option: -
[hello@Git shell]$ bash test.sh -a hello -b hello -c
this is -a the arg is ! hello
this is -b the arg is ! hello
this is -c the arg is !
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “a:\b:cdef” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
b)
echo “this is -b the arg is ! $OPTARG”
;;
c)
echo “this is -c the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done
[hello@Git shell]$
执行结果结合代码显而易见。同样你也会看到有些代码在a的前面也会有冒号,比如下面的
情况一,没有冒号:
[hello@Git shell]$ bash test.sh -a hello
this is -a the arg is ! hello
[hello@Git shell]$ bash test.sh -a
test.sh: option requires an argument – a
Invalid option: -
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “a:” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done
[hello@Git shell]$
情况二,有冒号:
[hello@Git shell]$ bash test.sh -a hello
this is -a the arg is ! hello
[hello@Git shell]$ bash test.sh -a
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “:\a:” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done
情况一输入 -a 但是后面没有参数的的时候,会报错误,但是如果像情况二那样就不会报错误了,会被忽略。
getopts option_string variable
当optstring以":“开头时,getopts会区分invalid option错误和miss option argument错误。
invalid option时,varname会被设成?,$OPTARG是出问题的option;
miss option argument时,varname会被设成:,$OPTARG是出问题的option。
如果optstring不以”:"开头,invalid option错误和miss option argument错误都会使varname被设成?,$OPTARG是出问题的option。
chroot 创建新的根目录
chroot命令用来在指定的根目录下运行指令。chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/位置。
在经过 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:
(1) 增加了系统的安全性,限制了用户的权力
在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。
(2) 建立一个与原系统隔离的系统目录结构,方便用户的开发
使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。
(3) 切换系统的根目录位置,引导 Linux 系统启动以及急救系统等
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。
示例
(1) 创建一个目录作为根目录
chroot MyRootDir默认会执行${SHELL} -i,即MyRootDir/bin/bash,所以需要拷贝bash到指定目录
直接执行chroot MyRootDir出现错误:chroot: failed to run command ‘/bin/bash’: No such file or directory,原因是缺少bash相关的库,使用ldd查看库并拷贝(此例子中为简化演示,直接拷贝/lib目录)
(2) 执行新根目录内的命令
也可以手动指定bash路径切换,这样就不需要将bash放入新根路径的/bin目录下
chroot的第三个参数为运行的指令,该指令位于新的root路径,从下面可以验证改命令执行的不是系统路径的命令
下面是chroot的命令说明:
安全性
从chroot的用法可以看出它的使用场景有一定的局限性,首先它依赖于一台现成的unix系统(根目录必须存在于某台现有系统上),其次chroot仅仅是在系统目录上进行了隔离,并没有对进程、网络等层面进行隔离。
首先检验一下进程空间,在pts/0端切换到新的根目录,执行ping 127.0.0.1操作,该操作属于新根目录下进行的。
新开一个终端界面,查看ping进程可以看到在原系统下面是可以看到新根目录下执行的进程。chroot并没有在进程层面上进行隔离。
同样地在新根目录下执行ifconfig等网络操作可以看到网络信息跟原系统是完全一样的。chroot并没有在网络层面上进行隔离。
chroot并不能完全保证系统安全,在很多层面上chroot并没有进行完全隔离。
wheris、which查找软件的安装路径
whereis用法:
whereis [选项] [-BMS <dir>… -f] <名称>
定位某个命令的二进制文件、源码和帮助页文件。
选项:
-b 只搜索二进制文件
-B <目录> 定义二进制文件查找路径
-m 只搜索手册和信息
-M <目录> 定义 man 和 info 查找路径
-s 只搜索源代码
-S <目录> 定义源代码查找路径
-f 终止 <目录> 参数列表
-u 搜索不常见记录
-l 输出有效查找路径
-h, --help display this help
-V, --version display version
which用法:
which [命令]
功能描述:搜索命令所在的目录及别名信息
passwd、chpasswd修改密码
命令passwd
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]
passwd程序用于更新用户的身份验证令牌(口令/密码)。此任务是通过调用Linux-PAM和Libuser API实现的。实际上,它将自身初始化为Linux-PAM的"passwd"服务,并利用配置的密码模块进行身份验证,然后更新用户的密码。
1)选项
-k,–keep 此选项仅用于更新过期的身份验证令牌(口令/密码);用户希望保留没有过期的身份验证令牌(口令/密码)
-l,–lock 此选项用于锁定指定账户的密码,仅适用于root用户。通过将加密密码呈现为无效字符串(通过在加密字符串前加上!)来执行锁定。注意:该账户未完全锁定------用户仍可通过其他身份验证方式登录,例如ssh公钥身份验证。使用"chage --E 0 user(这里面是零)"命令代替完全账户锁定
–stdin 此选项用于指示passwd应从标准输入读取新密码,标准输入可以是管道(|)
-u,–unlock 这与-l选项相反------它通过删除字首!来解锁账户密码。一样仅适应于root用户。默认情况下,passwd将拒绝创建无密码账户(它不会解锁只有!作为密码的账户)。强制选项-f将废除此保护。
-d,–delete 这是删除账户密码的快捷方式。它将指定账户设置为无密码,仅适用于root用户。
-e,–expire 这是一个过期账户密码的快捷方式。在下次尝试登录期间,用户将被迫更改密码。仅适用于root用户。
-f,–force 强制指定的操作。
-n,–minimum DAYS 如果用户的账户支持密码生存期,这将设置最小密码生存期(单位天),仅适用于root用户。
-x,–maximum DAYS 如果用户的账户支持密码生存期,这将设置最长密码生存期(单位天),仅适用于root用户。
-w,–warning DAYS 如果用户的账户支持密码生存期,这将设置用户其密码将过期前DAYS天开始警告,仅适用于root用户。
-i,–inactive DAYS如果用户的账户支持密码生存期,这将设置此账户密码过期前经过的天数,这意味着账户将被视为不活动且应禁用,仅适用于root用户。
-S,–status 这将输出有关于给定账户的密码状态的简短信息,仅适用于root用户。
命令chpasswd
chapasswd [选项]
批量更新密码。注意:命令内没有用户名和密码,回车后以"用户名:密码"的格式输入(密码一般为明文),chpasswd根据选项加密
1)常用选项
-c,–crypt-method METHOD 使用指定的方法加密。加密方法有DES,MD5,NONE,SHA256,SHA512
-e,–encrypted 提供的密码已经加密
-h,–help 帮助
-m.–md5
(3).实例:非交互式修改密码
echo 123456 | passwd --stdin user002
echo “user003:123456” | chpasswd
网络命令netstat、ss
netstat
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
执行netstat后,其输出结果为:
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
ss
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。
ss [选项] [过滤]
选项:如果没有指定任何选项,ss 列出所有已经建立、并不处在listen的TCP 套接字。
-h, --help 列出选项概要
-V,–version 输出版本信息
-n, --numeric不尝试解析服务的名字
-r,–resolve 尝试解析数字地址/端口
-a,–all 显示处在listening 和 非listening 状态的套接字(对TCP来说,这意味所有已建立的连接)。
-l,–listening 只显示处在 listening 状态的套接字(默认情况下它们是被忽略的)
* -o, --options* 显示定时器信息
-e,–extended 显示详细的套接字信息
-m,–memory 显示套接字的内存使用信息
-p, --process 显示使用套接字的进程
-i, --info 显示TCP内部信息
-s,–summary 显示概要统计。该选项不分析来自不同来源的套接字概要信息。 当套接字的数量很大导致分析/proc/net/tcp 很痛苦时,它很有用。
-Z,–context 同 -p 选项,不过还显示进程的安全上下文
-z,–contexts 同 -Z, 不过还显示套接字的上下文。 该套接字上下文是从inode里取出的、并不是内核持有 的实际的socket上下文。 套接子通常以创建它的进程上下文标记, 但该上下文会反映已应 用上的policy role, type and/or range , 因此这是个很有用的参考。
-b,-bpf 显示套接字的BPF过滤(只有管理员能获取这些信息)
-4,–ipv4 只显示IPv4 套接字(-f inet的别名)
-6,–ipv6 只显示IPv6 套接字(-f inet6的别名)
-0,–packet 显示PACKET 套接字(-f link的别名)
-t,–tcp 显示 TCP 套接字
-u,–udp 显示UDP 套接字
-d,–dccp 显示 DCCP 套接字
-w,–raw 显示 RAW 套接字
-x,–unix 显示 Unix Domain 套接字(-f unix的别名)
-f FAMILY,–family=FAMILY 显示类型为FAMILY的套接字。 支持以下几个family: unix, inet,inet6,link,netlink
-A QUERY, --query=QUERY, --socket=QUERY 列出需要倒出的套接字列表,用逗号隔开。 支持以下标识 符: all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, unix_seqpacket, packet_raw, packet_dgram
-D FILE, --diag=FILE 不显示任何内容,仅把原始TCP套接字信息存入文件FILE。 如果FILE为 - , 则 使用stdout作为输出。
-F FILE, --filter=FILE 从文件FILE中读取信息。 文件的每一行被认为是单个命令行参数。 如果FILE为 - , 则使用stdin。
命令行特殊显示效果\033
华硕他哥 2018-04-12 18:21:10 4713 收藏 18
使用格式
样式开始+被修饰字符串+样式结束
样式开始
\033[{para1};{para2};{para3}m
参数1:代表背景色
可选值及其含义:
40-49:背景色
40: 黑 41: 红 42: 绿 43: 黄 44: 蓝 45: 紫 46: 绿 47: 白
参数2:代表字体色
可选值及其含义:
30-39:字体颜色
30: 黑 31: 红 32: 绿 33: 黄 34: 蓝 35: 紫 36: 绿 37: 白
38:在缺省的前景颜色上设置下划线
39:在缺省的前景颜色上关闭下划线
参数3:代表显示效果 ,当不需要背景色,也可以用于参数1位置
0:不使用效果 1:高亮(加深)显示 2:低亮(减弱)显示
4:下划线 5:闪烁 7:反显(替换背景色和字体颜色)
8:消隐
样式结束
\033[0m
举例
script命令
script 是一个神奇命令,script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就可以将其录制的结果播放给他人观看。script 的好处就在于你在终端中的所有操作、敲过的命令和打印出的结果它都可以原原本本地进行录制。可以应用于教学、演示、审计。一般来说,script 和 scriptreplay 在 Linux 发行版中都有默认安装。
script -t 2>demo.time -a demo.his 开始录像,ctrl+d或者exit结束
scriptreplay demo.time demo.his 回放
两个配置文件被当做script命令的参数。这两个文件可以随便命名,这里用demo.time和demo.his。其中demo.time用于存储时序信息,描述每一个指令在何时运行;demo.his用于存储命令信息输出。-t选项用于将时序数据导入stderr。2>用于stderr重定向到demo.time。
参数
-t 指明输出录制的时间数据
-f 如果需要在输出到日志文件的同时,也可以查看日志文件的内容,可以使用 -f 参数。
-a 输出录制的文件,在现有内容上追加新的内容
-q 可以使script命令以静默模式运行
利用script记录某人行为
vi ~/.profile script -t -f -q 2>$USER.time -a $USER.his
应用
1、演示教学
第一个命令框
script -f demo
其他命令框
scriptreplay -f demo
可以实现实时同步演示
2、服务器安全审计
直接操作线上的服务器有很大隐患,所以一般都是通过登录跳板机,然后连接线上服务器,跳板机可以访问控制和安全审计,查看记录每个人对线上服务器的操作
用户家目录下,修改环境变量,使得用户登录就会触发录像
vi ~/.profile script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his
这样搞完后,发现有一个问题是每次退出,我习惯Ctrl+D,然后按第一遍停止录像,第二遍才能用户退出,如何解决在后面添加
if [ “$SHLVL” = 1 ]; then exit; fi
这样就可以一遍Ctrl+D停止录像(exit)和退出用户