前言
Linux和windows相比,很多管控都需要用命令来操作。windows以直观的可视化的方式操作,特别适合在桌面端PC上操作执行相应的软件。
而Linux命令行方式的操作,特别是在服务器端编程、管理、运维方面,更加简单、短小、精悍。短短一行组合命令,即可完成在windows需要各种加工、整合的复杂高效的功能操作。
1.进程管理
w 显示当前在线用户情况
my_adm pts/0 111.111.111.111 三15 24:58 2:51 0.02s sshd: my_admin [priv]root pts/3 111.111.111.112 13:15 3:47m 0.35s 0.35s -bashmy_adm pts/5 111.111.111.113 15:14 2.00s 0.54s 0.02s sshd: my_admin [priv]登录后复制
pkill -kill -t pts/?? 杀掉指定名字的进程,如上述的pts/5
传送门:Linux中Kill进程的N种方法
2.系统信息
arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验内存使用 cat /proc/swaps 显示哪些swap被使用 cat /proc/version 显示内核的版本 cat /proc/net/dev 显示网络适配器及统计 cat /proc/mounts 显示已加载的文件系统 lspci -tv 罗列 PCI 设备 lsusb -tv 显示 USB 设备 date 显示系统日期 ctime=`date +%Y-%m-%dT%k:%M:%S` #格式化时间,如2018-01-13T11:09:19, 注意%k 与 %H的区别,前者返回9,后者返回09.YESTERDAY=`date +%Y-%m-%d -d "-1 days"` 获取昨日日期cal 2007 显示2007年的日历表 date 041217002007.00 设置日期和时间 - 月日时分年.秒 clock -w 将时间修改保存到 BIOS登录后复制
查询网关地址(如将centos服务器网络获取类型由dhcp切换为static时,需要获取到ip及网关信息进行固化配置时会用到,如本地ip为10.34.0.123,则通过如下命令查询到网关为第一个3.254):
[root@file-server ~]# netstat -rnKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface0.0.0.0 10.34.3.254 0.0.0.0 UG 0 0 0 enp3g010.34.0.0 0.0.0.0 255.255.252.0 U 0 0 0 enp3g0192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0登录后复制
CentOS / RedHat 系列,查看操作系统信息(如果没有lsb_release命令, 使用"yum install redhat-lsb"安装):
[root@server-test online]# lsb_release -aLSB Version: :core-4.1-amd64:core-4.1-noarchDistributor ID: CentOSDescription: CentOS Linux release 7.5.1804 (Core) Release: 7.5.1804Codename: Core登录后复制
3.关机 (系统的关机、重启以及登出 )
shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定时间关闭系统 shutdown -c 取消按预定时间关闭系统 shutdown -r now 重启(1) reboot 重启(2) logout 注销登录后复制
4.文件和目录
cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ls -a 显示隐藏文件 ls *[0-9]* 显示包含数字的文件名和目录名 tree 显示文件和目录由根目录开始的树形结构(1) lstree 显示文件和目录由根目录开始的树形结构(2) mkdir dir1 创建一个叫做 'dir1' 的目录' mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 rm -f file1 删除一个叫做 'file1' 的文件' rmdir dir1 删除一个叫做 'dir1' 的目录' rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 rm -rf dir1 dir2 同时删除两个目录及它们的内容 mv dir1 new_dir 重命名/移动 一个目录 cp file1 file2 复制一个文件 cp dir0/g' example.txt 用单个零替换多个零sed -i '3i helloword' test.txt 在test.txt文件的第三行插入‘helloword’字符串登录后复制
“sed按指定字符串删除”专题:
用sed删除匹配到字符串的行:
语法:sed-i'/关键字符/d'文件名
举例1:匹配"\etc\install.sh"
sed -i '/\/etc\/install.sh/d' 1.txt登录后复制
-i 表示操作在源文件上生效.否则操作内存中数据,并不写入文件中. 在分号内的/d表示删除匹配的行。
举例2:删除以a开头的行
sed -i '/^a.*/d' tmp.txt登录后复制
^a表示开头是a, .*表示后跟任意字符串
Example-1: 使用sed进行文本批量替换
#!/bin/bash ddl_file_path=/c/Users/user/Downloads/sqoop_data/hive_2_mysql ls $ddl_file_path | while read f;doecho "--------->"$ddl_file_path/$f ## Template#sed -i 's///g' $ddl_file_path/$f#sed -i "s///g" $ddl_file_path/$f sed -i 's/111.111.111.111:3306/222.222.222.222:3307/g' $ddl_file_path/$fsed -i "s/'password_1'/'password_2'/g" $ddl_file_path/$f done # echo -e "=========>\n\t Files contains keyword "/WARN:" in path $ddl_file_path are deleted!!!"登录后复制
#!/bin/bash set -x ## Template#sed -i 's///g' $ddl_file_path/$f#sed -i "s///g" $ddl_file_path/$f ## Func 1 - 实现在所有文件的第四行、第五行插入指定文本 ddl_file_path=/e/迅雷下载/user_data_after ls $ddl_file_path | while read f;do # 如果文件不是文件夹类型,才允许插入操作 if [ ! -d $f ];then echo "--------->"$ddl_file_path/$f sed -i '4i retries=10' $ddl_file_path/$f sed -i '5i retry.backoff=3' $ddl_file_path/$f fidone ## Func 2 - 如果文件夹不存在,则创建;反之提示文件已存在 if [ ! -d "beijing" ];then mkdir beijingelse echo "File already exists"fi登录后复制
文件类型的参数判别大全:
shell脚本判断文件类型 shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var/log/httpd/access.log" # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 if [ ! -x "$myPath"]; then mkdir "$myPath" fi # 这里的-d 参数判断$myPath是否存在 if [ ! -d "$myPath"]; then mkdir "$myPath" fi # 这里的-f参数判断$myFile是否存在 if [ ! -f "$myFile" ]; then touch "$myFile" fi # 其他参数还有-n,-n是判断一个变量是否是否有值 if [ ! -n "$myVar" ]; then echo "$myVar is empty" exit 0 fi # 两个变量判断是否相等 if [ "$var1" = "$var2" ]; then echo '$var1 eq $var2' else echo '$var1 not eq $var2' fi登录后复制
文件的判别逻辑大全:
-a file exists. -b file exists and is a block special file. -c file exists and is a character special file. -d file exists and is a directory. -e file exists (just the same as -a). -f file exists and is a regular file. -g file exists and has its setgid(2) bit set. -G file exists and has the same group ID as this process. -k file exists and has its sticky bit set. -L file exists and is a symbolic link. -n string length is not zero. -o Named option is set on. -O file exists and is owned by the user ID of this process. -p file exists and is a first in, first out (FIFO) special file or named pipe. -r file exists and is readable by the current process. -s file exists and has a size greater than zero. -S file exists and is a socket. -t file descriptor number fildes is open and associated with a terminal device. -u file exists and has its setuid(2) bit set. -w file exists and is writable by the current process. -x file exists and is executable by the current process. -z string length is zero. 注意-s 和 -f 参数的区别登录后复制
cat -n file1 标示文件的行数 cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行 echo a b c | awk '{print $1}' 查看一行第一栏 echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏 paste file1 file2 合并两个文件或两栏的内容 paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分 sort file1 file2 排序两个文件的内容 sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) sort file1 file2 | uniq -u 删除交集,留下其他的行 sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分登录后复制
综合案例:
①:本机tcp各种状态数统计
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'CLOSE_WAIT 2ESTABLISHED 276SYN_SENT 2TIME_WAIT 63270登录后复制
awk 'BEGIN { sum = 0; for (i = 0; i < 20; ++i) { sum += i; if (sum > 50) exit(10); else print "Sum =", sum } }'
②:使用cut提取文本字符串:
按“:”分割,提取/etc/passwd中第1,3,4,5列数据,按原分隔符":"进行拼接。
[hdfs@cdh01 test]$ head -n 5 /etc/passwd | cut -d : -f 1,3-5root:0:0:rootbin:1:1:bindaemon:2:2:daemonadm:3:4:admxixi:4:7:xixi登录后复制
③:使用uniq进行滤重
cut的具体用法,如下:
A).去除重复行
sort target_file | uniq登录后复制
B).查找非重复行
sort target_file | uniq -u登录后复制
C).查找重复行
sort target_file | uniq -d登录后复制
D).统计每一个文件出现的次数
sort target_file | uniq -c登录后复制
④:排序
sort linux下的排序工具
参数说明:
-r 降序排列
-u 去重
-n 以数字大小排序(默认是首字母排序)
-t 指定分隔符 这里我们指定'|'为分隔符
-k 指定分隔后的第几位进行排序 这里我们指定第2位
任务:report.txt文件里有以下内容:记录了一些方法的执行时间,要求按执行时间降序排列.
命令:sort -run -k 2 -t '|' report.txt
1 void com.dustpan.zeus.core.service.MergeService.startService(int)|2 2 void com.dustpan.zeus.core.service.InitShopDateService.startService(int)|1 3 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|475 4 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|96 5 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|1013 6 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|184 7 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|729 8 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|14 9 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|39410 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|9011 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|56912 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|79613 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|164814 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|8215 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|101816 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|1417 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|93718 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|1719 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|60120 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|5221 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|508122 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|38823 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|19824 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|1125 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|20326 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|1127 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|24128 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|1329 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|17630 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|1231 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|20632 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|3333 boolean com.dustpan.zeus.core.service.MergeService.executeGePrintSyncTask()|24234 boolean com.dustpan.zeus.core.service.InitShopDateService.executeInitShopTask()|19登录后复制
案例一、找出本文件夹中包含my_test_calendar关键字的所有文件(含全路径+文件名),并滤重。
查询hive_sh目录下,包含搜索关键字'my_test_calendar'的文本出现的文件及关键字所在的行,将文件(文件路径+文件名) 字段提取出来,并做滤重处理。
[hdfs@nn1 hive_sh]$ find . -type f | xargs grep -rn 'my_test_calendar' | cut -d : -f 1 | uniq登录后复制
案例二、查找所有出现指定文本的文件并滤重(进阶版)
脚本说明:
遍历 hive_tables.txt 文件中的所有表(如 hive_table_1),查找其在指定目录/data/program/hive_sh/下的文件中,是否使用到。如果查到重复出现该文本的文件,做滤重处理。
cat query_table_usage_in_hive.sh
#!/bin/bash while read tbldo echo ------------------Handle table: $tbl--------------find /data/program/hive_sh/ -type f | xargs grep -rn $tbl | cut -d : -f 1 | uniq > ./output/${tbl}_result.txt done < hive_tables.txt登录后复制
案例三、查找内存耗用top3的app
ps auxw | head -1;ps auxw|sort -rn -k4|head -5登录后复制
以上就是最全Linux命令大全,建议收藏!!!的详细内容,更多请关注本网内其它相关文章!