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'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 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…
“?” 可以来检查前一命令的结束状态。如果结束状态不是 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 : 查看所有已定义的变量
export 或 env 或 declare -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]
小概述:
- 增删改查
- 查看文件大小
- 查看cpu占用情况
- 查看内存占用情况
- vim修改文件,查找关键词定位。
- 软硬链接
- tail
- pgrep
- minicom