C++ advance(四)Linux 命令基础 --1.Linux 常用命令

包括 linux 基本命令,用户管理,vi 使用,安装卸载软件,网络配置管理

一、Linux 介绍和 Linux 目录结构

1.UNIX

创始人:Ken Thompson 和 Dennis Ritchie
主要分支和发展方向:IBM-AIX、HP-UX、solaris、BSD、linux

2.GNU 组织(GNU’s Not Unix)

创始人:Richard Matthew Stallman
主旨:倡导自由软件
协议:GPL(General Public License)
主要产品:GCC、Emacs、Bash Shell、GLIBC、linux
标准:POSIX
UNIX 用的是 Steve Bourne 在 1977 年发明的 Bourne Shell
linux 用的默认是它的扩展:Bourne Again Shell(bash)

3.linux

创始人:Linus Torvalds
发行版本:Ubuntu、Redhat、CentOS
学习内容

shell
编辑器 vim
编译器 GCC
gdb 调试
制作静态库和共享库
项目工程管理
系统编程(API):文件 IO、文件目录、进程、信号、网络、线程

4.shell

shell 是什么

打开终端,就获得一个 shell,可以输入各种命令

shell 家族

/bin/sh(已经被 /bin/bash 取代)
/bin/bash(就是 Linux 默认的 shell)
/bin/ksh(Korshell 由 AT&T Bell lab 发展出来的)
/bin/tcsh(整合 C shell,提供更多功能)
/bin/csh(已经被 /bin/tcsh 所取代)
/bin/zsh(基于 ksh 发展出来的,功能更强大的 shell)
查看系统配置 shell

1
2
cat /etc/shells
echo $SHELL

5. 目录结构

/ 根目录
/bin 可执行文件所在的目录
/media 挂载设备媒体、U 盘、光驱等
/mnt 让用户挂载别的文件系统
/usr unix system resources 庞大复杂的目录,很多应用会安装到此目录
/usr/local 用户自己安装软件的目录
/sbin 超级管理员 root 的可执行文件目录
/proc 这个目录是系统内存的映射,会保留进程运行的一些消息
/etc 系统软件的启动和配置目录
/etc/passwd 用户存放文件(man 5 passwd 查看)
/dev 设备文件所在目录
/home/user 用户家目录

6. 常用命令

ls 查看文件夹内容
history 查看历史记录
可以方向键上下查看之前的命令

二、Linux 下的绝对路径和相对路径

绝对路径:以 “/“ 开头
相对路径:以 “.” 或者 “..” 开头的路径,”.” 代表当前路径,”..” 代表上一级路径

三、文件和目录操作相关命令

1. 代表意思

bob@ubuntu:~/linux$
bob 代表用户
ubuntu 代表机器名
~ 代表家目录
/linux 代表当前所在目录
$ 代表是普通用户(sudo su 切换到管理员,输入当前用户的密码)
# 代表管理员用户

2. 目录相关

ls

-a 查看全部文件,包含文件名前带 “.” 的隐藏文件
-l 查看文件的详细信息
-R 递归查看子目录的文件信息
-lrt 文件按照修改时间排序
通配符
任意多字符:*
任意一个字符:?

1
ls *.c

cd(change dir 更改目录)

回到家目录的方式:
cd /home/user
cd ~
cd
cd $HOME($HOME 是环境变量)
回到上一次所在的目录:cd -

pwd 打印当前工作目录
mkdir

mkdir dir1 [dir2]
mkdir -p dir1/dir2 递归创建目录

tree [dir] 树状显示目录

sudo apt-get install tree

rm

删除的目录必须为空目录
rm dir
空目录定义:只包含 “.” 和 “..” 的目录
rmdir -rf dir 如果 dir2 删除后,dir1 为空,那么会递归删除
-r 向下递归,一并删除
-f 强行删除,不做提示

which 查看命令所在的目录

which ls 查看 ls 命令所在的目录
(cd 命令是 bash 自身带的命令,所以不在任何一个目录下)

3. 文件相关

touch

touch file 创建文件,如果文件存在则更新文件最后访问时间
可以用 ls -lrt 看文件的访问时间

rm

rm filename
rm -r dir 递归删除子目录
rm -rf * 删除当前目录的全部文件和目录

cp 拷贝文件或是目录

cp src des
如果 des 最后一级的内容是目录,那么则将 src 拷贝到该目录下
如果 des 最后一级的内容不是目录…/aa/xxx,在 des 上级目录 /aa 下创建一个文件 xxx,并将 src 的内容拷贝过来
cp -r src des 将 src 这个目录拷贝到 des 目录下

mv 移动文件或是目录

mv src des 重命名文件或者目录
mv src des 移动文件或目录到其他目录(des 是一个路径)
mv src des 移动并改名(des 是其他路径下的文件名)

4. 文件内容

cat

