目录和文件
类Unix系统目录结构
bin 系统可执行程序, 如命令
usr/bin
usr/sbin
boot 内核和启动程序, 所有和启动相关的文件都保存在这里
dev 一些设备文件(鼠标, 键盘, 网卡), 设备驱动文件
etc 系统软件的启动和配置文件
home 用户目录
lib 库
media 挂载媒体设备, 如光驱U盘等.
mnt 空目录, 目录是让用户临时挂载别的文件系统, 如挂载Windows下的某个分区
opt 空目录, 可以把软件装在opt下
root root用户的目录
usr 可执行程序, 安装的软件包和一些配置文件等等
var 提供一些变量
查找与检索
find
根据文件名查找, 默认有递归(会查找子目录的所有文件)
find ~ -name '\*.java'
find / -name '\*.cpp'
grep
根据内容检索, 默认没有递归
选项参数
-c : 只输出匹配行的计数.
-I : 不区分大小写(只适用于单字符)
-h : 查询多文件时不显示文件名
grep "hello" ./\* -R -R 加上递归选项
磁盘管理
mount
挂载U盘
1.查看磁盘信息
sudo fdisk -l
2.挂载存储设备sdb1到挂载点/mnt目录(或其他任何目录)
sudo mount /dev/sdb1 /mnt
3.访问/mnt 即可访问U盘
4.卸载/mnt
sudo umount /mnt
dd
dd:拷贝
例1:拷贝光盘
dd if=/dev/cdrom of=cdrom.ios
i = input f = file 输入文件是cdrom o = ouput 输出文件是cdrom.ios
例2:将文件sfile拷贝到文件dfile中
dd if=sfile of=dfile
例3:创建一个100M的空文件
dd if=/dev/zeor of=hello.txt bs=100M count=1
bs = block size 块的大小是100M count表示有一个块
/dev/null , 外号是无底洞, 你可以向他输出任何数据, 他通吃
/dev/zero , 是一个输入设备, 你可以用它来初始化文件, 从里面读出来的数据都是0
压缩包管理
###tar
c 创建一个包create
x 解压缩, 解包(常用)
辅助选项:
f 使用档案文件或设备, 这个选项通常是必选的.(常用)
v 详细报告tar处理的文件信息(常用)
打包时可以采用两种压缩算法
z 用gzip来压缩/解压缩文件, 加上该选项后可以将档案文件进行压缩, 但还原时, 也一定要使用该选项进行解压缩(常用)
j 用bzip2来压缩/解压缩文件, 加上该选项后可以将档案文件进行压缩, 但还原时, 也一定要使用该选项进行解压缩(常用)
打包:
tar cvf dir.tar dir
tar xvf dir.tar
打gz压缩包:
tar zcvf dir.tar.gz dir
tar zxcf dir.tar.gz
打bz2压缩包:
tar jcvf dir.tar.bz2 dir
tar jxvf dir.tar.bz2
指定目录解压缩: -C
tar jxvf dir.tar.bz2 -C ~/test
tar zxcf dir.tar.gz -C ~/test
rar
windows
打包:把dir压缩成newdir.rar
rar a -r newdir.rar dir
解包:把newdir.rar解压缩
unrar x newdir.rar
zip
打包:
zip -r dir.zip dir
解包:
unzip dir.zip
进程管理
who
查看当前在线上的用户情况, (终端tty)
ps
常用:
ps aux 显示所有进程
ps ajx 显示进程间的关系
ps -Lf 2423 查看线程
Head标头:
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process ID)
SID 会话ID(Session ID)
R 运行 Runnable(on run queue) 正在运行或在运行队列中等待
S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接收到信号
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在
D 不可中断 Uninterruptible sleep(ususally IO)
T 停止
jobs
用来显示当前shell下正在运行那些作业(即后台作业)
用ctrl-z 挂起当前进程
jobs 命令查看被挂起的进程
fg 1 把1号被挂起的进程切换到前台, 并且运行
bg
把被挂起的进程切换到后台运行.
bg [作业号]
./a.out & 将a.out启动到后台
kill
向指定进程发送信号
kill [ -signal | -s signal ] pid
查看信号编号
kill -l 查看所有信号编号
kill -l [signal] 查看signal这个信号的编号
kill 命令如果不带参数而直接跟pid, 就是发给该进程SIGTERM信号, 大部分进程收到该信号就会终止. 但是被挂起的进程不能处理信号, 所以必须发SIGKILL信号, 由系统强制终止进程.
env
查看当前进程的环境变量
vim ~/.bashrc
配置当前用户的环境变量
vim /etc/profile
配置系统的环境变量, 配置时需要有root权限
export PATH=$PATH:新路径
用户管理
创建用户
sudo useradd -s /bin/bash -g root -d /home/zhangsan -m zhangsan
sudo useradd -s /bin/sh -g group -G adm,root xwp
此命令新建了一个用户xwp, 该用户登录的shell是/bin/sh, 他属于group用户组, 同时又属于adm和root用户组, 其中group用户组是其主组.
-s 指定新用户登录时shell类型
-g 指定所属组, 该组必须已经存在
-G 指定附属组, 该组必须已经存在
-d 用户家目录
-m 用户家目录不存在时, 自动创建该目录
设置用户组
sudo groupadd xxx
为xxx设置新的用户组
设置密码
sudo passwd xxx
为xxx设置密码
切换用户
su xxx
root用户
变成root用户
sudo su
设置root密码
passwd
删除用户
userdel 选项 用户名
常用的选项是-r, 他的作用是把用户的主目录一起删除.
sudo userdel -r xxx
此命令删除用户xxx在系统文件(主要是/etc/passwd, /etc/shadow, /etc/group等)中的记录, 同时删除用户主目录.
网络管理
ifconfig
1.查看网卡信息
ifconfig
2.关闭网卡
sudo ifconfig eth0 down
3.开启网卡eth0
sudo ifconfig eth0 up
4.给eth0配置临时IP
sudo ifconfig eth0 IP
ping
ping [选项] 主机名/IP地址
查看网络上的主机是否在工作. 它向该主机发送ICMP ECHO_REQUEST包. 有时我们想在网络上的某台主机上下载文件, 可是又不知道那台主机是否开着, 就需要用ping命令查看.
命令中各选项的含义如下:
netstat
finger
常用服务器构建
ftp
fpt服务器
1.安装vsftpd服务器
sudo pacman -S vsftpd
2.配置vsftpd.conf文件
sudo vi /etc/vsftpd.conf
添加下面设置
anonymous_enable=TES // 允许匿名登录
anon_root=/home/xxx/ftp // 匿名用户的主目录
no_anon_password=YES // 匿名用户登录不需要密码
write_enable=YES // 允许写
anon_upload_enable=TES // 允许匿名用户上传
anon_mkdir_write_enable=YES // 允许匿名用户创建文件
3.重启服务器, 重新加载/etc/vsftpd.conf配置文件
sudo systemctl start vsftpd
4.进入你的/home/xxx/ftp目录, 创建一个空目录, 供用户上传
cd ~/ftp
mkdir anonymous
chmod 777 anonymous
5.测试上传功能, 登录ftp服务器, 进入到anonymous目录
ftp IP地址
cd anonymous
put somefile 上传命令, 可以把你当前目录下的文件上传到ftp服务器的anonynous目录
get somefile 下载
ftp客户端
fpt加密算法是可逆的, 所以设置了密码也不安全.
fpt客户端的弊端:只能下载文件, 不能下载目录
lftp客户端
lftp也是一种ftp客户程序, lftp几乎具有bash的所有方便功能, Tab补全, 后台下载等, 用法与ftp类似, 主要的指令如下:
put 上传文件
mput 上传多个文件
get 下载文件
mget 下载多个文件
mirror 下载整个目录及其子目录
mirror -R 上传整个目录及其子目录
!command 调用本地shell执行命令command
登录
lftp IP
nfs
nfs = net file system 网络文件系统
1.安装nfs服务器
sudo pacman -S nfs-ker
2.设置/etc/exports配置文件
sudo vim /etc/exports
添加这行配置
/home/用户名/nfs \*(rw,sync,no_root_squash)
/home/user/nfd 是说明要共享的目录是什么
* 表示任意IP都可以挂载
rw 允许读写
sync 同步(任何人做的修改其他人都可以看到)
3.在用户目录下创建nfs目录
4.重启服务器, 重新加载配置文件
5.测试服务器, 把服务器共享目录nfs挂载到/mnt节点
sudo mount -t nfs -o nolock -o tcp IP:/home/用户名/nfs /mnt
6.卸载网络共享目录
sudo umount /mnt
ssh
远程登录
ssh 用户名@IP
其他命令
终端快捷键
bash的快捷键和emacs保持一致.
Ctrl-p 上翻一条命令 助记:previous
Ctrl-n 下翻一条命令 助记:next
Ctrl-b 终端光标向左移动 助记:backward
Ctrl-f 终端光标向右移动 助记:forward
Ctrl-d delete光标后面的=Del 助记:delete
Ctrl-8 =Backspace
Ctrl-a 光标移到开头=Home 助记:the first
Ctrl-e 光标移到末尾=End 助记:end
shift-pageup 终端向上翻页
shift-pagedown 终端向下翻页
umask
umask [-p] -S [mode]
umask指定用户创建文件时的掩码, 其中的mode和chmod的命令中的格式一样. 如果不用mode参数, 则显示当前的umask设置. 如果用-S参数, 则以符号形式显示设置.
比如该用户touch 创建一个文件, 则其默认权限为-rw-r–r--, 如果该用户创建一个可执行文件, 则其默认权限为-rwxr-xr-x, 也就是说, 由于umask的设定, 创建的文件默认是不具有g的w权限和o的w权限的.
$ umask
0022
$ umask -S
u=rw,g=r,o=r
查看内核版本信息
uname -a
vim
查看man page:
光标移动到函数上, K即可查看, 如果这个函数也是命令的话(如printf)会查看第一章的man page也就是命令, 要查看第三章, 3K即可
- 临时取消行号 :set nonu nonu = no num 没有数字
- 临时显示行号 :set nu
gcc
-I 指定头文件目录, 注意-I和后面的头文件目录之间没有空格
gcc -Iinclude main.c add.c -o app
-c 只编译, 生成.o文件, 不进行链接
-g 包含调试信息
-On n=0~3 编译优化, n越大优化的越多
-Wall 提示更多警告信息
-D 编译时定义宏, 注意-D和后面的宏名之间没有空格
-E 生成预处理文件, .i