Learning Linux

2018-12-24  本文已影响0人  王拓

Learning Linux

Linux文件名

/bin

普通用户有权限使用的二进制可执行命令

cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

/sbin

主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2f/sck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、runlevel、shutdown等。

/boot

存放引导加载器(bootstrap loader)使用的文件

/etc

etc.是法语词et cetra 的缩写,相当于英语的 and so on.

存放系统管理和配置文件,其中包括了用户信息文件/etc/passwd,系统初始化文件/etc/rc

/opt

用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

/usr

系统级的目录,可以理解为C:/Windows//usr/lib理解为C:/Windows/System32

/usr/local

用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。

/usr/local/bin

本地增加的命令

/usr/local/lib

本地增加的库根文件系统

/usr/bin

主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb、wget等。

/usr/sbin

超级用户使用的可执行文件,放置一些网路管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等

/home

存放所有用户文件的根目录

/lib

存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。

/tmp

用于存放各种临时文件,是公用的临时文件存储点。

/dev

用于存放设备文件。/bus, /cpu, /disk,比如,用户可以通过访问/dev/mouse/访问鼠标的输入,就像访问其他文件一样

/media

放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此

/proc

proc是一个伪文件系统,提供了<u>访问内核数据</u>的方法,一般挂载在“/proc”目录,其中的大部分内容是只读的

虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/var

用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

/srv

主要用来存储本机或本服务器提供的服务和数据

Linux文件命令

dmesg

用来显示开机信息

开机信息保存在/var/log/dmesg

dd -- disk dump

复制文件并对原文件的内容进行转换和格式化处理

df -- disk free

df -h  ./
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda10      189G   50G  131G  28% /

 df   ./
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda10     198170792 51487036 136594132  28% /

wc -> word count

用于查看文件的行数,单词数和字符数

wc filename
X Y Z  filename
ls | wc -l # 查看有多少个文件

find

在当前目录下,查找文件为suchen的文件。

find . -name suchen
find . -iname suchen # 不区分大小写

找出当前目录下,目录名是tmp的目录

find . -type d -name tmp

查找特定权限的文件

find . -type f -perm 777 # 权限是777
find . -type f -perm /a+x # 查找可执行文件

查找指定用户的文件

find . -user tuo 

查找特定时间修改的的文件

find . -type -f -mtime 3 # 三天前修改
find . -mtime +3 # 三天以前
find . -amin -3 # 三天以内访问过的

查找特定大小的

find . -type f -size +50MB -size -100MB # 大于50,小于100的文件

ln

ln -s /path/origin /path/link # -s创建一个软链接
ln /path/origin /path/link # 创建一个硬链接

sort

排序

sort string.txt # 对字符串进行排序
sort -n num.txt # 对数字进行排序
sort -n -r num.txt # -r 倒序

unip

去重

uniq example.txt 
uniq -c example.txt # 统计重复次数

tr

替换或删除字符

echo "ABC" | tr [:upper:] [:lower:]
echo "A B C" | tr [:space:] '\t'
echo "delete1234" | tr -d [:digit:]

mkdir

mkdir -p already_exist #创建一个已经存在的目录,不报错

diff

比较文件区别

diff -yw 1.txt 2.txt # w表示比较时忽略空格,y以并排的格式输出比较结果

who

查看当前所有登录用户的信息

paste

paste -d'|,' file1 file2 file3 # -d 指定分割符

apt

apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。

增加了进度条交互。

apt-cache search **packagename **搜索包
apt-cache show **packagename **获取包的相关信息,如说明、大小、版本等
apt-get install packagename 安装包
apt-get install packagename --reinstall 重新安装包
apt-get -f install 修复安装”-f = –fix-missing”
apt-get remove packagename 删除包
apt-get remove packagename --purge 删除包,包括删除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安装的包

apt-get source** packagename** 下载该包的源代码
apt-get clean 清理无用的包
apt-get autoclean 清理无用的包
apt-get check 检查是否有损坏的依赖

uname

查看系统信息

uname -a # 查看所有信息

Linux网络命令

ping

