-
切换目录:
cd
cd 目录
cd 目录/目录
cd .. :上一级目录
cd / :根目录
cd ~ :回家
-
创建目录和删除目录
mkdir 创建 mkdir 目录名 mkdir -p a/b/c rmdir 删除 rmdir 目录名:只能删除一个空目录
-
展示目录下文件列表(以后使用ll即可)
ls ls:展示的能看见的文件(和目录)的名称 ls -a:展示所有的文件的名称 文件前面有"."代表的是隐藏文件 ls -l:显示文件的详细信息 简写的方式: ll(★) ll -h:友好的显示
-
浏览文件
cat:显示文件的所有内容 cat 文件名 more:分页显示 空格:下一页 回车:下一行 less:分页显示 可以通过PgUp PgDn 翻页查看 tail(★★) 查看一个文件的后面的内容 tail -显示后几行 文件名 tail -f 文件名 动态的查看 例如: tail -f catalina.xxx.log 通过 ctrl+c 结束滚动查看
-
文件的操作
创建一个文件
touch 文件名 创建一个空白的文件
复制文件
cp 文件 目录/文件名
例如:
cp 1.txt 2.txt
cp 1.txt 1/1.txt
移动文件(重命名)
mv 文件 目录/文件名
mv 文件名 新文件名
删除文件 rm
rm 文件名:带询问删除
rm -f 文件名:不带询问删除
rm -r 目录:带询问的递归删除
rm -rf 目录:不带询问的递归删除(谨慎使用)
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思
删除文件夹实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件
tar:打包或解压 一个文件或者目录(★★)
常用的组合
-cvf :打包一个文件或者目录
-zcvf:打包并压缩一个文件或者目录 压缩的格式:gzip
-xvf:解压或者打开一个tar文件
格式:
tar 参数 文件名 要打包|解压的文件目录
例如:
将当前目录下的所有文件打包成test1.tar
tar -cvf test1.tar ./*
将当前目录下的所有文件打包并压缩成test2.tar.gz
tar -zcvf test2.tar.gz ./*
将test1.tar解压到当前目录
tar -xvf test1.tar
将test1.tar解压到b目录
tar -xvf test1.tar -C b
grep:查找符合条件的字符串(★)
grep 字符串
pwd:显示当前的工作目录
wget:下载资料
wget 资源路径
vi和vim编辑器(理解中了解)
编辑普通文件
三种模式:命令行、插入、底行模式。
切换到命令行模式:按Esc键;
切换到插入模式:按 i 、o、a键;
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
退出编辑Esc :q!
保存Esc :wq
切换到底行模式:按 :(冒号);
管道 | ★
重要的一个概念,其作用是将一个命令的输出用作另一个命令的输入
例如:
在ifconfig的结果里查找 192.168字符串
ifconfig | grep 192.168
以后常用
查找和java相关的进程
ps -ef | grep java
查找和3306相关的信息
ps -ef | grep 3306
系统管理命令
date 显示或设置系统时间
date 显示当前系统时间
date -s “2014-01-01 10:10:10“ 设置系统时间
clear 清屏
ctrl+l
ps 正在运行的某个进程的状态
ps –ef 查看所有进程
★ps –ef | grep ssh 查找某一进程
ps aux|grep WorkerMan
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t <终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。 用户以及其他详细信息
13)ps x 显示所有程序,不以终端机来区分。 显示没有控制终端的进程
14)ps -l 較長,較詳細的顯示該PID的信息
# ps -lA |more
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 76 0 - 1193 109952 ? 00:00:03 init
1 S 0 2 1 0 -40 - - 0 migrat ? 00:00:03 migration/0
1 S 0 3 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0
1 S 0 4 1 0 -40 - - 0 migrat ? 00:00:02 migration/1
1 S 0 5 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/1
1 S 0 6 1 0 -40 - - 0 migrat ? 00:00:02 migration/2
1 S 0 7 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/2
相關信息的意義:
F 進程的標誌(flag),4表示用戶為超級用戶
S 進程的狀態(stat),各STAT的意義見下文
PID 進程的ID
C CPU使用資源的百分比
PRI priority(優先級)的縮寫,
NI Nice值,
ADDR 核心功能,指出該進程在內存的那一部分,如果是運行的進程,一般都是“-”
SZ 用掉的內存的大小
WCHAN 當前進程是否正在運行,若為“-”表示正在運行
TTY 登陸者的終端位置
TIME 用掉的CPU的時間
CMD 所執行的指令
# ps aux |more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4772 564 ? S Sep22 0:03 init [3]
root 2 0.0 0.0 0 0 ? S Sep22 0:03 [migration/0]
root 3 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S Sep22 0:02 [migration/1]
root 5 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/1]
root 6 0.0 0.0 0 0 ? Ss+ Sep22 0:02 [migration/2]
root 7 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/2]
root 8 0.0 0.0 0 0 ? S Sep22 0:00 [migration/3]
root 9 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/3]
root 10 0.0 0.0 0 0 ? S< Sep22 0:00 [migration/4]
上述各位解释:
USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
NI 进程的NICE值,数值大,表示较少占用CPU时间;
VSZ 进程使用的虚拟內存量(KB);
RSS 该进程占用的固定內存量(KB)(驻留中页的数量);
TTY 该进程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。
若为pts/0等,则表示由网络连接主机进程
WCHAN 当前进程是否正在進行,若为-表示正在進行;
START 該進程被觸發启动时间;
TIME 該进程實際使用CPU運行的时间;
COMMAND 命令的名称和参数;
STAT狀態位常見的狀態字符
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组
kill 杀掉某一进程
kill 2868 杀掉2868编号的进程
★kill -9 2868 强制杀死进程
-ps、grep和kill联合使用杀掉进程
例如要杀掉hello这个进程,使用下面这个命令就能直接实现
ps -ef |grep hello |awk ‘{print $2}’|xargs kill -9
这里是输出ps -ef |grep hello 结果的第二列的内容
然后通过xargs传递给kill -9,其实第二列内容就是hello的进程号!
附录:
1,awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
数据可以来自标准输入、一个或多个文件,或其它命令的输出。
它支持用户自定义函数和动态正则表达式等先进功能,
是linux/unix下的一个强大编程工具。
它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式是这样的,
它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。
awk分别代表其作者姓氏的第一个字母。
因为它的作者是三个人,
分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
2. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。
xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令.
网络管理
ifconfig:查看所有的网络设置
ifconfig 网卡名称 down :禁用网卡
ifconfig 网卡名称 up :启用网卡
ping:和window中一样
通过ctrl+c取消
netstat 查看网络端口。
netstat -an | grep 3306 查询3306端口占用情况
重启命令:
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
- 关机命令:
1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机
- 网络配置:
1、vi ifcfg-eth0
2、DEVICE = eth0
ONBOOT = yes
NM_CONTROLLED = yes
BOOTPROTO = static
IPADDR = 192.168.153.124
NETMASK = 255.255.255.128
GATRWAY = 192.168.153.126
DNS1 = 114.114.114.114
3、service network restart
systemctl restart network.service
shell bash 开发
$0 取得脚本名称(包含路径)
$n
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#
传递给脚本或函数的参数个数。
$*
传递给脚本或函数的所有参数。
$@
传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?
上个命令的退出状态,或函数的返回值。
$$
当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID 即pid
-lt 即 less than,小于,
shell脚本执行过程中 把第一个字符串作为脚本名称(或程序名称)处理,
第二、第三.都作为参数处理.
shell会将这些参数默认的赋给变量 1 2 3 .
所以当你echo $1 $2的时候看到的就是参数变量的值.
解答一下KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲的问题:这里#是计算输入参数的个数
@ 代 表 所 有 输 入 的 参 数 ; @ 代表所有输入的参数; @代表所有输入的参数;* 同上
- 基本结构化命令if-then语句格式:
if command
then
command
fi
bash shell的if语句会运行if后面的那个命令。
如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。
如果该命令的退出状态码是其他值,then部分的命令就不会被执行。
fi语句用来表示if-then语句到此结束。
#! /bin/bash
if pwd
then
echo "it worked one"
echo "可以执行多条命令"
fi
while [ -n “$1” ]
-n str, 字符串不为null,长度大于零
( ) 中 放 的 是 命 令 , 相 当 于 ‘ ‘ , 例 如 t o d a y d a t e = ( )中放的是命令,相当于` `, 例如todaydate= ()中放的是命令,相当于‘‘,例如todaydate=(date +%Y%m%d)意思是执行date命令,返回执行结果给变量todaydate,
也可以写为todaydate=date +%Y%m%d
;
${ }中放的是变量,例如echo $ { PATH}取PATH变量的值并打印,也可以不加括号比如$PATH。
在shell脚本中,exit -1 相当于jiava中的return 命令。会直接退出shell脚本,而不只是退出if判断和循环而已
case语句适用于需要进行多重分支的应用情况。
case分支语句的格式如下:
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列 ;;
esac
case语句结构特点如下:
case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
双分号“;;”表示命令序列结束。
匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。
while read line
循环中的重定向
或许你应该在其他脚本中见过下面的这种写法:
while read line
do
…
done < file
刚开始看到这种结构时,
很难理解< file是如何与循环配合在一起工作的。
因为循环内有很多条命令,而我们之前接触的重定向都是为一条命令工作的。
这里有一个原则,这个原则掌握好了,这个问题就很简单了:
对循环重定向的输入可适用于循环中的所有需要从标准输入读取数据的命令;
对循环重定向的输出可适用于循环中的所有需要向标准输出写入数据的命令;
当在循环内部显式地使用输入或输出重定向,内部重定向覆盖外部重定向。
上面的while结构中,read命令是需要从标准输入中读取数据的。
我们来详细了解一下read命令的用法吧,这个命令是shell脚本中使用频率最高的命令之一。
read
先来看一下read的命令语法:
read arg1 arg2 arg3 arg4 …
read是一个用来赋值的命令,它需要从标准输入获得值,
然后把这些值按位置依次赋值给变量arg1、arg2、arg3、arg4…,输入的时候以空格作为字段分隔符。
read的一个最大特性是可以在脚本中产生交互,因为它从标准输入读取数据。
read之所以很常用,
一是因为我们经常需要赋值,二是因为它可以交互,三是read能够一次给多个变量赋值。
$ read host ip name
linux 10.0.0.1 licong
$ echo $host $ip $name
linux 10.0.0.1 licong
$
可以看到,linux、10.0.0.1、licong分别被赋值给了变量host、ip和name。再看:
$ read host ip
linux 10.0.0.1 licong
$ echo $host
linux
$ echo $ip
10.0.0.1 licong
$
当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;
当输入字段比变量数少时,多余的变量将是空值,你可以自己试试。
现在我们再来看
while read line
do
…
done < file
read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;
然后循环处理file的第二行、第三行。。。一直到file的最后一行。
还记得while根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;
当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。
另一种也很常见的用法:
command | while read line
do
…
done
如果你还记得管道的用法,这个结构应该不难理解吧。
command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事。
awk
su sudo
列出所有端口
netstat -ntlp
lsof -i tcp:80
lsof -i:端口号
修改密码
passwd