Linux基础

166 阅读5分钟

Linux命令

查看CPU个数:

lscpu

查看CPU进程数、核数:

cat /proc/cpuinfo

查看内存总量:

free -m -h

查看系统内核版本:

uname -a

观察系统动态进程的命令:

top

另外: 读,写,执行 r , w, x (r=4,w=2,x=1)

找出当前目录以及其子目录所有扩展名为”.txt”的文件,那么命令是:

find -name “*.txt”

Linux 实战命令

touch `date +%F`_file.txt
du --max-depth=2 |sort -rn

awk [-F field-separator] `commands` input-files 
awk -F :  '{print $1}' /etc/passwd

awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域, 0则表示所有域 , 1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键"。

2.$0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数。 3. []是通配符,匹配其中内的任意一个元素即可。 4. wc可以查询文件的 行数--- 单词数---字节数。

du

查看文件夹的大小

du -sh

s:summarize

sort

在cat的基础上,对文件的内容进行排序

cat和more

cat (concatenate) 查看文件的全部内容,以滚屏的方式展示出来。 more 展示一部分内容,其他部分用省略的方式展示。

所以,cat适合来查看文本短的文件,more适用于长文本的查看。

cat参数,

cat -b 123.txt  

输出行编号

more功能, 空格 显示下一屏 b 显示上一屏 q 退出

grep -n 显示行号 -i 忽略大小写

grep -in  [搜索词] 123.txt

> 重定向

history > a

把命令行的历史写入到a文件中。

>> 追加定向

history >> a

把命令行的历史写入到a文件中,不会删除之前的内容。

echo比touch好:

echo hello > a 

创建的同时,可以写入内容。

grep grep可以结合两个命令,一个命令的结果,作为后一个命令的输入。 比如:

ls -lha|more

用more的方式展示ls -lha的内容。 又比如:

ls -lha |grep Do

展示包含Do的文件。

ifconfig | grep inet

查看ip地址

ps process status ps 默认只显示当前用户通过终端启用的程序 ps aux 可显示详细信息

top 动态显示运行中的进程并排序。 q 退出

kill kill [进程号PID] 终止进程 kill -9 [进程号PID] 强行终止进程

find

fine [路径] -name "带通配符需搜索文件"
fine Desktop/ -name "带通配符需搜索文件"

ln 软连接,类似Windows下的快捷方式。

tree
mv 01.py demo/b/c
ln  -s  demo/b/c/01.py  01_xiangdui
ls -l
ln  -s  /home/python/Desktop/demo/b/c/01.py 01_juedui   
ls -l

软链接要使用绝对路径。

硬连接:

ln /home/python/Desktop/demo/b/c/01.py  01_hard

在这里插入图片描述

rm b/c/01.py

在这里插入图片描述

在这里插入图片描述 在Linux中,文件名 和 文件数据 是分开储存的。 在这里插入图片描述 软链接中,保存的是连接文件的路径,通过软连接可以访问数据,但是一旦文件被删除,软连接就失效了。 硬链接,是文件的另外一个名字,通过硬连接可以访问数据,要想删除有硬连接的文件,必须把文件和硬连接全部删除。

Linux打包压缩

Windows常用rar

Mac 常用 zip

Linux 用tar和gzip , tar为打包, gz为压缩

打包:

tar cvf [压缩名.tar] [源文件]

解包:

tar xvf [源文件.tar]

压缩:

tar zcvf [压缩名.tar] [源文件]

解压:

tar zxvf [源文件.tar]

Shell基础

