Linux常用命令
最近一直在部署环境,所以都在和Linux打交道,再加上之前一直测试app使用adb时,掌握了相关的shell脚本
下面是Linux的一些基础命令和shell脚本。红色字体为我最近常用命令
文件浏览命令
格式: 命令 [option] file
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,tac 是 cat 的倒写
- nl 显示行号 -b a :空行也列出行号(类似 cat -n); -b t :非空行才列出行号(默认值);
- more 一页一页的显示文件内容 [空格键]下一页,[Backspace]上一页。 +n 从笫n行开始显示 -n 定义屏幕大小为n行 -c 清屏显示
- less 与 more 类似,但他可以往前翻页 [空格键] 滚动一行, [回车键] 滚动一页,[pagedown]: 下一页,[pageup]:上一页
- head 看头几行, -n 设定行数
- tail 看尾部几行 -f 循环读取 tail -100f catalina.out
- od 以二进制的方式读取文件内容
文件目录操作命令
1. mkdir -m:mode 设定权限 -p:parents 创建父级目录 mkdir -m 777 -p dir1/dir2
2. rm -r 递归 -f force 强行删除,忽略不存在的文件,系统不再提示 rm -rf dir
3. mv -b :覆盖前先备份 -f :force 强制覆盖 -i :询问是否覆盖 mv 1.txt 2.txt 可用于重命名
4. ls命令 列出目录中所有子目录和文件
-a, –all 列出目录下的所有文件,包括以.开头的隐含文件
-l 列出目录或文件的详细信息,包括文件的权限、所有者、文件大小等
-R, –recursive 递归查询 -r, –reverse 依相反次序排列 -t 以文件修改时间排序
-F 显示文件类型(File type),在列出的文件名后添加符号:/ 表明是一个目录;@ 表明是到其它文件的符号链接;* 表明是一个可执行文件。
ls -l s* 列出当前目录中所有以“s”开头的目录的详细内容
ls -F /opt/soft |grep /$ 只列出文件下的子目录
ls -ltr s* 列出目录下以s 开头的档案,愈新的排愈后面
ls | sed "s:^:`pwd`/:" 列出文件的绝对路径
5. basename 和 dirname
basename用于查看不含路径的文件名称
dirname则用于查看文件路径
6. tar 为linux的文件和目录创建档案
tar [主选项+辅选项] 文件或目录
主选项:【每条命令只能有一个主选项】
-c: --create 新建一个压缩文档,即打包 -x: --extract,--get 解压文件
-t: --list 查看压缩文档里的所有内容 -r:--append 向压缩文档里追加文件 -u:--update 更新原压缩包中的文件
辅助选项:
-z 支持gzip解压文件 -j 支持bzip2解压文件 -Z 支持compress解压文件
-v 显示操作过程 -f 指定压缩文件 -t 显示压缩文件的内容
-d 记录文件的差别 -W 确认压缩文件的正确性 -l 文件系统边界设置
-k 保留原有文件不覆盖 -m 保留文件不被覆盖
tar -cvf log.tar 1.log 2.log 仅打包,不压缩!
tar -tf log.tar 不解压的情况下查看
7. gzip
-a 使用ASCII文字模式 -d 解压文件 -l 列出压缩文件的详细信息 -r 递归处理 -v 显示指令执行过程
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
gzip * / gzip -dv * 压缩和解压缩文件或目录,若当前目录下有10个文件则生成10个.gz的压缩包,gzip没有打包功能!
8.touch 创建一个空文件
touch aaa.txt 创建一个空文件,文件名为aaa.txt
网络查看命令
1. ifconfig命令 获取或修改网络接口配置信息
格式:ifconfig [网络设备] [参数]
ifconfig 显示网络设备信息
ifconfig eth0 up/down 启动/关闭指定网卡
ifconfig eth0 add/del 33ffe:3240:800:1005::2/64 为网卡eth0配置/删除IPv6地址
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE 修改MAC地址
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255 配置IP地址,添加子掩码和广播地址
ifconfig eth0 mtu 1500 设置最大传输单元
ifconfig eth0 arp/-arp 启用/关闭ARP协议
2. ip命令 ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道。[替换ifconfig]
3. netstat命令 显示网络连接状态及其相关信息
-a 显示所有socket,包括正在监听的。 -c 每隔1秒就重新显示一遍,直到用户中断它。
-i 显示所有网络接口的信息 -n 以网络IP地址代替名称,显示出网络连接情形。
-t 显示TCP协议的连接情况 -u 显示UDP协议的连接情况。
-p 显示建立相关连接的程序名和PID。 -b 显示在创建每个连接或侦听端口时涉及的可执行程序。 -o显示与每个连接相关的所属进程 ID。
-e 显示以太网统计。此选项可以与 -s 选项结合使用。 -s 显示每个协议的统计。
-f 显示外部地址的完全限定域名(FQDN)。 -r显示核心路由表,格式同“route -e”
netstat -l 显示监听的套接口
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 统计机器中网络连接各个状态个数
netstat -ap | grep ssh 找出程序运行的端口
netstat -anpt | grep ':8080' 找出运行在指定端口的进程
4. ss命令 (Socket Statistics) 用来获取socket统计信息 [替换netstat]
ss可以显示和netstat类似的内容。但它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。ss比netstat快的主要原因是,netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。可以使用 time ss 和 time netstat -at 对比两个命令的效率。
ss常用参数和netstat类似,如-anp
5. ping命令 用来测试与目标主机的连通性
ping -c 10 -i 0.5 192.168.120.206 -c 指定次数 -i 间隔的秒数
ping -b 192.168.120.1 ping网关,可用route查看网关地址
6. telnet命令 远程登录
telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了
telnet <ip/hostname>
7. ssh命令 远程登录
8. rcp命令 (remote file copy) 远程文件拷贝
rcp [参数] [源文件] [目标文件] -r 递归 -x 为传送的所有数据打开DES加密 -p 试图保留源文件的修改时间和模式
rcp -r /home/root/dir hostname:/home/root/
9. scp命令 (secure copy) 远程文件拷贝
scp [参数] [原路径] [目标路径]
scp root@192.168.120.204:/home/root/test.tar.gz /home/root/ 从远处复制文件到本地目录, scp传输是加密的
10. route命令 显示和操作IP路由表
route -n 显示当前路由
route add/del default gw 192.168.120.240 添加/删除默认网关
route add/del -net 224.0.0.0 netmask 240.0.0.0 dev eth0 添加/删除网关/设置网关
route add/del -net 224.0.0.0 netmask 240.0.0.0 reject 添加/删除一条屏蔽的路由,目的地址为 224.x.x.x 将被拒绝
11. traceroute命令 检测发出数据包的主机到目标主机之间所经过的网关
-q: 设置向每个网关发送的探测包个数(缺省为3) -m 设置跳数
以下返回结果每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,其实就是3个数据包对映的网关响应时间。
[root@localhost ~]# traceroute www.baidu.com traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets 1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms 2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms 3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms 4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms 5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms 6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms 7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms 8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms 9 * * * 10 * * *
其他命令
1.ps (Process Status) 列出系统当前运行的进程。
-a 显示同一终端下的所有程序 -aux 显示所有包含其他使用者的行程 -f 显示程序间的关系 -u 指定用户
ps -ef|grep tomcat ps 与grep常用组合用法,查找特定进程
ps -aux --sort -pcpu | less 根据 CPU 使用率按降序排序
ps -aux --sort -pmem | less 根据内存使用率按降序排序
2.grep 文本搜索
ps -ef|grep -c svn 查找指定进程个数
cat test.txt | grep -nf key.txt 从文件中读取关键词对test.txt进行搜索, 且显示行号
grep 'linux' test1.txt test2.txt 从多个文件中查找关键词
cat test.txt |grep ^[^u] 输出非u开头的行内容
cat test.txt |grep hat$ 输出以hat结尾的行内容
3.make 编译命令
make是一个解释makefile中指令的命令工具,make可自动完成编译工作,而不用gcc命令单独编译每个源文件,并且可以只对程序员在上次编译后修改过的部分进行编译,提高了开发效率。Makefile文件描述了整个工程的编译、连接等规则。
Linux应用软件的安装包通常有三种:
a. tar包,如software.tar.gz。它是使用UNIX系统的打包工具tar打包的。
1)“tar –xvf 解压后的tar包”进行解包;
2) 阅读附带的INSTALL文件、README文件;
3) 执行“./configure”命令为编译做好准备;
4) 执行“make”命令进行软件编译;
5) 执行“make install”完成安装;
6) 执行“make clean”删除安装时产生的临时文件。
b. rpm包,如software.rpm。它是Redhat Linux提供的一种包封装格式。
rpm参数 : -i 安装软件 -t 测试安装,不是真的安装 -p 显示安装进度
-U 升级安装 -v 检测套件是否正确安装 -f 忽略任何错误
安装:rpm –ivh software.rpm 卸载: rpm –e software //软件名
c. dpkg包,如software.deb。它是Debain Linux提供的一种包封装格式。
安装:dpkg –i software-1.2.3-1.deb 卸载: dpkg –e software
RedHat 系列
1) 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参数”
2)包管理工具 yum 【yum库下载速度更快,建议使用】
3) 支持tar包
yum常用命令
1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.yum makecache:将服务器上的软件包信息在本地缓存,以提高 搜索安装软件的速度
4.仅安装指定的软件命令:yum install <package_name>
5.仅更新指定的软件命令:yum update <package_name>
6.列出所有可安裝的软件清单命令:yum list
7.删除软件包命令:yum remove <package_name>
8.查找软件包 命令:yum search <keyword>
9.清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
Debian系列
1) 常见的安装包格式 deb包,安装deb包的命令是“dpkg -参数”
2) 包管理工具 apt-get
3) 支持tar包
apt-get update 更新软件包,在修改/etc/apt/sources.list或者/etc/apt/preferences之后运行该命令 apt-get upgrade 更新已安装的软件包 apt-get dist-upgrade 升级系统 apt-get install packagename 安装软件包 apt-get remove packagename 卸载软件包(保留配置文件) apt-get –purge remove packagename 卸载软件包(删除配置文件) apt-get clean 删除包缓存中的所有deb //APT的底层包是dpkg, 而dpkg安装软件包时, 会将*.deb放在缓存中/var/cache/apt/archives/ apt-get autoclean 删除包缓存中的已经过期的deb
4.man,logout命令
man命令:man是manual的缩写,相当于Unix/Linux的联机Help,每个系统命令和调用都有非常详细的说明,绝大多数都是英文。如:man ls即是查看ls命令的使用说明,一般还有另一种方法用来查看帮助,如:ls –help,这种方式绝大多数命令都支持。
logout命令:该命令用于退出系统,与login命令对应。
5、du、df命令
du命令可以显示目前的目录所占用的磁盘空间,df命令可以显示目前磁盘剩余空间。
如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况。
du -hs 指定目录 查看指定目录的总大小
du -hs ./* 查看当前目录下的所有文件夹和文件的大小
这两个命令都支持-k,-m和-h参数,-k和-m类似,都表示显示单位,一个是k字节一个是兆字节,-h则表示human-readable,即友好可读的显示方式。
10、echo命令
echo命令的使用频率不少于ls和cat,尤其是在shell脚本编写中。
语法:echo [-ne][字符串]
功能:echo会将输入的字符串送往标准输出,输出的字符串间以空白字符隔开, 并在最后加上换行符。
参数:
-n 显示字串时在最后自动换行
-e 支持以下格式的转义字符, -E 不支持以下格式的转义字符
/a 发出警告声;
/b 删除前一个字符;
/c 最后不加上换行符号;
/f 换行但光标仍旧停留在原来的位置;
/n 换行且光标移至行首;
/r 光标移至行首,但不换行;
/t 插入tab;
/v 与/f相同;
// 插入/字符;
/nnn 插入nnn(八进制)所代表的ASCII字符;
11、管道和xargs
管道:利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。
注意:管道左边命令的输入作为管道右边命令的输入(命令的输入是一定的),不是参数,并不是所有命令都支持管道
例子:ls | grep a 查看当前目录下名称包含a的文件或文件夹
xargs:
大多数 Linux 命令都会产生输出:文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件、ascii 文本等);你能处理输出,使其仅显示文件名,目前你希望将这些名称传递给 ls -l命令以查看时间戳记。xargs 命令就是用来完成此项工作的。
注意:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去
例子:
1、在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
2、当一个目录下文件太多时,直接用rm * 命令会包参数过长,用如下方法可以全部删除
$ls | xargs rm