文章目录
系统环境
环境变量
# 设置全局环境变量
vi /etc/profile
# 使全局环境变量生效
source /etc/profile 或 . /etc/profile
# 设置用户环境变量
vi ~/.bash_profile
或
vi ~/.bashrc
# 使用户环境变量生效
source ~/.bash_profile 或 source ~/.bashrc
. ~/.bash_profile 或 . ~/.bashrc
alias
# 对于长或复杂的命令,可以设置命令别名
# 可以在全局或用户环境变量中设置,有效范围不同
alias 别名 = 命令
history
# 清空历史操作记录
history -c
# 执行 history 中记录的第N行
history
!N
ps
# 查看进程 t1
# 示例查看ssh连接的进程
# root 1835 1462 0 20:04 ? 00:00:00 sshd: root@pts/0
# 进程用户 pid 父pid 进程的内容
ps -ef | grep t1
# 去除进程显示中的grep进程
ps -ef | grep t1 -v grep
kill(生产上慎重使用)
# 杀死进程,进程号为pid1 pid2 ...
kill -9 pid1 pid2 ...
# 一次杀掉某个关键字的所有进程
kill -9 $(pgref -f xxx)
netstat
# 查看 t1 进程的端口号
netstat -nlp | grep t1
# 每行的第四列即为 IP:PORT 表示对外服务的IP和端口号
# 示例 0.0.0.0:22
# 如果IP为 ::: 或 0.0.0.0 表示可以对任意ip提供服务
# 如果IP为127.0.0.1或localhost,表示只能在本机访问这个服务
案例:如何找一个服务的web地址?
# 首先根据服务名,找他的 pid
ps -ef | grep xxx
# 然后根据 pid找对应的 port
netstat -nlp | grep pid
# 然后访问 IP:端口号 即可
which
# 通过PATH寻找xxx命令在哪个文件夹
# echo $PATH 查看本机配置的环境变量
which xxx
ifconfig
# 查看ip
ifconfig
修改hostname
# 修改 /etc/hosts 文件
# 添加机器 IP 及 hostname
# IP HOSTNAME
vi /etc/hosts
telnet
# telnet命令常用来检测端口是否能连通
# 系统并未自带,需要自己安装
yum install -y telnet
# 测试端口
telnet IP PORT
chmod
# 改变文件或文件夹的读写执行权限,例如更改为777
chmod 777 xxx
# 递归改变文件夹的读写执行权限,例如更改为777
chmod -R 777 xxx
df
# 查看磁盘挂载情况
df -h
# 示例
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda3 38G 3.7G 32G 11% /
# 磁盘路径 总大小 已使用 可用 使用百分比 挂载路径
# 一般 / 根目录下不会挂载太大
free
# 查看内存情况
free -m
# 示例
# total used free shared buffers cached
# Mem: 2966 1131 1834 0 105 783
# 剩余内存
top
# 主要查看 load average: 0.00, 0.00, 0.00
# CPU负载 1min 5min 10min
# 按经验来说,如果 >10,就表明系统负载很高,开始卡顿
top
crontab
# 修改系统定时执行任务
crontab -e
# 查看定时执行任务列表
crontab -l
# 示例
# 每隔2分钟,执行一次 xxx 命令/脚本
*/2 * * * * xxx
# 每隔10s,执行一次 xxx 命令/脚本
# cron 表达式只能控制到分钟,想控制到秒需要在 shell 中结合 sleep 实现
# 例如控制 10s,for 循环 6 次,每次执行完 xxx,sleep 10s
for((i=1;i<=6;i++))
do
xxx
sleep 10s
done
jps
- jps 是 JDK 软件包自带的查看 java 进程的命令,使用前需要先安装好 JDK,详细安装步骤参见CentOS 6.5常用软件安装 中的JDK部分
- 普通用户使用 jps 只能查看自己的进程,root 用户使用 jps 查看进程,非 root 用户的进程会显示 process information unavailable
- jps 显示出的进程实际上是以文件形式保存在 /tmp/hsperfdata_用户名 目录下,文件名为 pid,文件内容为进程的相关信息
- jps 查看进程如果出现 process information unavailable,有可能是进程残留信息,实际上已经被 kill 掉,使用 ps -ef | grep pid 查看是否真实存在即可
# 使用jps 查看 hadoop 用户启动的进程
[hadoop@hadoop001 hadoop]$ jps
6400 NameNode
6689 SecondaryNameNode
6792 Jps
6522 DataNode
# 使用 root 查看当前进程
[root@hadoop001 ~]# jps
6400 -- process information unavailable
6689 -- process information unavailable
6522 -- process information unavailable
6862 Jps
# 使用其他用户只能查看到自己启动的进程
[zhihan@hadoop001 ~]$ jps
6914 Jps
# jps实际上查看的是 /tmp/hsperfdata_用户名 目录下的信息
[hadoop@hadoop001 hsperfdata_hadoop]$ ll
total 96
-rw-------. 1 hadoop hadoop 32768 Jul 6 17:22 6400
-rw-------. 1 hadoop hadoop 32768 Jul 6 17:22 6522
-rw-------. 1 hadoop hadoop 32768 Jul 6 17:22 6689
后台运行
- 测试中可以使用 nohup xxx & 后台运行xxx脚本,输出日志在当前目录的nohup.out文件
- 生产环境上指定日志输出路径 nohup 脚本路径 >> log日志路径 2>&1 &
用户及用户组
useradd
# 创建用户,默认的家目录在 /home/用户名,还会创建一个和用户名同名的组,并且为该用户的主组
useradd 用户名
id
# 查看用户 id 和组 id
# 示例输出 uid=501(zhihan) gid=501(zhihan) groups=501(zhihan)
# 用户名 用户主组 用户所属的所有的组
id 用户名
用户信息存放位置
# 用户信息存放在 /etc/passwd 中
# 示例 zhihan:x:501:501::/home/zhihan:/bin/bash
# 用户名 密码标识符 用户id 所属组id 用户描述 家目录 登录shell
cat /etc/passwd
# 如果不想让某个用户登录,可以修改登录 shell 为 /bin/false 或 /sbin/nologin
# 如果某个用户不能登录可以查看是否是登录 shell 的问题
# 用户组信息存放在 /etc/group
# 示例 zhihan:x:501:
# 组名 用户组口令(一般都为空) 用户组id 该组下的用户
cat /etc/group
userdel
# 删除用户,会删除在 passwd 中的记录,如果所属组下没有其他用户也会被一并删除
# 家目录还在,用户和用户组发生改变
userdel zhihan
使用场景
# 在使用 userdel 删除一个用户后,查看该用户的家目录可以发现用户和用户组变成了 id
# 示例 原来 drwx------. 4 zhihan zhihan 4096 Jun 17 23:09 zhihan
# 现在 drwx------. 4 501 501 4096 Jun 17 23:09 zhihan
# 此时重新创建,会提示一个家目录已经存在的警告,并且提示没有从 skel 目录拷贝文件
useradd zhihan
# 如果在登录某个用户后,出现了-bash-4.1$ 开头的命令提示(一般类似于[zhihan@hadoop001 ~]$)
# 说明该用户家目录下的 .bash 开头的文件丢失
# 如果想使用该用户,需要从 skel 目录拷贝所有 .bash 开头的文件到该用户的家目录,即可恢复正常
cp /etc/skel/.bash* /home/zhihan
groupadd
# 添加组
groupadd 组名
usermod
# 给用户添加一个新组
usermod -a -G 组名 用户名
# 修改用户的主组
usermod -g 组名 用户名
# 修改用户家目录
usermod -d 新家目录 用户名
或直接修改/etc/passwd文件中的用户家目录信息
passwd
# 修改用户密码
passwd 用户名
su
# 切换用户,留在当前目录
su 用户名
# 切换用户,且切换到用户的家目录,且让环境变量文件生效
su - 用户名
给普通用户添加sudo权限
# 普通用户如果想拥有sudo的执行权限,需要编辑 /etc/sudoers文件,在其中给用户添加root权限
vi /etc/sudoers
# root行示例 root ALL=(ALL) ALL
# 如果给 zhihan 用户 sudo 权限,可以在下方添加一行
# 配置为一个有 sudo 权限且不需要输入密码的用户
# 修改完毕后需要 wq! 强制保存
zhihan ALL=(root) NOPASSWD:ALL
chown
# 改变xxx文件或文件夹的用户和用户组
chown 用户:用户组 xxx
# 递归改变文件夹的用户和用户组
chown -R 用户:用户组 xxx