Linux学习笔记

理论

Linux目录

1
2
3
4
5
6
7
8
9
10
11
12
13
/ root  管理员目录
bin 有shell,shell有好多种,比方说sh,bash,ksh,csh等.
boot Linux启动时的核心文件
dev device缩写,存放Linux外部设备以及Linux中的设备
etc 系统管理配置文件

home 用户主目录(根目录)
var
lib
usr
opt 额外的安装的软件,program files
media
...

Linux有好多目录…

bin/usr/bin :系统预装的可执行程序
usr/local/bin :用户自己的可执行文件
lib/usr/bin :基本动态连接共享库

动态链接库通常以.so结尾.

使用

管理员

root,根用户.拥有最高权限.
普通用户的提示符是 $ ,管理员的命令提示符是 # .(这个可以设置,丰富系统信息)

命令

格式是 $ 命令 [-选项] [参数] 表示三个字段.

. 开头的文件在Linux中被视为隐藏.

命令分为内部命令和外部命令.

内部命令:shell代码一部分,shell启动后预留内存,执行速度快.( help 可以给出内部命令的帮助)
外部命令:保存在文件系统中的程序,被调用时才执行.( man 指令是联机帮助手册,可以给出所有指令的说明)
man 手册前翻一页: b ,后翻一页 \space ,退出 q .

Vim使用

使用 vim,vi ,或者 vim aaa.txt 打开具体文件. :q,:q! 是退出(不保存退出), :w aaa.txt 写入文件(可以直接打开文件然后输入 :w 写入),在vim内读入是 :r aaa.txt 注意使用 r 指令是把文本加载到编辑区,并不是直接就能覆盖源文件的(虽然可以用 :w! 原文件 解决)

分为命令模式和输入模式.默认是命令模式,使用 Esc 从输入模式切成命令模式.使用 a,A,i,I,o,O 切成输入模式(Insert).

:r 参数 -R 只读. -c xx 带命令启动.

编辑多个文件, vi a,b,c 然后 :n 启动下一个文件, :n! 放弃修改,启动下一个, :w:n 先保存再启动下一个.

:ar 查看当前排队处理文件的列表.

命令模式下的操作

使用 hjkl 代表 左下上右 或者键盘上的方向键移动光标.
(spacebar就是space的空格)

OPT EFFECT
0 行首
$ 行尾
w 右一个字
b 左一个字
e 字尾
\enter 下一行行首
\spacebar 右一格
\backspace 左一格
OPT EFFECT
x 删一个字母
dd 删一行
u 撤销一步
U 撤销对该行的所有更改
r 替换这个字符
R 替换该字符,同时换成文本输入模式
. 重复上一次修改
OPT EFFECT
i 输入正文时光标左移一格
a 输入正文时光标左移一格
I 跳到行开头
A 跳到行末尾
o 下一行添加新行,光标出现在新行开头
O 上一行添加新行,光标出现在新行开头

搜索字符串: \aaa 然后光标会跳到搜索结果,按 n 下一个,按 N 上一个,会循环, ?aaa 从光标位置向前查找,不好用.

替换字符串: %s/aaa/bbb/g 把aaa全部替换成bbb(g是全部替换,不加g就是单个替换,gc是每次替换前确认)

vi的全局配置文件

存放在/etc/virc.

vim set

set mouse=a 意思是启用鼠标
set nu显示行号(set nonu)

考试考的命令手册

cd :改变目录.

mkdir A B C ... :当前文件夹下创建几个空文件夹(对应的, rmdir 就是删掉好多空文件夹)

rm -R aaa :删除带文件的aaa.

passwd :修改密码.
passwd username :修改别人密码.(只有管理员可以)(root用户创建新用户时分配初始口令)

exit :退出系统.
logout :退出系统.

date :系统告诉你当前时间.
cal :指定年份的日历表
who :端口和登陆时间

ls :显示目录里面有啥…参数如下:

1
2
3
4
5
ls -l      # 以长格式显示当前目录中的文件和目录
ls -a # 显示当前目录中的所有文件和目录,包括隐藏文件
ls -t # 按照修改时间排序显示当前目录中的文件和目录
ls -R # 递归显示当前目录中的所有文件和子目录
ls -l xx # 查看当前文件权限

sh , bash :更换shell,在当前shell中直接键入新shell名字即可,本质是创建新进程,运行新的shell.(用exit退出上一个shell的进程,可以套娃)

tar

tar -cvzf aaa xx*
把所有满足xx打头的文件合并压缩成一个叫aaa的文件.不压缩就是-cvf.

cal

显示日历

find

* :任意长度字符都可以用*替代
? :只有一个字符能被?替代
[abc] :能匹配a或b或c单个字符
{abc,abd} :能匹配abc或abd连续字符串.

如:找当前文件夹所有开头是a某c,结尾是.cpp的文件:
find ./ -name "a?c*.cpp"

使用通配符的要加引号,不使用的不加引号.

-exec 执行一个命令, {} 替代匹配上的文件名, \; 表示命令结束.

dnf

remove 删除包
groupinstall 安装软件包组

cut

显示每一行前几个字符内容,-c再加1-3是前三个,6是第六个.

cp

cp a b 表示把a文件复制到b文件夹里面.

grep

grep -op pattern file从文件里面找图案,完美匹配的会整行输出.

Shell

${}

${a} 变量取值.
${a:-b} 如果a空,使用b的值,否则使用a的值
${a:+b} 相反,a空使用a,否则使用b
${a:=b} 如果a空赋一个初始值,否则不动(注意只有这个是能改变a值的)

[[]]

是常见的逻辑比较脚本,||,&&,=~,等可以在这里比.

$()

执行一条命令

(())

进行算术运算和逻辑的三目运算.

echo

`这个符号包住的是命令,会输出执行结果.

'单引号包住的原样输出.
"双引号包住的或者不包住的就是变量取值的字符串.

exp4

largest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo -n "Please enter the first integer:"
read a1
echo -n "Please enter the second integer:"
read a2
echo -n "Please enter the third integer:"
read a3
res=$a1
if [ $a2 -gt $res ]; then
$res=$a2
fi
if [ $a3 -gt $res ]; then
$res=$a3
fi
echo "$res"

filecopy
1
2
3
4
5
6
7
8
if [ -d ~/exp4/FILE3-6K ];then
rm -rf ~/exp4/FILE3-6K
mkdir ~/exp4/FILE3-6K
else
mkdir ~/exp4/FILE3-6K
fi

find ~/exp4/FILE3/* -size -6k -exec cp {} ~/exp4/FILE3-6K \;

exercise4
1
2
3
4
5
6
7
8
9
10
11
12
if [ -d ~/exp4/FILE4 ]
then
rm -rf ~/exp4/FILE4
fi
mkdir ~/exp4/FILE4
cd ~/exp4/FILE4
touch file{001..100}
tar -czf allfile.tar.gz *
mv -f ~/exp4/FILE4/allfile.tar.gz ~/exp4
cd ~/exp4
ls -l allfile.tar.gz
chmod 744 allfile.tar.gz

user_exist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo -e "Please input a username:\c"
read name
m1=/bin/bash
mm=mail
if [[ $name == $mm ]]
then m1=/usr/sbin/nologin
fi
egrep "\<$name\>" /etc/passwd >/dev/null
if [ $? -eq 0 ]
then
echo "${name}'s shell is $m1"
else
echo "$name not exists."
fi