余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Linux常用命令知识笔记(linux常用命令csdn)

xiyangw 2022-11-25 11:50 12 浏览 0 评论

0.mtime

find path -mtime 1 -exec rm -f {} \; #查找过去一天的内容进行删除

1. more或者less如何显示颜色


grep text *.text --color=always | less -R


2. man命令使用


  1. 查找命令的使用手册


man grep


  1. 查找相关的命令


man -k grep


3. 链接文件


  • 符号链接


ln -s src desc  
# 得到的两个文件是完全不一样的,内容并不相同,可以通过文件的inode编号区别。


  • 硬链接


ln src desc
# 得到的两个文件是完全一样的,当修改其中一个文件时,另一个文件也会被修改;同时需要注意的是链接计数显示这两个文件都有2个链接。


4. 查看文件或者目录的inode


文件或目录的inode编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。


ls -i a.txt


5.文件相关


5.1 查看文件类型


file 1.txt


5.2 对搜索到的文件执行命令


find -exec
# find -type f -name '*.log.*' -exec rm -f {} \;  对'*.log.*'类型的文件进行删除

{} 符号代表找到的文件, 并用\对分号(;)进行转义以作为命令的结束


5.3 将搜索结果打印文件


find -fprint 
# find -type f -name '*.log.*' -fprint a.txt  将结果输出到文件


6. 进程管理


  1. 查看系统上运行的所有进程


ps -ef 
==out C: cpu利用率 STIME:进程启动时的系统时间 TIME:运行进程需要的累计CPU时间 CMD: 启动程序的名称
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2019 ?        02:18:39 /usr/lib/systemd/systemd --system --deserialize 18
root         2     0  0  2019 ?        00:00:10 [kthreadd]


  1. 长格式输出


ps -efl
===out  F: 内核分配给进程的系统标记 S: 进程的状态(O:正在运行;S:休眠;R:可运行,正等待运行;Z:僵化,进程已结束,但父进程不存在;T: 停止) PRI: 进程的优先级,数字越大,优先级越低。
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
1 S root         2     0  0  80   0 -     0 kthrea  2019 ?        00:00:10 [kthreadd]
1 S root         3     2  0  80   0 -     0 smpboo  2019 ?        00:33:11 [ksoftirqd/0]


  1. 实时显示进程信息


top
==out 第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载load average(近1min,5min,15min)。
top - 18:00:53 up 609 days,  6:35,  5 users,  load average: 0.11, 0.42, 0.32  
Tasks: 338 total,   1 running, 337 sleeping,   0 stopped,   0 zombie #进程概要
%Cpu(s):  1.9 us,  1.0 sy,  0.0 ni, 97.0 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st #CPU概要
KiB Mem :  8008856 total,   275988 free,  6336084 used,  1396784 buff/cache     # 系统内存状态
KiB Swap:        0 total,        0 free,        0 used.  1165124 avail Mem

#按照%CPU值对进程排序, q键退出top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
22710 root      20   0  114656  62616   2152 S   3.7  0.8   3493:31 hids_agent
 8049 root       2 -18 2118076  85192  57200 S   1.7  1.1   8566:37 service_mesh_ma


  1. 进程信号


在Linux中,进程之间通过信号来通信。进程的信号就是预定义好的一个消息,进程能识别 它并决定忽略还是作出反应。


  • 查看Linux进程信号


kill -l
===out
 1) SIGHUP	     2) SIGINT	     3) SIGQUIT	     4) SIGILL	     5) SIGTRAP
 2) SIGABRT	     7) SIGBUS	     8) SIGFPE	     9) SIGKILL	    10) SIGUSR1
1)  SIGSEGV 	  12) SIGUSR2	    13) SIGPIPE	    14) SIGALRM	    15) SIGTERM
2)  SIGSTKFLT	  17) SIGCHLD	    18) SIGCONT	    19) SIGSTOP	    20) SIGTSTP
3)  SIGTTIN	    22) SIGTTOU	    23) SIGURG	    24) SIGXCPU	    25) SIGXFSZ
4)  SIGVTALRM	  27) SIGPROF	    28) SIGWINCH	  29) SIGIO	      30) SIGPWR
5)  SIGSYS	    34) SIGRTMIN	  35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
6)  SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
7)  SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
8)  SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
9)  SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
10) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
11) SIGRTMAX-1	64) SIGRTMAX


  • 发送进程信号


