shell 与命令行
shell 分两大类:
第一类,图形界面shell(Graphical User Interface shell 即 GUI shell);
第二类,命令行式shell(Command Line Interface shell ,即CLI shell)。
传统意义上的shell指的是命令行式的shell。
GUI shell 是包裹在 linux 内核外层的,一个可通过一系列的 linux 命令对操作系统发出相关指令的人机界面(如下图);也可以理解成一个命令行解释器。
image
CLI shell 既是一种命令语言,又是一种程序设计语言。它能操作 linux 系统,也可以通过其条件语句和循环语句等,把一系列 linux 命令结合在一起,形成一个相当于面向过程的程序(shell script),来实现一些较为复杂的功能。
命令行快捷键
命令 | 功能 |
---|---|
Ctrl L | 清屏 |
Ctrl M | 等效于回车 |
Ctrl C | 中断正在当前正在执行的程序 |
历史命令 | |
Ctrl P | 上一条命令,可以一直按表示一直往前翻 |
Ctrl N | 下一条命令 |
Ctrl R | 再按历史命令中出现过的字符串:按字符串寻找历史命令(重度推荐) |
命令行编辑 | |
Tab | 自动补齐(重度推荐) |
Ctrl A | 移动光标到命令行首 |
Ctrl E | 移动光标到命令行尾 |
Ctrl B | 光标后退 |
Ctrl F | 光标前进 |
ESC F | 光标前进一个单词 |
ESC B | 光标后退一格单词 |
Ctrl ] | 从当前光标往后搜索字符串,用于快速移动到该字符串 |
Ctrl Alt ] | 从当前光标往前搜索字符串,用于快速移动到该字符串 |
Ctrl H | 删除光标的前一个字符 |
Ctrl D | 删除当前光标所在字符 |
Ctrl K | 删除光标之后所有字符 |
Ctrl U | 清空当前键入的命令 |
Ctrl W | 删除光标前的单词(Word, 不包含空格的字符串) |
Ctrl Y | 粘贴Ctrl W或Ctrl K删除的内容 |
Alt . | 粘贴上一条命令的最后一个参数(很有用) |
Alt [0-9] Alt . | 粘贴上一条命令的第[0-9]个参数 |
Alt [0-9] Alt . Alt. | 粘贴上上一条命令的第[0-9]个参数 |
Ctrl X Ctrl E | 调出系统默认编辑器编辑当前输入的命令,退出编辑器时,命令执行 |
系统管理
-
系统关机、重启
命令 功能 shutdown -h now 关闭系统 shutdown -h HH:MM 定时关机 shutdown -c 取消定时关机 shutdown -r now 重启 logout 注销 -
进程
-
先了解下linux 上进程的几种状态
符号 描述 R runnable 正在运行或者在运行队列中等待 S sleeping 中断(休眠中,受阻,在等待某个条件的形成或接收到信号) D uninterruptible sleep 不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生) Z a defunct/zombie process 僵死(进程已终止,但是进程描述符仍存在,直到父进程调用wait4()后释放) T traced or stopped 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGOUT 信号后停止运行) -
ps(process status)
命令 功能 ps -A | ps -e 显示所有程序 ps -a 显示所有终端机下执行的程序 ps -u<用户名> 列出属于该用户的程序的状况 ps a 显示现行终端机下的所有程序,包括其他用户的程序 ps u 以用户为主的格式来显示程序状况 ps -ef 显示所有进程信息,System V 风格 ps aux 显示所有进程信息,BSD风格 ls /proc/ | grep '^[1-9]' 显示所有进程信息,从 /proc/ 目录读取 -
kill <选项> <参数:进程或作业识别号>
用来删除执行中的程序或工作
$ pgrep -l ssh
2979 ssh
$ kill 2979 -
pkill <选项> <参数>
可以按照进程名杀死进程
$ pkill ssh -
killall <选项> <参数>
使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程
-
文件目录管理
-
文件或目录的增删改查
-
cd
命令 功能 cd /home 进入'/home'目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人主目录 cd ~user 进入个人主目录 cd - 返回上次所在目录 -
ls
命令 功能 ls 查看目录中的文件 ls -F 文件类型标识符 ls -l 查看文件和目录的详细信息 ls -a 显示隐藏文件 ls -i 显示文件索引节点号(inode),一个索引节点代表一个文件 $ ls -il 12885654371 drwxr-xr-x 90 cyan staff 2880 Nov 8 17:36 bak 含义: inode: 索引节点 文件类型与权限: 文件类型: d 目录 权限: rwx 文件属主可读、可写、不可执行 r-x 文件所归属的用户组不可写,可读,可执行 r-x 其它用户不可写,可读,可执行 硬链接个数 文件属主 文件属组 文件大小 访问/修改时间 文件/目录名
-
mkdir
命令 功能 mkdir dir1 创建一个目录 mkdir dir1 dir2 创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 -
rm
命令 功能 rm -f file1 删除文件 rmdir dir1 删除目录 rm -rf dir1 删除目录并删除其内容 rm -rf dir1 dir2 删除两个目录并删除其内容 -
mv
命令 功能 mv dir1 new_dir 移动/重命名一个目录 -
cp
命令 功能 cp file1 file2 复制一个文件 cp dir/* . 复制一个目录下的所有文件到当前目录 cp -a /tmp/dir1 . 复制一个目录到当前目录 cp -a dir1 dir2 复制一个目录 -
find
命令 功能 find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 find / -user user1 搜索属于用户 'user1' 的文件和目录 find /home/user1 -name *.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 find / -mtime 0 最近24h修改的文件 -
grep(global search regular expression(RE) and print out the line)
命令 功能 grep pattern file_1 file_2... 在文件中搜索一个单词,返回一个包含 pattern 的文本行 grep pattern . -r -n 在多级目录中对文件进行递归搜索 grep -c pattern file 统计包含匹配字符串的行数 grep pattern -n file 输出包含匹配字符串的行数 grep -E [1-9]+ file 使用正则表达式 echo string | grep -i str 忽略匹配样式的字符串大小写 echo string | grep -o -E [a-z]+ 只输出匹配到的部分 -
其他
命令 功能 > file_name 删除文件内容 echo "text" > file_name 将"text"写入文件 cat file_name (输出设备)显示文件内容 pwd 显示工作路径 whereis halt 显示一个二进制文件、源码或man的位置 which halt 显示一个二进制文件或可执行文件的完整路径 ps -ef | wc -l 所有进程数量,wc -l 用来统计行数 find . -name ".log." -exec ls {} ; find . -name ".log." -exec rm -rf {} ; 递归删除文件
-
-
文件权限
linux文件权限.gif-
chown
命令 功能 chown 改变某个文件或目录的所有者和所属的组 chown -R cyan /usr/meng 将目录/usr/meng及其下面的所有文件、子目录的文件主改成 cyan -
chmod
命令 功能 chmod 变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分 u User即文件或目录的拥有者 g Group即文件或目录的所属群组 o Other除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围 a All即全部的用户,包含拥有者,所属群组以及其他用户 r 读取权限,数字代号为“4” w 写入权限,数字代号为“2” x 执行或切换权限,数字代号为“1” - 不具任何权限,数字代号为“0” s 特殊功能说明:变更文件或目录的权限 chmod u+x,g+w f01 为文件f01设置自己可以执行,组员可以写入的权限 chmod 764 f01 为文件f01设置自己读写执行权限,组员可以读写权限,其他读权限 chmod u=rwx,g=rw,o=r f01 为文件f01设置自己读写执行权限,组员可以读写权限,其他读权限
-
网络管理
-
netstat
命令 功能 netstat 网络系统的状态信息 netstat -tulp | grep 8000 显示端口是8000的使用情况,t=tcp u=udp l=监听状态的服务 p=显示进程信息
软件|硬件|监控|打印
-
lsof
命令 功能 lsof 用于查看进程开打的文件,打开文件的进程,进程打开的端口 lsof filename 列出打开 filename文件的所有进程 lsof -c <进程名> 列出指定进程名打开的文件 lsof -p <进程号> 列出指定进程号所打开的文件 lsof -i:8080 列出符合条件的进程 -
and
命令 功能 man 帮助指令 date 显示/设置系统日期 cal 2019 显示2019年的日历表 xargs 给其他命令传递参数的一个过滤器,默认命令echo,默认定界符空格 ls *.jpg | xargs -n1 -I cp {} /data/images xargs 用例,复制所有图片到目的路径 df 显示磁盘分区上的可使用的磁盘空间 du 对文件和目录磁盘使用的空间的查看 top 实时查看系统的整体运行情况,包括进程号、内存、CPU使用等
实践
-
./filename 与 sh filename、source filename 执行脚本的区别
- 当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有”.”是用来表示当前目录的。
- sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。
- source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
-
当磁盘满了
命令 功能 linux磁盘分区 磁盘分区(挂载目录) 查看分区占用信息 df -lh 查找最大文件 du -h --max-depth=1 查看文件大小(按字节) du -b <file> ls -lhS 将文件按大小排序展示 -
查找 docker 日志并清空
#!/bin/sh echo "======== docker containers logs file size ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do ls -lh $log done
#!/bin/sh echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========"
网友评论