Linux命令(一)

env查看环境参数

1
2
3
4
5
6
7
8
9
[root@izj6cd5mlh03qbmrwa801iz ~]# env
XDG_SESSION_ID=4766
HOSTNAME=izj6cd5mlh03qbmrwa801iz
TERM=vt100
SHELL=/bin/bash
HISTSIZE=1000
SSH_TTY=/dev/pts/0
JRE_HOME=/usr/local/src/jdk1.8.0_40/jre
USER=root

set查看环境参数和自定义参数

export 自定义参数转成环境参数

1
2
#export 不带任何参数情况下将打印出所有环境参数
#export 还可以将自定义参数转化成环境参数,那么在子程序中也可以使用自定义的参数

ulimit 设定系统以及程序使用资源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ulimit主要是用来限制进程对资源的使用情况的,它支持各种类型的限制,常用的有:
#内核文件的大小限制
#进程数据块的大小限制
#Shell进程创建文件大小限制
#可加锁内存大小限制
#常驻内存集的大小限制
#打开文件句柄数限制
#分配堆栈的最大大小限制
#CPU占用时间限制用户最大可用的进程数限制
#Shell进程所能使用的最大虚拟内存限制

#查看系统ulimit设置
ulimit -a
core file size (blocks, -c) 0 <== 代表没限制
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited <==可建立一个文件的大小
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024 <==同时可打开文件的数量(句柄)
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited||<

# 限制只能创建小于10M的文件
ulimit -f 10240
ulimit -a | grep 'file size'
core file size (blocks, -c) 0
file size (blocks, -f) 10240 <==最大量為10240Kbyes,相當10Mbytes
dd if=/dev/zero of=123 bs=1M count=20 <== 创建一个20M的文件 123 创建失败

#永久配置ulimit需要修改`/etc/security/limits.conf`
vim /etc/security/limits.conf
vbird1 soft fsize 90000
vbird1 hard fsize 100000
# 账号 限制依据 限制项目 限制值
# 第一栏账号,或者是群组,如果是群组的话需要在前面加上@,比如@root
# 第二栏 hard 严格模式,soft警告模式

别名alias unalias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#查看别名
[root@izj6cd5mlh03qbmrwa801iz ~]# alias
alias acme.sh='/root/.acme.sh/acme.sh'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
#设置别名
[root@izj6cd5mlh03qbmrwa801iz ~]# alias lm='ls -al|more'
#取消别名
[root@izj6cd5mlh03qbmrwa801iz ~]# unalias lm

历史命令history

常用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# n->数字 代表查看最近的N条命令
[root@izj6cd5mlh03qbmrwa801iz ~]# hsitory [n]
# 将目前shell中所有命令全部清除
[root@izj6cd5mlh03qbmrwa801iz ~]# history [-c]
# -a 将目前新增的history指令新增到histfile中,预设在 ~/.bash_history
# -r 将histfiles的内容读到目前这个shell的history中
# -w 将目前history的内容写入到histfiles中
[root@izj6cd5mlh03qbmrwa801iz ~]# history [-raw]
# 执行第几条指令
[root@izj6cd5mlh03qbmrwa801iz ~]# !number
# 向前搜索 『开头为 command』的指令并执行
[root@izj6cd5mlh03qbmrwa801iz ~]# !command
# 执行上一次命令
[root@izj6cd5mlh03qbmrwa801iz ~]# !!

增加历史命令时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#%T : 替换为时间( %H:%M:%S )。
#%F : 等同于 %Y-%m-%d (ISO 8601:2000 标准日期格式)。

#临时设置当前用户的环境变量
[root@izj6cd5mlh03qbmrwa801iz ~]# export HISTTIMEFORMAT = '%F %T'
#永久设置当前/其他用户的环境变量 两种方式
[root@izj6cd5mlh03qbmrwa801iz ~]# echo 'HISTTIMEFORMAT = "%F %T"' >> ~/.bashrc
[root@izj6cd5mlh03qbmrwa801iz ~]# source ~/.bashrc

[root@izj6cd5mlh03qbmrwa801iz ~]# echo 'HISTTIEMFORMAT = "%F % T"' >> ~/.bash_profile
[root@izj6cd5mlh03qbmrwa801iz ~]# source ~/.bash_profile
#永久设置所有用户的环境变量
[root@izj6cd5mlh03qbmrwa801iz ~]# echo 'HISTTIMEFORMAT = "%F %T"' >> /etc/profile
[root@izj6cd5mlh03qbmrwa801iz ~]# source /etc/profile

bash欢迎信息

本地端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# /etc/issue文件配置欢迎信息
# \d 本地端日期
# \l 显示第几个终端界面
# \m 显示硬件架构
# \n 显示主机网络名称
# \O 显示 domain name
# \r 系统版本(相当于 uname -r)
# \t 本地端时间
# \S 系统名称
# \v 系统版本

#修改文件
\S(terminal: \l)
Date: \d \t
Kernel \r on an \m
Welcome!
#显示为
CentOS Linux 7 (Core) (terminal: tty3)
Date: 2019-01-08 17:29:19
Kernel 3.10.0-229.el7.x86_64 on an x86_64
Welcome!

远程端