kill 进程pid #默认发送TERM信号,告诉进程尽可能停止运行
kill -s signal pid #kill -s KILL 19331 强制进程根据信号做出反应
kill -signal pid # kil -9 19331
killall http* #结束所有以http开头的进程


7. 磁盘管理


  1. 查看磁盘的使用情况


df -h
==out
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G  9.6G   38G  21% /
devtmpfs        3.9G     0  3.9G   0% /dev


  1. 查看系统挂载设备列表


mount
==out
sysfs on /sys type sysfs (rw,relatime)
proc on /proc type proc (rw,relatime)


  1. 查看某一特定目录的磁盘使用情况


du -h  --max-depth=1 
# -c:显示所有已列出文件总的大小
  -s:显示每个输出参数的总计
  -h:按用户易读的格式输出大小
  --max-depth : 指定统计的目录深度


8. 后台命令


  1. 查看当前运行在后台模式的进程


jobs -l
fg n #将后台进程调回前台执行或者前台模式重启停止的任务
bg n #将前台程序调到后台执行或者后台模式重启停止的任务


  1. 将程序后台执行


python a.py &  #& 表示后台执行


  1. 查找命令位置


which mysql
type mysql
whereis hosts #查找文件位置


9.环境变量


  1. 全局环境变量


env或printenv #查看所有全局环境变量
printenv HOME #查看个别环境变量的值


  1. 局部环境变量


set #显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量、用户自定义变量


  1. 设置全局环境变量


GO111MODULE=on
export GO111MODULE
#修改子shell中全局环境变量并不会影响到父shell中该变量的值;子shell甚至使用export命令也无法改变父shell中全局环境变量的值。


  1. 删除环境变量


unset GO111MODULE
#如果在子进程中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中依然可用。


如果要用到变量,使用$。如果要操作变量,不使用$。这条规则的一个例外就是使用printenv显示某个变量的值。


  1. 环境变量持久化
    在命令行定义的环境变量并不是持久的,会随着shell的退出而失效。可以把个人自定义环境变量放在用户目录下的.bash_profile文件中。执行source .bash_profile 使其生效。


10. 使用变量


shell脚本中最有用的特性就是从命令输出中提取信息,并赋值给变量。有两种方法可以将命令输出赋给变量,然后就可以在脚本中随意使用了。


1. ``   #  `date`
2. $()  #		$(date)


#!/bin/zsh
a=`date +%Y.%m.%d`
b=`date +%A`
echo "今天是$a号星期$b"
echo $(dirname $0)


11. 重定向输入输出


输出重定向>,输入重定向<,输出数据追加>>,内联输入重定向<<


# 按照既有格式输出cat数据
cat << EOF
你和
ad
123
EOF
#必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。


12. 数学运算


1. expr 1 + 5
2. a=$[1 + 5];echo $a
3. decimal=$(echo "scale=2;3*1.8"|bc);echo $decimal #浮点运算 ,使用bc计算器,scale表示保留到小数点位


13. 特殊参数变量

变量

含义

$#

命令行参数的个数