cat file 将文件内容显示到终端
如果无文件,则读入标准输入,遇到回车显示

more

more file 分屏查看文件,空格显示下一屏,回车显示下一行内容

less

less file 分屏显示,可以用方向键控制上下翻

head -n file 显示文件前 n 行,如果不加 - n 则默认显示前 10 行

tail

tail -n file 显示文件末尾 n 行,如果不加 - n 则默认显示末尾 10 行
tail -f file 查看文件尾部内容,不退出,用于追踪日志

5. 统计信息

tree

tree file 树形显示目录结构

wc(words cout 统计文件内容)

wc * 统计整个目录
wc file 默认显示:行数 单词数 字节数
wc -l 显示行数
wc -w 显示单词数
wc -c 显示字节数

du 打印出子目录大小

du -h 更适合人类观察
du -h —max-depth=1 只一级子目录大小

df

df -h 显示磁盘使用情形
df -h —block-size=GB 按照 GB 统计显示

四、修改文件权限、用户与用户组相关命令

修改文件权限、用户与用户组相关命令

ls -l 显示文件信息

drwxr-xr-x 3 bob bob 4096 5 月 14 18:16 MAKE
-rw-r—r— 1 bob bob
(1)MAKE 是一个目录,目录的大小一般默认是 4096
(2)5 月 14 18:16 是时间
(3)bob bob 是用户和组
用户比较多的时候可以分组管理,默认情况下一个用户就是一个组
(4)drwxr-xr-x 是文件权限的标志位
总共 10 位,第 1 位是文件类型,后 9 位每三位一组,是文件的权限
文件类型:- 是普通文件,d 是目录文件
前 3 位:归属用户的权限
中 3 位:归属组的权限
后 3 位:其他用户的权限
r 可读,w 可写,x 可执行

权限位数字表示法(8 进制数):
rw- 110 6
r— 100 4
r— 100 4
三个数连起来前面 + 0
-> 0644

(5)3 是硬连接计数

ln 建立软硬连接

ln -s src des 建立软连接(软连接:相当于建立一个快捷方式)
ln src des 建立硬连接(硬连接:让两个文件占用同一个磁盘块上的内容)
unlink filename 删除引用计数和文件,当引用计数为 0 时,文件删除
stat file 可以查看文件的 inode 信息

chmod

chmod [u|g|o|a] [+|-] [r|w|x] file 可以用 + 或 - 来增加或减少权限
chmod -x file 如果不加用户和组等信息,则默认是 a,代表全部
chmod 9644 file 按照数字表示法设置权限位
常用情景:创建一个 shell 文件的时候,默认没有可执行权限,利用 chmod 改变权限
目录的可执行权限就是用户可以 cd 进入目录

chown

sudo chown user:group file 可以修改 file 的所有者和所属组
sudo chown user file 只修改所有者

chgrp

sudo chgrp groupname file 修改文件所属组

whoami 显示当前用户

五、find 命令参数进行文件查找

1. 按文件名查询 -name

find path -name file
例子:find /home -name a.txt

2. 按文件大小查询 -size

fing 路径 -size 范围

范围:大于 + 表示,小于 - 表示,等于不需要添加符号
大小:M 必须大写,k 必须小写

例子:

等于 100k 的文件:find ~/-size 100k
大于 100k 的文件:find ~/-size +100k
大于 50k,小于 100k 的文件:find ~/-size +50k -size -100k
只显示下一层路径的:find ./-maxdepth 1 -size +1M
查找的结果传递给后面的参数(显示详细信息):find ./-maxdepth 1 -size +1M -exec ls -l {} \;
查找的结果传递给后面的参数的安全模式:find ./-maxdepth 1 -size +1M -ok ls -l {} \;

3. 按文件类型查询 -type

find 路径 -type 类型

f 普通文件类型
d 目录
l 符号链接
b 块设备文件
c 字符设备文件
s socket 文件
p 管道

例子:

find /home -type d

4.find 命令的好搭档 |xargs

-exec 是将 find 查找的结果一下子全部传给后面的指令,若过多容易造成后面的指令溢出
|xargs 会将 find 查找的结果分成若干块输出给后面的指令
find ./-type l|xargs ls -l

六、grep 命令根据文件内容进行查找

按文件内容查找(与 find 的不同处:不用加路径)

grep -r 查找内容 [对应文件](-r 递归查找)

例子

grep -rn “main” *.c(输出查找结果所在行号)

过滤输出结果

|grep 内容
|grep -v 内容(排除的内容)

例子:

find ./-type f|grep txt
cat test.c |grep main
tail -f tcpsvr.1705 |grep connect

七、压缩工具完成文件目录的压缩和解压缩

zip 压缩命令

打包:zip -r dir.zip dir(-r 包含子目录)
解包:unzip dir.zip
压缩文件的默认权限是 664

例子

zip -r aa.zip aa hello

rar