判断网络的的联通和延迟,得到域名解析

ping www.baidu.com
ping -I wlp3s0f0 www.baidu.com # 以特定网卡ping
ping -s 1452 www.baidu.com # ping特定包的大小

wlp3s0f0 无线网卡

enp2s0f1 有线网卡

traceroute/mtr

traceroute -n www.baidu.com # 不进行域名解析
tracetoute -I wlp3s0f0 www.baidu.com # 以特定网卡

mtr是traceroute进化版,IDE

host

简单的域名解析

nslookup和dig

用于域名解析

lspci

查看所有pci设备信息,网卡硬件也是采用pci总线

lsusb

查看所有USB设备

ifconfig

interface configuration 查看接口信息

ifconfig -a # 查看所有接口信息
ifconfig wlp3s0f0 # 查看特定接口
ifconfig wlp3s0f0 up # 激活网卡
ifconfig wlp3s0f0 down # 关闭网卡

ifup,ifdown 启用关闭接口

ip route

查看路由表,本机只是一个网络中端,第一行为网关

route

route -n # ip地址
route # 主机名

netstat

用于显示各种网络相关信息

socket又称为嵌套子:unix,udp,tcp

应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

ifup/down

启用或禁用特定的网络接口

网络故障排查

网络故障排查遵循从<u>底层到高层, 从自身到外部</u>的流程进行。

top

top命令经常用来监控linux的系统状况,比如cpu、内存的使用

输入f,查看缩写的全称

SSH

SSH为建立在应用层和传输层基础上的安全协议

sshd服务使用SSH协议进行远程控制,或在计算机之间传送文件。而实现此功能的telnet(远程桌面) 是不安全的,使用明文传送密码

ssh

ssh pi@10.42.0.47   # 树莓派系统的用户名和局域网 IP 地址.
ssh -p 10022 user@hostname # 使用10022端口,默认为22端口


ssh u0_a364@10.146.92.15 -p 8022 # 连接termux

利用ssh运行命令

ssh user@hostname python3 < test.py

ssh user@hostname "your cmd"

配置文件

/etc/ssh/目录下

一般配置服务端的配置文件ssh_config

启动服务

  1. 命令行

    service sshd restart|start|stop|status|reload
    
  2. init.d 启动脚本

    /etc/init.d 是 /etc/rc.d/init.d 的软链接(soft link)。

    /etc/init.d/sshd restart|start|stop|status|reload
    
  3. 配置开机自动启动

chkconfig sshd on
chkconfig --list sshd
chkconfig sshd off

scp

把当前一个文件copy到远程另外一台主机上

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

把文件从远程主机copy到当前系统

