Linux常用shell命令总结
原创 dudu
目录
- 常用文件shell命令
- 常用网络shell命令
- 常用进程shell命令
- 常用文本shell命令
- 小结
一、常用文件shell命令###
- 改变目录
1、cd
# 进入到/tmp目录下
$ cd /tmp/
# 回退一个路径
$ cd …
# 回退到自己的 home 目录
$ cd ~
# ~ 表示:home目录,# 表示:超级管理员 - 查看当前路径
1、pwd
# 用pwd命令来查看当前的路径
$ cd work
$ pwd
/home/dudu/work - 创建目录
1、mkdir
# 在 /tmp下创建一个test的文件夹
$ mkdir /tmp/test
$ ls
test
# 诺tmp文件夹不存在,上述命令就会出错,需要加上 -p属性
$ mkdir -p tmp2/test
# 创建多个文件夹
$ mkdir a b c
$ ls
a b c
# -p 确保目录名称存在,不存在的就建一个。 - 创建文件
1、touch
# touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。ls -l 可以显示档案的时间记录。
# 诺 test文件不存在,touch将创建一个新的空白文件
$ touch test
# 查看文件的时间属性
-rw-r–r-- 1 hdd hdd 55 2020-09-21 19:02 test
# 诺 test文件存在,touch将修改文件"testfile"的时间属性为当前系统时间
$ touch test
# 查看文件的时间属性
$ ls -l test
-rw-r–r-- 1 hdd hdd 55 2020-09-21 19:09 test
# 如果需要创建的空白文件不存在,touch创建一个新的空白文件.否则,touch将修改文件"testfile"的时间属性为当前系统时间,及时间戳均修改为当前时间
- 删除文件或文件夹
1、rm
# 删除文件前逐一询问确认
$ rm test.txt
rm:是否删除 一般文件 “test.txt”? y
# 直接删除,无需逐一确认
$ rm -f test.txt
# 将目录及以下之档案亦逐一删除。
$ rm -r work
rm:是否删除 目录 “homework”? y
# 将该目录和目录下的文件都删除,不需要确认
$ rm -rf work
# 一般删除文件用 -rf - 复制文件
1、cp
# 复制/root/ 目录下的 a.txt 文件到 /tmp 下
$ cp /root/a.txt /tmp/
# 复制/root/ 目录下的 所有 文件到 /tmp 下
$ cp /root/ /tmp/*
$ cp /root/? /tmp/
# 通配符
# * :表示所有文件和文件夹
# ?:表示一个字符 - 移动和改名
1、mv
# 将 /root 下的 dir 移动到 /home下
$ mv dir/ /home/
# 把 /home/ 下的dir目录改名为directory
$ cd /home/
$ mv dir/ directory - 查看文件内容
1、cat
# cat 命令直接显示一个文本的所有内容,有利于查看篇幅较短的文本
# 命令格式:查看/etc/services的内容
$ cat /etc/services2、tail
# tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容
# 显示 notes.log 文件的最后 10 行
$ tail notes.log
# 踪名为 notes.log 的文件的增长情况
$ tail -f notes.log
# 此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。
# 文件 notes.log 的内容,从第 20 行至文件末尾
$ tail +20 notes.log
# 显示文件 notes.log 的最后 10 个字符
$ tail -c 10 notes.log3、more
# more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h
# 逐页显示 test 文档内容,如有连续两行以上空白行则以一行空白行显示。
$ more -s test
# 从第 20 行开始显示 testfile 之文档内容
$ more +20 test4、less
# less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
# 查看文件
$ less notes.log
# ps查看进程信息并通过less分页显示
$ ps -ef |less
# 查看命令历史使用记录并通过less分页显示
$ history | less
二、常用网络shell命令
- hostname
# 显示主机名字
$ hostname
# 显示机器所属域名
$ hostname –d
# 显示完整的主机名和域名
$ hostname –f
# 显示当前机器的 ip 地址
$ hostname –i - ping
# ping 将数据包发向用户指定地址。当包被接收,目标机器发送返回数据包。ping 主要有两个作用:
# 1、 用来确认网络连接是畅通的。
# 2、 用来查看连接的速度信息。
# 得到ip 地址,通过 ctrl+C 来停止命令
$ ping dudu.net // ping主机
# -c 参数可以定义 ping 的次数,如:比如 ping -c 3 dudu.net 就是 ping dudu博客3次 - ifconfig
# 查看用户网络配置。它显示当前网络设备配置。对于需要接收或者发送数据错误查找,这个工具极为好用。
# 显示当前网络设备配置
$ ifconfig
三、常用进程shell命令
- ps
# ps 命令用于显示当前进程的状态,类似于 windows 的任务管理器。
# 显示进程信息
$ ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
…
# 显示指定用户信息
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
…
# 显示所有进程信息,连同命令行
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:22 ? 00:00:02 /sbin/init
root 2 0 0 10:22 ? 00:00:00 [kthreadd]
root 3 2 0 10:22 ? 00:00:00 [migration/0]
root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
… - kill
# kill 命令用于删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看
# 杀死进程
$ kill 12345
# 强制杀死进程
$ kill -KILL 123456
# 发送SIGHUP信号,可以使用一下信号
& kill -HUP pid
# 彻底杀死进程
$ kill -9 123456 - sudo
# sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
# 指定用户执行命令
$ sudo -u userb ls -l
# 以root权限执行上一条命令
$ sudo !!!
# 列出目前的权限
$ sudo -l-l*
# 列出 sudo 的版本资讯
$ sudo -V-V
四、常用文本shell命令
- awk
# AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
1、选项参数
# 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:
-F fs or --field-separator fs # 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F
-v var=value or --asign var=value # 赋值一个用户定义变量
-f scripfile or --file scriptfile # 从脚本文件中读取awk命令
-W copyleft or --copyleft, -W copyright or --copyright # 打印简短的版权信息。
-W posix # 打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符 ** 和 **= 不能代替 ^和 ^=;fflush无效。
-W re-interval or --re-inerval # 允许间隔正则表达式的使用
-W source program-text or --source program-text # 使用program-text作为源代码,可与-f命令混用2、基本用法
# 创建文件log.txt,内容如下:
2 this is a test
3 Are you like awk
This’s a test
10 There are orange,apple,mongo# 每行按空格或TAB分割,输出文本中的1、4项
$ awk ‘{print $1,$4}’ log.txt2 a
3 like
This’s
10 orange,apple,mongo# 格式化输出
$ awk ‘{printf “%-8s %-10s\n”,$1,$4}’ log.txt2 a
3 like
This’s
10 orange,apple,mongo# 设置变量
$ awk -va=1 ‘{print $1,$1+a}’ log.txt2 3
3 4
This’s 1
10 11# 还可以采用运算符来对文本进行编辑,
# 过滤第一列大于2的行
$ awk ‘$1>2’ log.txt
# 过滤第一列大于2并且第二列等于’Are’的行
$ awk ‘$1>2 && $2==“Are” {print $1,$2,$3}’ log.txtAre you
# 内建变量
$ awk ‘BEGIN{printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,“FILENAME”,“ARGC”,“FNR”,“FS”,“NF”,“NR”,“OFS”,“ORS”,“RS”;printf “---------------------------------------------\n”} {printf “%4s %4s %4s %4s %4s %4s %4s %4s %4s\n”,FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}’ log.txtFILENAME ARGC FNR FS NF NR OFS ORS RS
log.txt 2 1 5 1
log.txt 2 2 5 2
log.txt 2 3 3 3
log.txt 2 4 4 4# 使用正则,字符串匹配
# 输出第二列包含 “th”,并打印第二列与第四列
$$ awk ‘$2 ~ /th/ {print $2,$4}’ log.txtthis a
五、小结
- Linux系统强大的控制台、终端和shell的关系,在控制台终端登录或在图形界面下开启“终端”,默认都会启动一个shell来接待使用者。(added by smsong:可以认为终端是父进程getty先启动,该getty会执行login程序,以处理登录的动作,登陆完成以后,login就会执行用户的 shell,这时就是为用户默认分配了一个shell。该shell执行用户键入的命令。同样该shell也可以开启其子shell来执行用户输入,当该 子shell结束时,它会送一个信号给其父进程。所以当用户离开系统时候,它的登陆shell会告诉init,而init知道了以后会为那个终端产生一个 新的getty进程,然后这个循环就不断的重复下去。注意:如果用户登陆失败,则login进程推出,它向其父进程init发送一个信号,指明应当为终端创建一个新的getty进程,重复上面的动作。
- 终端本质上对应着linux上的/dev/tty设备,linux的多用户登录就是通过不同的/dev/tty设备完成的,linux默认提供了6个纯命令行界面的’‘terminal’’(准确的说这里应该是6个虚拟控制台)来让用户登录,在物理机系统上你可以通过ctrl+alt+F1~F6进行切换。当切换到其中一个终端后,想要切换回图形界面,可以按下ctrl+alt+F7来完成。
- @author: dudu
- @email : 2065150945@qq.com
- @time :2020/9/21 23:54
- 说明: 转载请声明作者