1
2
3
4
5
6
# 通过telnet连接到主机时,登录信息修改/ect/motd
[root@izj6cd5mlh03qbmrwa801iz ~]# vim /etc/motd
Hello everyone!
# 当通过telenet连接到主机时会显示
Last login: Wed Jul 8 23:22:25 2018 from 127.0.0.1
Hello everyone!

截取命令cut grep

cut

将某一段的信息其中一段截取出来,以行为单位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 按照 [分割字符]分割,去除第[number]段
[root@izj6cd5mlh03qbmrwa801iz ~]# cut -d '分割字符' -f number
[root@izj6cd5mlh03qbmrwa801iz ~]# echo ${PATH}
/usr/local/src/jdk1.8.0_40/bin:/usr/local/src/jdk1.8.0_40/jre/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin:/usr/local/imagemagick/bin:/bin:/root/bin
# 以:分割,取出第二个
[root@izj6cd5mlh03qbmrwa801iz ~]# echo ${PATH} | cut -d ':' -f 2
/usr/local/src/jdk1.8.0_40/jre/bin
# 以:分割,取出第一个和第二个
[root@izj6cd5mlh03qbmrwa801iz ~]# echo ${PATH} | cut -d ':' -f 1,2
/usr/local/src/jdk1.8.0_40/bin:/usr/local/src/jdk1.8.0_40/jre/bin

# 取出12个字符之后的
[root@izj6cd5mlh03qbmrwa801iz ~]# export |cut -c 12-
CLASSPATH=".:/usr/local/src/jdk1.8.0_40/lib:/usr/local/src/jdk1.8.0_40/jre/lib:"
HISTCONTROL="ignoredups"
HISTSIZE="1000"
HOME="/root"
HOSTNAME="izj6cd5mlh03qbmrwa801iz"
JAVA_HOME="/usr/local/src/jdk1.8.0_40"
#去除1-10之间的
[root@izj6cd5mlh03qbmrwa801iz ~]# export |cut -c 1-10
declare -x
declare -x
declare -x
declare -x
declare -x
declare -x
declare -x
declare -x

grep

通过分析是否有符合我们要求的字符,如果有就取出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -a 将binary文件已text文件方式搜索
# -c 计算找到'搜索字符串'的次数
# -i 忽略大小写
# -n 顺序输出行号
# -v 反向选择,级显示没有"搜索字符串"
[root@izj6cd5mlh03qbmrwa801iz ~]# grep [-acinv][--color-auto] "搜索字符串" filename

[root@izj6cd5mlh03qbmrwa801iz ~]# last | grep "root"
root pts/0 222.95.76.15 Tue Jan 8 14:53 still logged in
root pts/0 222.95.76.15 Tue Jan 8 10:04 - 11:33 (01:29)
root pts/0 222.95.76.15 Mon Jan 7 15:55 - 17:12 (01:16)

[root@izj6cd5mlh03qbmrwa801iz ~]# last | grep -v "root"
reboot system boot 3.10.0-693.2.2.e Wed Dec 12 00:10 - 15:05 (27+14:55)
reboot system boot 3.10.0-693.2.2.e Fri Aug 3 19:54 - 16:10 (129+20:15)

##排序sort wc uniq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# -f : 忽略大小写
# -b : 忽略最前面空格
# -M : 以月份名字排序,例如JAN,DEC
# -n : 使用纯数字排序(预设文字)
# -r : 反向
# -u : uniq,相同资料,仅出现一次
# -t : 分隔符,预设是用tab来分隔
# -k : 以区间来进行排序
[root@izj6cd5mlh03qbmrwa801iz ~]# sort [-fbMnrtuk] [file or stdin]

[root@izj6cd5mlh03qbmrwa801iz ~]# cat /etc/passwd |sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
# 通过:分隔,按照3,3这个区间,通过数字排序
[root@izj6cd5mlh03qbmrwa801iz ~]# cat /etc/passwd |sort -t ':' -k 3,3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 取出登录信息第一栏进行排序,重复的只显示一次
[root@izj6cd5mlh03qbmrwa801iz ~]# last | cut -d' ' -f1 | sort |uniq
reboot
root
wtmp
# 取出登录信息第一栏进行排序,重复的只显示一次,但是统计次数
[root@izj6cd5mlh03qbmrwa801iz ~]# last | cut -d' ' -f1 | sort |uniq -c
1
3 reboot
111 root
1 wtmp
# -l:仅列出行 -w:显示单词计数 -m:多少字符 -c:字节
[root@izj6cd5mlh03qbmrwa801iz ~]# wc [-lwm]
[root@izj6cd5mlh03qbmrwa801iz ~]# cat /etc/man_db.conf |wc
131 723 5171
行 字数
#获取登录系统的总次数,排除 wtmp,reboot,unknown
[root@izj6cd5mlh03qbmrwa801iz ~]# last | grep [a-zA-Z] | grep -v 'wtmp' | grep -v 'reboot' | grep -v 'unkonwn' |wc -l
111

tee

tee 可以让标准输出转存一份到文件内并将同样的内容输出到屏幕上

1
2
3
4
# -a : 以追加方式存入file中
[root@izj6cd5mlh03qbmrwa801iz ~]# tee [-a] file
# 1.将last输出存一份到last.list中 2.将last内容截取第一栏输出到屏幕
[root@izj6cd5mlh03qbmrwa801iz ~]# last | tee last.list | cut -d " " -f1