${!#}

命令行参数的最后一个值

$*

保存所有命令行参数(作为整体)

$@

保存所有命令行参数(作为每一个个体)

$?

函数的退出状态码,成功执行的命令状态码为0,未成功的为一个正数值


本地变量:用户私有变量,只有本用户可以使用,保存在家目录下的.bash_profile、.bashrc文件中


全局变量:所有用户都可以使用,保存在/etc/profile、/etc/bashrc文件中


用户自定义变量:用户自定义,比如脚本中的变量


14. 结构化命令


  1. if-then语句


if command #如果command退出状态码为0,则执行then下的命令,否则不执行then下的命令
then
   commands
fi
===================
if command;then
   commands
 fi
 
==== 高级特性
1. 用于数学表达式的双括号(( expersion ))
if [ -1 -eq 2 ];then
    echo 'True'
else
    if (( 1*5>1 ));then
        echo '1*5>10'
    fi
    echo 'False'
fi

2. 用于高级字符串处理的双方括号 [[ expersion ]]


  1. if-then-else语句


if command
then
   commands
else
    commands
fi
================
if command
then
   commands 
elif command 
then
    commands 
 fi


  1. test测试命令


if test condition
then
   commands
fi
============
if [ condition ] #注意方括号的空格。 复合测试条件 [ condition1 ] && [ condition2 ]
then
   commands
fi


  1. case命令


read num
case $num in 
    1) 
        echo '你输入了1'
        exit $?
        ;; #命令结束标记
    2)
        echo '你输入了2'
        ;;
    3|4)
        echo '你输入了3或者4'
        ;;
    *)  
        echo '请重新输入'
        ;;
esac


  1. for命令


rray=(1 2 3 4 5 6)
for var in ${array[@]};do
    echo $var
done
===c语言风格的for命令
for (( a=0;a<10;a++ ));do
    echo $a
done>$(cd $(dirname $0); pwd)/04.txt #输出到文件,不打印到控制台


  1. while命令


a=1
while (( $a<4 ));do
    echo $a
    # a=a+1 报错
    let "a++" #a=$[ $a+1 ]
done
=== until 命令和while命令的工作方式完全相反,until指定当测试命令的退出状态码不为0,才会执行循环中列出的命令,当退出状态码为0,就结束循环。


  1. 控制循环


break #跳出内部一层循环
break n #n指定了要跳出的循环层级
continue #提前终止某次循环


15. 处理用户输入


  1. 获取不包含路径的脚本名


name=$(basename $0);echo $name


  1. 移动变量


shift #在使用shift命令时,默认情况下它会将每个参数变量向左移动一个位置。所以,变量$3的值会移到$2中,变量$2的值会移到$1中,而变量$1的值则会被删除(注意,变量$0的值,也 就是程序名,不会改变)。
shift n #给shift命令提供一个参数,指明要移动的位置数就行了。