20220224:

  • $( ) 和 `都是替换文件
  • awk awk是文本文件处理语言。 Print the lines which match the given pattern.
awk '/manager/ {print}' employee.txt 

Output:

ajay manager account 45000
varun manager sales 50000
amit manager account 47000 

每行按空格或TAB分割,输出文本中的1、4项

 awk '{print $1,$4}' log.txt
  • sed

处理文本文件,如在test.txt文本文件中将jack替换为amy:

sed 's/jack/amy' test.txt

删除test.txt中的第七行:

sed '7d' test.txt

Shell是宏处理器或命令行解释器,主要用于翻译命令行中的命令,让其能让系统执行。也可以通过调用shell脚本来自动运行程序。

Bash is the shell, or command language interpreter, for the GNU operating system.

查看可用shell: cat /etc/shells 查看默认shell: echo $SHELL

常见的shell: Bourne Shell(/usr/bin/sh或/bin/sh) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh)

决定用哪个解释起来执行shell: #!/bin/bash

变量: 可以包含大小写字母,数字和下划线。 必须字母和下划线打头。 通过变量前加$来访问变量的值,如:

#!/bin/sh

NAME="Zara Ali"
echo $NAME

只读变量:

#!/bin/sh

NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
(/bin/sh: NAME: This variable is read only.)

Unsettle a defined variable ??? 变量的类型: Local Variables , Environment variables, shell variables.??? 用local命令声明局部变量

( ) :子shell的命令组 $(cmd) 执行cmd的结果 { } :当前shell的命令组 另一种{ } : 量的原形:${var},即是加一个大括号来限定变量名称的范围

[[ ]]、**[ ]**都是用来测试的,[[]]是关键字,里面可以用&&、||、<、>等类似C语言的语法;[ ]是bash内嵌的命令,也是用于测试的。[[ ]]通用性更好些。 [ ] : bash 的内部命令!与 test 命令是等同的! (( )),类似let,用于计算表达式。()可以把多个命令括起来,在一个子shell运行。

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。

数组: an array variable and a scalar variable???

访问所有成员的方法 :

${array_name[*]}
${array_name[@]}

创建数组: ksh shell方法:

set -A array_name value1 value2 ... valuen

bash shell方法:

array_name=(value1 ... valuen)

操作符: Arithmetic Operators Relational Operators Boolean Operators

!	非运算,
-o	或运算,
-a	与运算。

String Operators

=	检测两个字符串是否相等
!=	检测两个字符串是否不相等
-z	检测字符串长度是否为0
-n	检测字符串长度是否不为 0
$	检测字符串是否不为空,不为空返回 true。

File Test Operators

-d file	检测文件是否是目录
-r file	检测文件是否可读
-w file	检测文件是否可写
-x file	检测文件是否可执行
-e file	检测文件(包括目录)是否存在
-c file	检测文件是否是字符设备文件

例外:Bourne shell没有算数操作符,用awk和expr来运算,数字之间必须有空格,表达式必须用''包起来。

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"(Total value : 4)
Bash shell: $((EXPRESSION))
#!/bin/sh

a=10
b=20
echo $((a + b))

shell中测试命令比较不是使用简单的> = <等,而是用扩展符,如下所示:

-eq //equal 等于

-ne //no equal 不等于

-gt //great than 大于

-lt // low than 小于

ge // great and equal 大于等于,注意没有"-"

le //low and equal 小于等于,注意没有“-”

循环:可以重复执行一连串代码。 www.runoob.com/linux/linux… The while loop The for loop The until loop The select loop

循环控制:break 和 continue break命令允许跳出所有循环(终止执行后面的所有循环)。 continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环的迭代。

for循环:

for var in item1 item2 ... itemN; do command1; command2… done;
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要,下面来看一个例子:

#!/bin/bash
for((i=1;i<=5;i++));do
    echo "这是第 $i 次调用";
done;

while循环:

while condition
do
    command
done
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

until循环:

until condition
do
    command
done
#!/bin/bash

counter=0

until [ $counter -gt 5 ]
do
  echo Counter: $counter
  ((counter++))
done

if循环:

if condition
then
    command1 
    command2
    ...
    commandN 
fi
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi

case循环

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

**Shell Substitutions:**加一个-e

#!/bin/sh

a=10 echo -e "Value of a is $a \n"


\b  空格
\\   \
\n   换行
\v   垂直换行

**IO重定向:**


Shell函数:
第一种

```bash
fn() {
  # codes
}

第二种

function fn() {
  # codes
}

Bash学习: 运行bash脚本有两种方法: 1.作为可执行程序:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

2.作为解释器参数:

/bin/sh test.sh
/bin/php test.php

两数相加:

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

文件测试运算符: www.runoob.com/linux/linux…

?”标记的用途是什么在if条件中使用“?” 标记的用途是什么 在 if 条件中使用 “?” 可以来检查前一命令的结束状态。如果结束状态不是 0,说明命令执行失败。

Bash面试:

列举几个 环境变量,并且 说出他们的作用:

$PATH :  命令路径
$Shell: 当前 shell 类型
$SHLVL : 当前 shell 嵌套层次!(就是有几个shell进程)
$USER: 当前用户
$HOME : 当前用户的家目录
$HISTSIZE : 历史命令条数
$LANG : 当前系统语言
$PS1 : 登录系统时候的提示符!

关于 变量 的命令:

赋值: 1、局部变量赋值: varname=值;  
      2、全局变量赋值: export varname=值 或 declare x varname=值
      3、只读变量赋值: readonly varname=值 或 declare i varname=值
 
查看变量:  set : 查看所有已定义的变量
          exportenvdeclare -x 查看 所有环境变量!
          readonly -p 查看只读变量!
删除变量: unset varname  删除变量!
          只读变量无法删除,重启消失!

求 10 + 10 的和:

方法1:

root@zhengzelin:~# a=10;b=10
root@zhengzelin:~# let c=a+b
root@zhengzelin:~# echo $c
20

方法2:

root@zhengzelin:~# a=10;b=10
root@zhengzelin:~# c=$(expr $a + $b )
root@zhengzelin:~# echo $c
20

’ 和 " 的区别:

root@zhengzelin:~# a=10
root@zhengzelin:~# echo "$a"
10
root@zhengzelin:~# echo '$a'
$a

'' 相当于转义, "" 将变量变成它的值

写脚本:

①、输出 1 -100 所有数、奇数、偶数,并且求和: 输出 1 -100 中的所有数:

输出1 - 100:

使用 for :

for i in $(seq 1 100);do echo $i;done  

for((i=1;i<=100;i++));do echo $i;done 

使用 while :

a=1;while [ $a -le 100 ];do echo $a;let a++;done

