日期
date
日历
cal [month] [year] cal 2015 cal 10 2015
数据同步写入磁盘
sync
关机
shutdown
重启
reboot
列出文件
ls -al
修改用户组
chgrp [-R] 用户组名称 文件或目录
修改拥有者
chown [-R] 账号名称 文件或目录 chown [-R] 账号名称:用户组名称 文件或目录
修改权限
一般权限 chmod [-R] 777 文件或目录 # rwxrwxrwx 系数(r:4, w: 2, x: 1) chmod u=rwx,go=rx 文件或目录 #rwxr-xr-x chmod a+w 文件或目录 #给owner groud other都加上w权限 chmod u-x 文件或目录 #给owner 减去x权限 特殊权限 SUID、SGID、SBIT(系数分别为,4,2,1) SUID:仅对二进制程序有效,执行者在执行该文件期间具有该程序拥有者权限 SGID:仅对二进制程序有效,执行者在执行该文件期间具有该程序用户组权限 SBIT:仅对目录有效, 用户在该目录下建立文件,仅有root和该用户才有权利删除该文件 chmod 4755 test # 加入SUID权限 rwsr-xr-x chmod 6755 test # 加入SUID/SGID权限 rwsr-sr-x chmod 1755 test # 加入SBIT权限 rwxr-xr-t
切换目录
cd [相对或绝对路径]
显示当前路径
pwd
创建新目录
mkdir test mkdir -m 711 test mkdir -p test1/test2/test3
复制文件和目录
cp 源文件 目标文件 -p: 连同文件属性一起复制 -r: 目录的递归复制 -i: 覆盖时询问 -a: 全部属性复制
删除文件和目录
rm 文件或目录 -r: 递归删除 -f: 忽略不存在文件,不报错
移动文件和目录
mv source1 source2 source3 ... 目录 -i: 询问覆盖 -f: 直接覆盖,不询问
获取文件名和目录名
basename 路径 dirname 路径
查看文件
cat less #可翻页 head -n 10 文件 #查看头部10行 tail -n 10 文件 #查看尾部10行 od -t [acdfox] 文件 #查看非纯文本文件
新建文件或修改文件时间
touch 文件 -d: 后接时间 -c: 仅修改时间,不建立新文件
文件默认权限
umask umask 002 # rwxrwxr-x 后接数值是对应减掉的权限
查看文件格式
file 文件名 # ascii文件、data文件、二进制文件
查找文件
which command # 查找命令的位置,根据环境变量PTAH查找 whereis 文件和目录名 locate keyword # 根据数据库记录查询, updatedb 更新数据库 -r: 表明后接正则 -l: 输出行数 -i: 忽略大小写 find [PATH] [OPTION] [ACTION] -mtime n: 在前第n那天被修改的文件 -mtime +n: 在n天前被修改的文件 -mtime -n: 在n天内被修改的文件 -uid 用户id -gid 用户组id -user 用户名 -group 用户组名 -name 文件名 -size [+-]文件大小:查找比指定文件size大或者小的文件 -perm mode:权限等于mode的文件 -perm -mode: 权限等于或包含mode的文件 -perm /mode: 包含任一mode权限的文件 # 根目录下找出文件名包含passwd的文件 find / -name passwd # 根目录下找出在前第三天被修改的文件 find / -mtime 3 # 根目录下找出含有SUID、SGID、SBIT权限的文件 find / -perm /7000
列出文件系统及其容量
df -h -h:人性化显示 -i: 显示inode数量
列出目录容量
du -sh 文件和目录 -s: 列出总量 -h:人性化显示
建立链接
ln -s 源文件 目标文件 # 不加-s为硬链接,否则为符号链接
列出系统上磁盘列表
lsblk
压缩
tar -jcv -f filename.tar.bz2 文件或目录 -z: gzip[*.tar.gz] -J: xz[*.tar.xz] -j: bzip2[*.tar.bz2]
解压
tar -jxv -f filename.tar.bz2 文件或目录
查询命令
type 命令
列出环境变量
env
列出所有变量
set
键盘输入读取变量
read 变量名
命令别名设置
alias rm='rm -i'
查看输入的历史命令
history
管道
cat > test # 新建test文件 > 标准输出(覆盖) >> 标准输出(追加) < 标准输入(覆盖) < 标准输入(追加)
查找信息
grep '查找字符或正则' [file or stdin]
排序
sort [file or stdin]
去重
uniq [stdin]
参数代换
xargs 命令 find /usr/sbin -perm /7000 | xargs ls -l
文本处理
sed [n1[,n2]] function [stdin] function: a新增, c替换, d删除, i插入, p打印, s正则替换 nl /etc/passwd | sed '2a drink tea' # 在第二行后加上drink tea awk '条件类型1(操作1)条件类型2(操作2)...' [filename | stdin] NF:每行字段总数 NR:当前为第几行 FS:分隔符 last -5 | awk '{print $1 "\t" $3}' # 打印出last命令第1列和第三列 cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}' #以:为分隔符,打印符合条件第3列小于10的行中的第1和3列
文件对比
diff fromFile toFile
在当前bash进程中执行shell文件
source xxx.sh
检测文件相关属性
test [options] [文件名]
shell脚本的变量
$0 命令文件名 $1, $2, $3, $4.... 接在后面的参数 $# 参数的个数 $@ 所有参数
shell文件调试
sh [option] 文件名 x: 输出当前执行的命令脚本 v: 输出所有脚本内容
shell语法
数组 array_name=(value1 value2 ... valuen) array_name[0]=value0 array_name[1]=value1 array_name[2]=value2 算术运算符 val=`expr 1 + 1` val=`expr 1 - 1` val=`expr 1 \* 2` val=`expr 1 / 2` [$a 运算符 $b] 关系运算符包括:-eq, -ne, lt, -gt, -le, -ge 布尔运算: !(非运算),-o(或),-a(且) 逻辑运算: &&、|| 字符运算: 字符串是否相等(=)、不等(!=)、-n(字符串长度不为0返回true) 条件语句 if [ $a == $b ] then echo "a 等于 b" fi if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi case "$site" in "runoob") echo "菜鸟教程" ;; "google") echo "Google 搜索" ;; "taobao") echo "淘宝网" ;; esac 循环 for loop in 1 2 3 4 5 do echo "The value is: $loop" done while(( $int<=5 )) do echo $int let "int++" done for((i=1;i<=5;i++)) do echo "这是第 $i 次调用"; done 跳出循环:break 跳到下一循环: continue 函数 funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !" funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
查看当前用户支持的用户组
groups
切换当前用户用户组(必须是已加入的用户组)
newgrp 用户组名
新增用户
useradd [-u UID] [-g 初始化用户组] [-d 家目录绝对路径] [-s shell] 账号名称
设置或修改密码
paaswd [账号名称]
修改用户账号属性
usermod [options] [账号名称]
删除用户
userdel [-r] [账号名称]
查看用户信息
id 账号名称 finger 账号名称
用户组的增删改
groupadd [-g gid] 用户组名称 groupmod [-g gid] [-n 新组名] 用户组名称 groupdel 用户组名称
切换用户
su [-lm] [-c 命令] 用户名 su - #切换到root su - zjw #切换到zjw
使用某账号的身份执行命令
sudo [-u 账号] 命令 # 通过/etc/sudoers 来查看用户是否有sudo权限
查看当前登录的用户
who
查看用户登录历史记录
lastlog last
发送邮件
mail -s 邮件标题 用户 mail -s "hello" zjw < ~/test
一次性任务
at [-mldv] 时间 at -c 任务号码 at now + 5 minutes at -c 1 at 23:00 2020-09-08
列出当前的一次性任务
atq
删除当前的一次性任务
atrm 任务号
在cpu任务负载小于0.8时执行计划任务
batch
循环计划任务
crontab [-u 用户名] [-e | -l | -r] -e: 编辑 -l: 查看 -r: 删除所有任务 0 12 * * * mail -s "at 12:00" zjw < ./test # 每天12点都发送邮件到zjw邮箱 0 3,6 * * * 命令 # 每天3点和6点执行命令 20 8-12 * * * 命令 # 8点至12点,每小时的20分都执行命令 *1/5 * * * * 命令 # 每隔5分钟执行命令 # 系统配置文件 /etc/crontab、/etc/cron.d/*
将命令放到后台执行
命令 &
将目前任务放到后台中暂停
[crtl] + z
查看后台任务状态
jobs [-lrs]
取出后台任务
fg %任务号 fg %1 # 取出1号任务
将后台任务状态由暂停转变为运行
bg %任务号
杀掉进程
kill -signal %任务号 killall -signal 命令名称 -1: 重新读取配置文件,reload -2: ctrl + c -9: 强制结束 -15: 正常结束
脱机后台运行任务
nohup 命令 &
查看进程
ps -l # 查看当前bash相关的进程 ps aux # 查看系统所有进程 ps -ez # 查看进程的selinux相关信息 状态: R: 运行 S: 休眠 +: 处于前台 s: 一些子进程的leader进程
动态监测进程状态
top [-d 间隔秒数] [-p 指定PID]
查看进程树
pstree -A [-up]
调整nice值,影响进程执行优先级
# 执行命令时,指定nice值 nice -n 数字 命令 # 调整已有进程的nice值 renice 数字 PID 数字范围: -19 - 20
查看系统信息
uname -a
查看网络连接服务信息
netstat [option] -a: 列出所有信息 -t: 列出tcp链接 -u: 列出udp链接 -p: 列出pid -l: 列出正在监听的服务 -n: 显示端口号
发出网络请求
# Get请求 curl https://www.example.com # POST请求 curl -d'login=emma&password=123'-X POST https://google.com/login # 带header curl -H 'Accept-Language: en-US' https://google.com # 将响应保存为为文件 curl -o example.html https://www.example.com # 显示响应的头部信息 curl -i https://www.example.com
查看系统资源信息
vmstat
查找进程pid
pidof 程序名
查找进程所使用的文件
lsof [-aUu] [+d 目录] -a:条件同时成立 -u:接用户名 -U:列出socket文件 +d:后接查找目录
查看/设置SELinux模式
getenforce # enforcing: 开启并正常运行 # permissive: 开启但不限制,只触发警告 # diabeld: 完全关闭 setenforce [0|1] # 0: 对应permissive # 1: 对应enforcing
查看当前SELinux策略
sestatus
查看当前SELinux规则的布尔值
getsebool
管理单一服务
systemctl [命令] [服务unit] 命令: start 启动服务 stop 关闭服务 restart 重启服务 reload 重新加载配置文件 enable 下次开机时,启动unit disable 下次开机时,不启动unit status 列出服务状态 is-active 查看目前有没有运行 is-enable 查看目前有没有启用 mask 注销服务,服务不可被自启动或被唤醒 unmask 取消注销服务 show 查看服务详细信息 服务类型包括:service、socket(内部程序交换)、target(服务集合)、mount(挂载相关)、timer(循环执行的服务)等 服务状态: active(running、exited、waiting):运行、一次运行、等待执行 inactive:未运行 enabled:开机时会被启动 disabled:开机时不会被启动 static:不可自己启动,可被其他服务唤醒 mask:无论如何都无法启动 # 关闭atd服务 systemctl stop atd.service
查看所有服务
systemctl [命令] [--type=类型] [--all] 命令: list-units: 列出当前启动的unit,加上--all才会列出没启动的 list-unit-files: 依据/usr/lib/systemd/system/内的文件,进行列出说明 类型: 服务类型 service、socket、target等
查看/设置操作模式 target
systemctl [命令] [操作模式] 命令: get-default: 取得目前的target set-default:设置后面接的target为默认模式 isolate: 切换到后接的模式 操作模式: graphical.target: 图形界面 multi-user.target: 纯命令行 rescue.target:临时系统 emergency.target: 紧急处理 shutdown.target: 关机模式 getty.target: 设置tty数量 快捷操作: systemctl poweroff 关机 systemctl reboot 重启 systemctl suspend 挂起 systemctl hibernate 休眠
分析服务依赖
systemctl list-dependencies [服务unit] [--reverse]
服务配置文件
位置:/usr/lib/systemd/system/、/etc/systemd/system/ 示例配置文件 [Unit] 执行服务依赖性相关 Description=OpenSSH server daemon After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] 与执行的命令参数有关 EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] 挂载unit到哪个target WantedBy=multi-user.target
新增或修改服务配置文件后,使systemd重新读取配置
systemctl daemon-reload
各类服务日志文件常见位置:/var/log/
rsyslog.service 的配置文件: /etc/rsyslog.conf
# info级别以上的mail信息都记录到/var/log/maillog_info中 mail.info /var/log/maillog_info #重要服务类别 0 kern 内核产生信息 1 user 用户层级产生的信息,例如logger命令 2 mail 邮件 3 daemon 系统服务 4 auth 认证、授权相关 5 syslog rsyslogd程序本身产生的信息 6 lpr 打印机相关 7 news 新闻组 9 cron 计时任务 11 ftp相关任务 16-23 保留给本地终端用户使用 # 信息等级 debug info notice warning err crit alert emerg
查看日志
journalctl [-nrpf] [--since 起始时间] [--until 终止时间] [选项] -n 后接显示行数 -r 颠倒顺序,从最新到最旧的信息 -p 后接信息等级,info、err等 -f 持续刷新显示 选项: _PID=pid 只输出该pid相关信息 _UID=uid 只输出该uid相关信息 _SYSTEM_UNIT=unit.service 只输出该服务相关信息 SYSLOG_FACILITY=[0-23] 只输出对应服务类别的信息 示例 journalctl --since "2020-06-01 00:00:00" --until "2020-06-02 00:00:00" journalctl --since today journalctl -p err journalctl _SYSTEM_UNIT=crond.service -n 10
输出信息到日志保存
logger [-p 服务名称.等级] “信息” 示例 logger -p syslog.info "1234"
Centos Linux内核启动流程:
makefile
目标(target): 目标文件1、目标文件2 <tab> gcc -o 建立的可执行文件名称 目标文件1 目标文件2 OBJ = main.o haha.o sin_value.o # 变量 main: ${OBJ} gcc -o main ${OBJ} clean: # 清除 rm -f main.o haha.o sin_value.o
详细语法:https://seisman.github.io/how-to-write-makefile/introduction.html
安装软件
yum [选项] [命令] [参数] 选项: -y: 执行自动提供yes --installroot=/some/path: 将该软件安装到/some/path 命令: search: 搜索某个软件 list: 列出目前所有软件与版本 info: 列出某软件的详细信息 provides: 从文件去查找软件 install: 安装 update: 更新 remove: 删除 yum配置文件 /etc/yum.repos.d/CentOS-Base.repo
inode: http://www.ruanyifeng.com/blog/2011/12/inode.html
SELinux: https://zhuanlan.zhihu.com/p/30483108
curl命令:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
磁盘阵列RAID:https://zh.wikipedia.org/wiki/RAID
make命令语法: https://seisman.github.io/how-to-write-makefile/introduction.html
linux 父/子进程: http://wuchong.me/blog/2014/07/24/linux-process-manage/