rar a -r newdir dir(a 代表压缩,-r 是递归子目录)(rar 指令自动添加后缀)
rar x newdir.rar

gzip 和 gunzip

tar 最常用的打包工具 .tar.gz

-c 压缩文件
-v 显示信息
-f 指定压缩包名
-x 解开压缩文件
-z gz 格式压缩

只压缩不打包

tar -cvf dir.tar dir 打包
tar xvf dir.tar 解包

打包并压缩 gz 格式

tar -zcvf dir.tar.gz dir 打包
tar zxvf dir.tar.gz 解包

打包并压缩 bzip2 格式

-j 选项,其余和 tar 一致
tar -jcvf dir.tar.bzip2 dir
tar -xjvf dir.tar.bzip2

七、虚拟机网络配置(VMWare 范例)

1. 虚拟机网络连接

桥接模式:虚拟机相当于一台电脑,和本地连接同一级 IP 段
NAT 模式:本地主机通过 VMNET8 网卡连接到虚拟机,要求 VMNET8 和虚拟机同一个网段

2.secureCRT

secureCRT 是什么

SecureCRT 是一款支持 SSH2、SSH1、Telnet、Telnet/SSH、Relogin、Serial、TAPI、RAW 等协议的终端仿真程序。简单的说是 Windows 下登录 UNIX、Linux 服务器主机的软件。SecureCRT 支持 SSH,同时支持 Telnet 和 rlogin 协议。

设置

secureCRT 协议,选择 SSH2
secureFX 协议,选择 SFTP
并设置一个会话名词
登入之后可以再做一些设置,一般把字符编码改成 UTF-8
会话选项 - 终端 - 仿真 - Linux

八、Ubuntu 下的软件安装和卸载

apt-get 自动安装软件,需要知道软件名称

sudo apt-get update 更新源
更新的是 /etc/apt 下的 source.list
sudo apt-get install tree 安装
sudo apt-get remove tree 卸载
udo apt-get clean 清理包

dpkg 根据 deb 安装包来自动安装软件

sudo dpkg -i xxx.deb 安装软件包
sudo dpkg -r xxx.deb 删除软件包

源码安装

(1)解压缩源代码包
(2)cd dir
(3)./configure

检测文件是否缺失,创建 Makefile,检测编译环境

(4)make

编译源码,生成库和可执行程序

(5)sudo make install

把库和可执行程序,安装到系统路径 /usr/local/bin 下

(6)sudo make distclean

删除和卸载软件

九、磁盘管理(了解)

十、进程管理(后续)

十一、用户管理(了解)

创建用户 sudo useradd

-s 指定 shell
-g 指定组
-d 用户家目录
-m 家目录不存在时,自动创建
sudo useradd -s /bin/bash -g itcast -d /home/bob -m bob

设置用户组 sudo groupadd

sudo groupadd bob 增加 bob 用户组

设置密码

sudo passwd bob 设置 bob 用户的密码

切换用户 su

su ken 切换到 ken 用户
su -ken 切换到 ken 用户,带有环境变量

root 用户

sudo su

十二、网络管理(后续)

十三、其他常用命令

十四、关机重启(需要 root 权限)

shotdown -h now 立即关机
init () 关机
power off 关机
reboot 重启

十五、提问

find ./-size -1M 找不到文件
find ./-size -3M 找到文件
为什么?因为可能不足 1M 的文件被按照 1M 计

C++ advance 文章总览

C++ advance(四)Linux 命令基础 —1.Linux 常用命令
C++ advance(四)Linux 命令基础 —2.vim 和 gcc 和 library
C++ advance(四)Linux 命令基础 —3.makefile 和 gdb 和 IO
C++ advance(四)Linux 命令基础 —4.stat 和 readdir 和 dup2
C++ advance(五)Linux 进程和线程 —1. 进程控制
C++ advance(五)Linux 进程和线程 —2. 进程间通信
C++ advance(五)Linux 进程和线程 —3. 信号
C++ advance(五)Linux 进程和线程 —4. 进程和线程
C++ advance(五)Linux 进程和线程 —5. 线程同步
C++ advance(六)Linux 高并发网络编程开发 —1. 网络编程基础 socket
C++ advance(六)Linux 高并发网络编程开发 —2.tcp 三次握手 - 并发
C++ advance(六)Linux 高并发网络编程开发 —3.tcp 状态转换 - selcet poll
C++ advance(六)Linux 高并发网络编程开发 —4.epoll udp
C++ advance(六)Linux 高并发网络编程开发 —5. 广播 - 组播 - 本地套接字
C++ advance(六)Linux 高并发网络编程开发 —6.libevent
C++ advance(六)Linux 高并发网络编程开发 —7.xml json
C++ advance(七)Linux 高并发 web 服务器开发 —1.
C++ advance(七)Linux 高并发 web 服务器开发 —2.
C++ advance(七)Linux 高并发 web 服务器开发 —3.