a=1;while true;do echo $a;let a++;if [[ $a -gt 100 ]];then break;fi;done

a=1;while :;do echo $a;let a++;if [[ $a -gt 100 ]];then break;fi;done

true 和 : 都是内部命令,执行都为true,你可以使用 type true 来查看命令类型,然后执行 true | echo $?

使用 until :

a=1;until [ $a -gt 100 ];do echo $a;let a++;done:
1
2
3
4
。。。。

输出 1 - 100 中的 奇偶数:

for 列表格式:

奇数:

for 列表格式:

奇数:for i in `seq 1 100`;do let a=$i%2;if [[ $a -eq 0 ]];then continue;fi;echo $i;done

偶数:for i in `seq 1 100`;do let a=$i%2;if [[ $a -eq 1 ]];then continue;fi;echo $i;done

 解释: 当 i = 3 的时候,a=3%2, a=1,这为奇数,当 1 = 1 时(if条件判断句) 跳出此次循环(不输出奇数),所以就为 打印 偶数!

②、打印 正三角、倒三角:

root@zhengzelin:~# for((i=1;i<=5;i++));do for((a=1;a<=$i;a++));do echo -n "*";done;echo;done
*
**
***
****
*****
root@zhengzelin:~# for((i=5;i>=1;i--));do for((a=$i;a>=1;a--));do echo -n "*";done;echo;done
*****
****
***
**
*

如何获取一个文件每一行的第三个元素 ?

awk'{print $3}'

假如文件中每行第一个元素是FIND,如何获取第二个元素

awk'{ if ($1 == "FIND") print$2}'

awk用法: 每行按空格或TAB分割,输出文本中的1、4项

log.txt文本内容如下:

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo

如何向连接两个字符串 ?

V1="Hello"
V2="World"
V3=${V1}${V2}
echo $V3

bash 中 $! 表示什么意思 ? 后台最近执行命令的 PID.

如何输出当前 shell 的 PID ? echo $$

如何获取文件的最后一行 ? tail -1

如何获取文件的第一行 ? head -1

man + bash命令

Vim基础

普通模式:通过esc返回 编辑模式:通过i调用 命令模式:通过:调用

普通模式可以移动光标,删除,复制操作。 u : 撤回上一步操作

gg → 光标移动到第一列
G→光标移动到最后一列
nG→n为数字,移动到第n列   

命令模式: /word :当前光标之下找名称为word的的字符 n → 代表重复前一个搜索动作 N → 代表反向前一个搜索动作

Linux常见面试问题

1.查看当前 cpu和内存占用情况:

 top

2.强制结束一个进程

 kill -9 [进程号PID]

3.查找名字以dock开头的文件:

 find -name dock*

4.还有多少RAM可用:

 free -h

5.cat 和 more的区别:

 cat适合来查看文本短的文件,more适用于长文本的查看。

6.如果查看文本内容,并显示行编号:

 cat -b 123.txt  

7.显示一个文件中包含cout的所有行,并显示行数:

grep -n cout demo.txt

忽略大小写呢?

grep -in cout demo.txt

8.最快的创建文本,并在其中写入hello world:

echo hello world > demo.txt

9.展示包含auto的文件:

ls -lha |grep auto

10.怎么移动文件并创建软连接:

tree
mv 01.py demo/b/c
ln  -s  /home/python/Desktop/demo/b/c/01.py 01_juedui   
ls -l

11.软硬链接的区别: 在这里插入图片描述

软链接中,保存的是连接文件的路径,通过软连接可以访问数据,但是一旦文件被删除,软连接就失效了。 硬链接,是文件的另外一个名字,通过硬连接可以访问数据,要想删除有硬连接的文件,必须把文件和硬连接全部删除。

15.对于chmod的理解: chmod :change mode. u user 文件所有者 g group 文件所有者所在组 o others 所有其他用户 a all 所用用户, 相当于 ugo chmod u+x file 给 file 的属主增加执行权限

chmod +x filename 

16.查看文本后10行: tail -n 10 demo.cpp tain -f 查看实时更新的文件 17.执行文件

chmod +x filename 
./FileName

18.用什么命令对一个文件的内容进行统计?(行号、单词数、字节数) wc 19.Linux 中进程有哪几种状态? D 不可中断 Uninterruptible(usually IO) R 正在运行,或在队列中的进程 S 处于休眠状态 T 停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核 2.6 开始无效) X 死掉的进程

21.如果一个linux新手想要知道当前系统支持的所有命令的列表,他需要怎么做?

compgen ­-c

查看一共多少条可用命令:compgen -c | wc -l

22.Linux文件有哪些类型: -普通文件 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件 d 目录文件 directory l 链接文件 b 块储存设备文件 block p 管道文件 c 字符设备文件 键盘鼠标

23.查看文件大小:

du -sh [filename]

小概述:

  1. 增删改查
  2. 查看文件大小
  3. 查看cpu占用情况
  4. 查看内存占用情况
  5. vim修改文件,查找关键词定位。
  6. 软硬链接
  7. tail
  8. pgrep
  9. minicom