#06.sh
count=1
while [ $# -ne 0 ]; do
    echo "paramter #$count = $1"
    count=$[ $count + 1 ]
    shift
done
===out
sh 06.sh 1 2 3 4
paramter #1 = 1
paramter #2 = 2
paramter #3 = 3
paramter #4 = 4


  1. 获取用户输入


read name #从键盘或文件描述符读取数据,放进变量name


echo -n "请输入数据:" #-n 不换行
read name
echo "hello $name"

# ===== 通过read指定提示符
read -p "请输入数据:" name 
echo "hello read $name"

# ==== 接收多个变量
read -p "请输入数据:" name age
echo "hello read $name, $age"

# ==== 不指定接收值,read接收的数据放在特殊变量REPLY中
read -p "请输入数据:"  
echo "hello read $REPLY"


16. 文件描述符

文件描述符

缩写

描述

0

STDIN

标准输入

1

STDOUT

标准输出

2

STDERR

标准错误


  • 只重定向错误


ls -al badfile 2> test4 #将该文 件描述符值放在重定向符号前。该值必须紧紧地放在重定向符号前,否则不会工作


  • 重定向错误和数据


ls -al test test2 test3 badtest 2> test6 1> test7 #如果想重定向错误和正常输出,必须用两个重定向符号,分别输出到不同的文件
ls -al test test2 test3 badtest &> test7          # &> 将STDERR和STDOUT的输出重定向到同一个输出文件


17. 控制脚本


  1. 后台模式运行脚本


./test1.sh &  #如果终端退出,后台进程也会随之推出


  1. 非控制台下运行脚本


nohup ./test1.sh &  #nohup命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP信号。这会在退出终端会话时阻止进程退出


18. 函数


  1. 局部变量与全局变量


# 默认情况下,在脚本中定义的任何变量都是全局变量
function func1 () { #变量在函数内部被赋给了新值,那么在脚本中引用该变量时,新值依然有效
    temp=$[ $value +5 ]
    # local temp=$[ $value +5 ] 局部变量保证了变量只局限于函数中,只在函数内部有效
    result=$[ $temp*2 ]
}

temp=4
value=6

func1

echo "The result is $result"
if [ $temp -gt $value ];then
    echo "temp is larger"
else 
    echo "temp is smaller"
fi


  1. 脚本作为库使用


#使用 . 号来引用01.sh 文件,注意点号(.)和文件名中间有一空格。source 的别名,点操作符
. ./01.sh

#使用source来引用文件
source ./01.sh
function func1(){
    echo '第一个shell函数'
}
func1


19. sed流编辑器


  1. 命令行使用编辑器命令


echo "this is a test" | sed "s/test/big test/g"  #this is a big test


sed编辑器并不会修改文本文件的数据,它只会将修改后的数据发送到STDOUT,原始数据并不会被修改。


命令基本格式:sed options script file


  1. 命令行使用多个编辑器命令


sed -e 's/brown/green/; s/dog/cat/' data1.txt #将brown替换为green,dog替换为cat。命令之间用分号隔开,且命令末尾和分号之间不能有空格


  1. 从文件中读取编辑器命令


#script.sed
s/brown/green/
s/fox/elephant/
s/dog/cat/

=====
sed -f script.sed data1.txt


20. awk程序


akw和gawk是一样的,在Linux中awk链接指向gawk,awk程序让流编辑器上了一个新台阶,它提供了一种编程语言而不是编辑器命令。awk的强大之处在于脚本,可以写脚本来读取文本行的数据,然后处理并显示数据,创建任何类型的输出报告。


默认情况下,awk会从输入中读取一行文本,然后针对该行的数据执行程序脚本。


命令的基本格式:awk options program file


  1. 从命令行读取脚本


awk '{print 123}'  #awk脚本用{}来定义,若脚本是单个文本字符串,需要加单引号


  1. 使用数据字段变量


#data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.
====== $0代表整个文本行,$1代表文本行的第一个数据字段,以此类推。默认字段分隔符为空格
awk '{print $1}' data2.txt     
One
Two
Three


  1. 指定字段分隔符


awk -F: '{print $1}' /etc/passwd #:作为分隔符


  1. 在程序脚本中使用多个命令


echo "My name is Rich" | awk '{$4="Christine"; print $0}' #命令之间使用分号分割
===out==
My name is Christine


  1. 从文件中读取awk程序


#script.awk
{print $1 "'s home directory is " $6}
===use===
awk -F: -f script.awk /etc/passwd


  1. 关键字BEGIN和END


1. 数据处理前执行脚本
awk 'BEGIN {print "Hello World!"}' #在显示了文本后,它会快速退出,不等待任何数据
2. 在执行了BEGIN脚本后,第二段脚本用来处理数据
awk 'BEGIN {print "Hello World!"} {print 123}'
3. 数据处理后运行脚本(分别定义了三个脚本)
awk 'BEGIN {print "Hello World!"} {print 123} END{print "end"}'


21. xargs命令


xargs命令的作用是将标准输入或者管道数据转为命令行参数。它能够捕获一个命令的输出,然后传递给另外一个命令。


  1. 管道传参


echo "one two three" | xargs mkdir   #等价于mkdir one two three xargs将换行符和空格作为分隔符
echo -e "a\tb\tc" | xargs -d "\t" echo # a b c xargs将换行符和空格作为分隔符,-d参数可以更改分隔符


  1. 单独使用


xargs #等价于 xargs echo


  1. grep命令
  2. 筛选数据,并去重


#uniq 检查重复出现的列,sort 进行排序
grep Trace rpc_server_59*.log | awk -F 'input' '{print $2}'| awk '{print $1}'|sort|uniq -c| sort -n


22. Vim技巧


  1. 批量注释和取消注释


#多行注释
:起始行号,结束行号s/^/注释符/g #:121,129s/^/#/g
#取消注释
:起始行号,结束行号s/^注释符//g


  1. 光标快速移动到最后一行


G


  1. 光标移动n行


nG


  1. 光标移动到第一行


gg


  1. 删除光标所在行


dd #ndd 删除向下n行


  1. 复原前一个动作


u


参考


  1. Linux命令行与shell脚本编程大全(3rd)
  2. shell教程|runoob
  3. 高级Bash脚本编程指南

相关推荐

Vue的框架(了解)

前端MVC设计模式MVC设计模式,其实就是将前端实现某个业务的所有代码划分为三部分Model:模型,指数据模型,这个数据一般来自于服务器View:视图,指页面标签内容Controller:控制...

Vue.js实战 第五章练习一

练习要求:在原有表格基础上,新增一项是否选中该商品的功能,总价变为只计算选中商品的总价,同时提供一个全选的按钮。实现思路:按照vue数据和dom元素双向绑定的特性,定义allCheckStatus变量...

Vue基础到进阶教程之class和style绑定

关于class和style我们并不陌生,这个在学习css的时候就是家常便饭了,操作元素的class列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用v-bind处理它们,...

深入Vue 必学高阶组件 HOC「进阶篇」

作者:ssh转发连接:https://mp.weixin.qq.com/s/seKoLSIMtTd1sU4uDrgZCA前言高阶组件这个概念在React中一度非常流行,但是在Vue的社区里讨论...

周末大礼包,23道高质量中级前端面试题。金九银十,建议收藏

这套面试题考察的内容比较常见,涉及到JavaScript、ES6、CSS、Vue、简单算法,浏览器相关知识等。题目列表1.JavaScript的数据类型有哪些2.什么是同源策略3.跨域的方法...

vue3.0-摒弃Object.defineProperty,基于 Proxy 的观察者机制

写在前面:11月16日早上,Vue.js的作者尤大大在VueToronto的主题演讲中预演了Vue.js3.0的一些新特性,其中一个很重要的改变就是Vue3将使用ES6的Proxy作...

程序员都必掌握的前端教程之VUE基础教程(七)

阅读本文约需要10分钟,您可以先关注我们,避免下次无法找到。本篇文章成哥继续带大家来学习前端VUE教程,今天主要讲解VUE的表单处理等知识点。下面我们就一起来学习该块内容吧!01简介在日常开发中,我...

web前端开之网站搭建框架之vue详解

网站搭建框架之vueVue是web前端快速搭建网站的框架之一。它与jQuery有所不同,是以数据驱动web界面(以操作数据改变页面,而jQuery是以操作节点来改变页面),同时,vue还实现了数据的双...

vue3.0尝鲜-基于 Proxy 的观察者机制探索

Vue.js的作者尤大大在VueToronto的主题演讲中预演了Vue.js3.0的一些新特性,其中一个很重要的改变就是Vue3将使用ES6的Proxy作为其观察者机制,取代之前使用...

TypeScript 设计模式之观察者模式

一、模式介绍1.背景介绍在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种「对象与对象之间的依赖关系」,一个对象发生改变时将「自动通知其他...

vue面试3

1.单页面应用与多页面应用的去别2.简述一下Sass、Less,且说明区别?他们是动态的样式语言,是CSS预处理器,CSS上的一种抽象层。他们是一种特殊的语法/语言而编译成CSS。变量符不一样,les...

VUE v-bind 数据绑定

动态的绑定一个或多个attribute,也可以是组件的prop。缩写::或者.(当使用.prop修饰符)期望:any(带参数)|Object(不带参数)参数:attrOrP...

vue初学习之自定义选择框实现

v-model简单介绍在使用vue的过程中会经常用到input和textarea这类表单元素,vue对于这些元素的数据绑定和我们以前经常用的jQuery有些区别。vue使用v-model实现这些标签...

Vue实现拖拽穿梭框功能四种方式

一、使用原生js实现拖拽打开视频讲解更加详细Vue实现拖拽穿梭框功能的四种方式_哔哩哔哩_bilibili<html><head><meta...

Vue3.x setup 语法糖实现props双向绑定

1.背景为了封装一下Element-Plus的分页插件,需要实现父子组件之间的传值。2.父组件<scriptsetuplang="ts">letqueryPa...

取消回复欢迎 发表评论: