理论
Linux目录
1 | / root 管理员目录 |
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
5ls -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
largest1
2
3
4
5
6
7
8
9
10
11
12
13
14echo -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"
filecopy1
2
3
4
5
6
7
8if [ -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 \;
exercise41
2
3
4
5
6
7
8
9
10
11
12if [ -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_exist1
2
3
4
5
6
7
8
9
10
11
12
13
14echo -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