scp root@172.19.2.75:/home/root     /home/daisy/*.tar.gz 

keygen

# termux
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys tuo@hostname:~/tmp

# pc
cat ~/tmp/authorized_keys >> ~/.ssh/authorized_keys # 本机authorized_keys所存储的是可以访问本机的设备

硬盘到文件系统

硬盘接口分类

Linux中,IDE硬盘(hd)最多只能有59个逻辑分区(5-63),SATA接口硬盘最多只能有11个逻辑分区(5-15)

每种操作系统所配置的文件属性权限不同,为了存放这些文件所需的数据,需要将硬盘进行格式化,以成为操作系统能够利用的文件系统格式。

不同操作系统使用的常见系统格式

各种接口的硬盘在linux中的文件命名

Linux文件系统将权限与属性放置在一个inode中 ( 一个文件只有一个inode, 同时记录文件数据所存放的data block号码),实际数据放在block区中 (一个文件可=可以有多个block)。另外,还有一个superblock记录整个文件系统的整体信息,包括inode和block总量,使用量和剩余量。

与linux的ext2相比,FAT文件系统没有inode,只有储存文件数据的block。前面一个block存放下一个block的号码,现在这种FAT文件系统主要用在U盘上

Win7系统支持NTFS和winFS文件系统,而win8是全新的ReFS系统

etx2是非日志文件系统,etx3是日志文件系统

在Linux中输入输出设备被看做特殊文件,称为设备文件。设备文件分为两类,字符设备文件(c)和块设备文件(b)。字符设备文件允许设备传送任意大小的数据,如终端,打印机,鼠标等。块设备文件允许设备传送数据以数据块为单位,如硬盘,光盘,usb

计算机硬盘的分区主要分为基本分区和扩展分区,基本分区和扩展分区之和不能大于四个,基本分区可以马上被使用但不能再分区。扩展分区必须在进行分区后才能使用,由扩展分区再分下去就是逻辑分区,逻辑分区没有数量限制。

fdisk

fdisk命令是磁盘及分区管理工具,在硬盘设备中创建、删除、更改分区等操作通过fdisk命令

-l: 该选项后没不跟设备名会直接列出所有磁盘设备以及分区表,加上设备名会列出该设备额分区表

不加-l会对该磁盘进行分区

mkfs

将磁盘分区后,使用mkfs命令可对其进行格式化

fsck

当系统非正常关机时,或其他原因破坏了文件系统,需要对文件系统进行恢复,否则文件系统将不能正常引导

fsck /dev/sda1

df

检查文件系统的磁盘空间占用情况。可以利用该命令来获取磁盘占用了多少空间,目前还剩下多少空间

du

查看目录下所有文件所占空间大小,默认以block数为单位

基础命令

date

显示或设置此时系统时间

cal

cal [month] /[year]

在屏幕上显示日历信息

su root

登录root 账号

cat

cat a |head -n 3000|tail -n +1000 >> b

将文件a的1000行到3000行之间内容添加到b的后面

cat a |tail -n 1000 >> b

将文件a的最后1000行添加到b后面

cat a |head -n 1000 >> b

将文件a的前1000行添加到b后面

cat a |tail -n +1000 >> b

将文件a的1000行以后的添加到b后面

cat > b

将接下来键盘输入的内容覆盖b

set

set -o noclobber

避免重定向重写已存在的文件 +o 禁用noclobber功能

uniq

去掉重复行

diff

找不同

grep

-i 忽略大小写

-v 显示不包含字符串的文本行

-C 5 foo file 显示file文件里匹配foo字串那行以及上下5行

-B 5 foo file 显示foo及前5

-A 5 foo file 显示foo及后5行

-l 只显示文件名

grep -l main * # 列出当前目录下内容含有main的文件

history

history 5 # 显示最近执行的5个命令
!547 # 重复执行547号命令

killall

killall bash # 杀死所有bash程序

pkill

pkill -b -9 python # 杀死最近的python进程
pkill -f string -9 # 杀死名字带while的进程

watch

watch -n 10 ps -au

Linux GUI

X Windows是一个窗口系统,为GUI界面提供最基本的支持,而具体的窗口形式、窗口行为以及更多的图形化支持,则需要借助于窗口管理器和桌面环境。

现在常用的桌面环境为GNOME(基于GTK图形库)和KDE(基于Qt图形库),可以从中简便地管理和使用应用程序、文件和系统资源

系统启动过程

GRUB介绍

GRUB (GRand Unified Bootloader)是一个将引导装载程序 (Boot Loader) 安装到主引导记录(MBR)的程序。这使得用户能够对操作系统进行选择,在内核引导时可传递指令给内核,或是在内核引导前确定一些系统参数

Linux关机

shutdown

shutdown 16:50

shutdown +5 “Byebye” 五分钟后关机打印拜拜

halt

相当于shutdown -h 立即关机

halt执行时,kill掉所有应用程序,然后调用sync(将所有内存信息通过文件系统写入硬盘)

reboot

和halt类似的重启程序

相当与shutdown -r

init

init进程是所欲进程的祖先,其进程号始终wenyi

日志管理

Linux系统有三个主要的日志子系统

/var/log/dmesg

/var/log/dmesg文件保存内核启动的信息,可以看到内核和各种驱动程序的加载,加载硬件驱动时系统也会显示出相应的信息。

/var/log/messages

/var/log/messages文件是Linux系统中最全面的log文件,记录了内核和应用程序发生错误时的信息和系统运行的一般信息。

使用swatch文件分析日志

alias

给命令取别名

alias cdir='cd /home/user/dir'

gcc

使用静态链接库

-w 禁止所有警告信息

-Wall 允许发出gcc提供的所有有用的报警信息

-Werror 视警告为错误,出现任何警告即放弃编译

-g 指示编译程序在目标代码中加入供调试程序gdb使用的附加

git

初始化仓库

git init # 通过git init命令把这个目录变成Git可以管理的仓库

将文件加入到仓库的暂存区

git add readme.md # 将文件添加到仓库,实际上就是把文件修改添加到暂存区
git diff file # 比较工作区和暂存区之间的区别

将文件提交到当前分支

git commit  -m "This is commit" # 把文件提交到仓库 -m后面输入的是本次提交的说明 commit 可以一次提交很多文件,实际上就是把暂存区的所有内容提交到当前分支。
git log # 查看commit历史记录 

回归到以前版本

get reset --hard HEAD^^ # 回到上两个版本
get reset --hard 3a9864 # 回到指定版本号,查看log得到
git reflog # 记录了每次commit和reset记录,也可以通过这个命令的得到某个版本号的id
git checkout -- readme.md # 丢弃工作区中对readme.md的修改  --很重要

删除文件

rm test # 从工作区删除
git rm test # 从版本库删除文件
git commit # 确认删除

上传到github

 git remote add origin git@github.com:michaelliao/learngit.git # 要关联一个远程库
 git push -u origin master # 推送最新修改

新的分支

git checkout -b dev # -b表示切换

上个语句等同于

git branch dev
git checkout dev

查看当前的分支

git branch

我们把dev分支的工作成果合并到master分支上

git merge dev

删除一个分支

git branch -d dev

上传代码

git push -u origin master
>> wangtuo0820@sina.cn
>> wangtuo96$

odps

od -c file

查看文件的实际内容

fator

分解因数 factor 999

fortune

打印一句名言 fortune-zh打印一首诗

tmux

tmux new -s name 创建一个会话,命名为name

tmux attach -t name 重新连接上被分离的会话

tmux ls 列出所有创建的会话

Shell

有条件执行

引号(字符串)

echo 'I am $USER'
>> I am $USER
echo -e "I am \n$USER" # 对字符串进行转义
>> I am 
>> tuo
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

read

echo -n "input:"
read $USER
echo "output: $USER"

read -p "input"
echo "output $REPLY"

LINE

逐行输出文件中代码

while read LINE
do
    echo "$LINE"
done<file

printf

printf "%s's average score is %.2f\n" "Lixiaohai" $((83+99+66)/3)

数组

student=("A" "B" "C")
score=(11 22 33)
for i in 0 1 2
do
    echo "${student[$i]} is : ${score[$i]} "
done

student[0]="E"
student[1]="F"
student[2]="G"
i=0
while [ $i -lt 5 ]
do
    echo ${student[$i]}
    i=$(($i+1)) # i++
done
echo "${#student[*]}"

获取所有元素

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[*]}"
echo "Second Index: ${NAME[@]}"

获取数组长度

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[*]}"
echo "Second Index: ${NAME[@]}"
#取得数组元素的个数
length=${#NAME[@]}
echo -e $length "\n" # len of NAMe
#或者
length=${#NAME[*]} # len of NAME
echo -e $length "\n"
#取得数组单个元素的长度
lengthn=${#NAME[0]} # 4 length of Zara
echo -e $lengthn "\n"

判断

是否存在且为字符设备

if test -r $FILENAME;then
  echo "is a file"
fi

数值的大于等于

if test n1 -ge n2; then
  echo ""
fi

字符串的等于

if test str = str;then
  echo ""
fi

逻辑

# 与 -a
if test n1 -ge n2 -a n1 -lt 70;then
  echo ""
fi
# 或 -o
if test n1 -ge n2 -o n1 -lt 70;then
  echo ""
fi

判断目录

if test ! -d $DIR; then
  echo "not a dir"
fi

上一篇 下一篇

猜你喜欢

热点阅读