11 minute read

本篇文章汇总了 Unix 和 Linux 学习的相关资源,包括 Unix 和 Linux 的历史渊源、相关工具等内容,适合 Unix 和 Linux 开发者参考。

General Knowledge

Linux Distributions

镜像站

Softwares/Tools/Knowledge

Linux常用命令

# 先尝试man再尝试google
man xxx

sha1sum/md5sum

mtools # mtools 命令用于显示mtools 支持的指令。mtools 实际上是一个命令集合,是DOS 文件系统的工具程序,它可以模拟许多MS-DOS命令,使用起来非常方便。使用权限是所有用户。

# set the system's date from a remote host
rdate

grep -R "org.apache.commons.FileUtils" *
grep -inr --color "ERROR" test_debug.log
netstat -tulnp | grep mysqld # 查看mysqld的监听情况
netstat –apn | grep pid   #先查进程号,再找到进程信息
netstat -lntp          # 查看所有监听端口
netstat -antp          # 查看所有已经建立的连接
netstat -anp | grep xxxx   #xxxx为端口号 Linux下查看某个端口下运行的是什么程序
netstat -s             # 查看网络统计信息进程
watch "ls -al myfile" 监控文件变化

nproc --all #查看核心数

sudo sh *.sh # 打开.sh文件
./*** # 打开其它可执行文件,如果没有可执行权限,需要chmod

man nautilus
man ed

xdg-open # 命令行快速打开各类型文件
mplayer xxx.mp3 # 使用mplayer打开

fc-list :lang=zh-cn # 查看字体

lspci -tv              # 列出所有PCI设备。PCI和PCI Express,是计算机常使用的一种高速总线。操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间。PCI/PCI-E设备的正常运行,离不开PCI/PCI-E配置空间。通过读写PCI/PCI-E配置空间,可以更改设备运行参数,优化设备运行。本文介绍用户空间可以读取、修改、扫描PCI/PCIE设备的用户命令及使用。在Linux内核中,为PCI和PCI-E只适用了一种总线PCI(内核提供的总线系统),故访问PCI-E配置空间,也包括了PCI设备配置空间。
lsusb -tv              # 列出所有USB设备
lsmod                  # 列出加载的内核模块
env                    # 查看环境变量资源
grep MemTotal /proc/meminfo   # 查看内存总量
grep MemFree /proc/meminfo    # 查看空闲内存量
uptime                 # 查看系统运行时间、用户数、负载
cat /proc/loadavg      # 查看系统负载磁盘和分区
hdparm -i /dev/hda     # 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE       # 查看启动时IDE设备检测状况网络
ifconfig               # 查看所有网络接口的属性
route -n               # 查看路由表
w                      # 查看活动用户
id <用户名>            # 查看指定用户信息
last                   # 查看用户登录日志
cut -d: -f1 /etc/passwd   # 查看系统所有用户
cut -d: -f1 /etc/group    # 查看系统所有组
crontab -l             # 查看当前用户的计划任务服务
rpm -qa                # 查看所有安装的软件包
rpm -q mysql   # 查看是否安装了mysql客户端

lsof -i :xxxx    #xxxx为端口号

cat /proc/version # 查看内核版本命令
lsb_release -a ##查看linux版本
cat /etc/debian_version
cat /etc/debian_version //Only for Debian
cat /etc/redhat-release //Only for Redhat
rpm -q redhat-release //Only for Redhat
redhat-release-5Server-5.6.0.3

# 注:这种方式下可看到一个所谓的release号,比如上边的例子是5,这个release号和实际的版本之间存在一定的对应关系,如下:
# redhat-release-3AS-1 -> Redhat Enterprise Linux AS 3
# redhat-release-3AS-7.4 -> Redhat Enterprise Linux AS 3 Update 4
# redhat-release-4AS-2 -> Redhat Enterprise Linux AS 4
# redhat-release-4AS-2.4 -> Redhat Enterprise Linux AS 4 Update 1
# redhat-release-4AS-3 -> Redhat Enterprise Linux AS 4 Update 2
# redhat-release-4AS-4.1 -> Redhat Enterprise Linux AS 4 Update 3
# redhat-release-4AS-5.5 -> Redhat Enterprise Linux AS 4 Update 4

# man update-alternatives

# Configure参数解释说明: autoconf: 16 Running configure Scripts

# Linux下分割合并文: man split/cat
# 生成目录树结构: man tree

# 重命名文件
rename

# 切换用户并执行一条命令
su - oracle -c command
# 切换用户并执行一个shell文件
su - oracle -s /bin/bash shell.sh

常见Linux工具

系统信息查看

# 查看当前操作系统发行版信息
/etc/issue

# 查看内核和操作系统信息
uname -a

ls/eza

ls -t `find . -name "*.log"` #列出最近修改的文件
ls --full-timne myfile # 查看文件的完整时间信息

eza is a modern alternative for the venerable file-listing command-line program ls that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colours to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git. And it’s small, fast, and just one single binary.

cd/zoxide/pushd/popd

pushd ~/Code/java
popd

文件内容查看

cat file.txt

# 查看文件的前几行
head -n 1 file.txt

# 查看文件的后几行
tail -n 1 file.txt
# 实时查看文件内容变化
tail -f file.txt

# tailf 命令与 tail -f 类似,但它不会检查文件是否被截断或重新创建,因此在某些情况下可能更适合监视日志文件的变化。
tailf file.txt

# 检测文件类型
file /bin/bash

top

top # 实时显示进程状态用户
top -U jiangxin11 #仅查看特定用户
# 使用E切换内存使用总和的单位(KB、MB、GB、TB、PB)
# 使用e切换每个应用占用内存的单位(KB、MB、GB、TB、PB)

ps

ps -u jiangxin11 # 查看某个用户的进程,使用$USER可以代替当前用户
ps -ef # -e 显示所有进程;-f 显示完整格式
ps -ef -w # -w 显示宽格式, -ww 显示更宽格式,防止被截断
ps -ef | grep 4736 # 查看4736端口是否被占用
ps -p <PID> -o comm,args # comm 显示进程名,args 显示完整的启动命令(含参数)
ps -p <PID> -o stat # 显示某个进程的状态
ps -aux

find

find . –name "*.log" | xargs grep error # 在当前目录的所有日志文件中查找关键词"error"
find . -type f | wc -l #查询当前目录文件数目
find "/etc/" -name "*" -type f | xargs wc -l | awk '{print $2" "$1"lines"}' # 打印某一文件夹下的所有文件名及其行数
find -maxdepth 1 -name "make*.log" -not -name "make_2026-02-04_19-23-30.log" -exec mv {} ~/log_tmp/ \; # 逐个移动
find -maxdepth 1 -name "make*.log" -not -name "make_2026-02-04_19-23-30.log" -exec mv -t ~/log_tmp/ {} + # 批量移动
find -maxdepth 1 -name "make*.log" -not -name "make_2026-02-04_19-23-30.log" | xargs -I {} mv {} ~/log_tmp/ # 如果不适用-I,xargs 会把所有输入追加到命令末尾,变成mv ~/log_tmp/ ./xxx.log ./yyy.log ./zzz.log这样

fd

fd is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to find.

tar

tar的相关参数 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出

*.gz 用 gzip -d或者gunzip 解压 *.bz2 用 bzip2 -d或者用bunzip2 解压 *.Z 用 uncompress 解压

下面的参数-f是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

tar -cf all.tar *.jpg # 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -rf all.tar *.gif # 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif # 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -tf all.tar # 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -xf all.tar # 这条命令是解出all.tar包中所有文件,-x是解开的意思

tar –cvf jpg.tar *.jpg # 将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg   # 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar -czf jpg.tgz *.jpg # 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tgz
tar –cjf jpg.tar.bz2 *.jpg # 将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg   # 将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z

tar –xvf file.tar # 解压 tar包
tar -xzvf file.tar.gz # 解压tar.gz
tar -xjvf file.tar.bz2   # 解压 tar.bz2
tar –xZvf file.tar.Z   # 解压tar.Z

rar/unrar

rar a jpg.rar *.jpg # rar格式的压缩,需要先下载rar for linux
unrar e file.rar # 解压rar

zip/unzip

zip jpg.zip *.jpg # zip格式的压缩,需要先下载zip for linux
zip -ry dir.zip dir # 将目录dir下的所有文件打包成dir.zip,-r参数表示递归打包,-y参数表示保留符号链接
unzip file.zip # 解压zip

GNU Binutils

objdump

objdump 是一个用于显示二进制文件信息的工具,可以显示可执行文件、目标文件、共享库等的内容,包括反汇编代码、符号表、节区信息等。

objdump -t xxx.so # 查看xxx.so的符号表

gprof

gprof 是一个性能分析工具,用于分析程序的运行时间和函数调用关系。它可以帮助开发者找出程序中的性能瓶颈,并提供优化建议。

gprof myprogram gmon.out > analysis.txt # 生成性能分析报告

strings

strings 是一个用于从二进制文件中提取可打印字符串的工具。它可以帮助开发者分析二进制文件的内容,寻找潜在的敏感信息、调试信息等。

strings xxx.so # 从xxx.so中提取可打印字符串

c++filt

c++filt 是一个用于解码 C++ 符号名称的工具。C++ 编译器在生成可执行文件或库时,通常会对函数和变量的名称进行“mangling”(混淆),以支持函数重载和命名空间等特性。c++filt 可以将这些混淆后的符号名称还原为人类可读的形式。

c++filt _Z3fooi # 输出 foo(int)

readelf

readelf 是一个显示ELF格式文件信息的工具,ELF是Executable and Linkable Format的缩写,是Linux系统下可执行文件、目标代码、共享库和核心转储的标准文件格式。

readelf -d xxx.so # 查看xxx.so的动态段信息
readelf -d xxx.so | grep NEEDED # 查看xxx.so依赖的库

addrline/llvm-addr2line

addr2line 是一个用于将程序中的地址转换为源代码文件名和行号的工具。llvm-addr2line 是 LLVM 提供的 addr2line 的实现。

# Android本地构建的时候会生成符号表
$ llvm-addr2line -e out/target/product/missi/symbols/system_ext/lib64/libmisurfaceflinger.so -f 0x5535c

ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8nn210000EOS5
prebuilts/clang/host/linux-x86/clang-r563880/include/c++/v1/string:1057

tmux

tmux 是一个终端复用器:它允许创建、访问和控制多个终端,所有这些都可以在单个屏幕上进行。tmux 可以从屏幕中分离出来,在后台继续运行,稍后可以重新连接。

screen

会话恢复,多窗口,会话共享,与tmux功能类似,兼容一些老系统,新系统上用tmux的比较多。

Byobu

Byobu 是一个功能强大的开源文本终端窗口管理器,它基于 tmux 或 GNU Screen 提供了一个增强的用户体验。

script

记录所有终端活动,包括输入和输出(所以记录的日志中包含很多特殊字符,不方便直接查看),可以通过scriptreplay工具进行回放。

tee

从标准输入中获取数据然后同时写到标准输出和文件。

xxx 2>&1 | tee xxx_$(date "+%Y-%m-%d_%H-%M-%S").log

parallel

sudo apt install parallel

## 通过源码安装
curl -s -L https://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel > ~/.bin/parallel
chmod +x ~/.bin/parallel
export PATH="$HOME/.bin:$PATH"
source ~/.bashrc

sshfs

# 在linux下使用sshfs挂载另一台服务器的某个目录
sshfs ${USER}@${HOST}:${DIR} ./remote
umount remote

挂载之后可以通过wsl进行访问,但是Powershell或者Windows资源管理器无法访问,报错:

\\wsl$\Ubuntu\home\jiangxin\remote 无法访问。你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限。

试图访问无效的地址。

这是因为默认情况下目录只允许挂载目录的用户访问,这里就是wsl用户本身。可以通过如下方式解决:

  1. 修改/etc/fuse.conf,将user_allow_other取消注释
  2. 取消挂载后重新挂载,并增加-o allow_other参数: sshfs -o allow_other ${USER}@${HOST}:${DIR} ./remote

磁盘管理工具

df -h       # 查看各分区使用情况
df -i       # 查看inode使用

du -sh <目录名>        # 查看指定目录的大小
du --max-depth=1 dir   # 查看指定目录指定深度的大小
du -h --max-depth=1 dir   # 查看指定目录指定深度的大小,并且以人类可读的方式显示

# fdisk、cfdisk、sfdisk都是Linux下的磁盘分区工具,功能类似但使用方式不同,fdisk和sfdisk是基于命令行的,而cfdisk是基于文本界面的交互式工具。
fdisk -l               # 查看所有分区
cfdisk -Ps # 查看磁盘分区的用法   cfdisk   -Ps 磁盘设备名 只有一个硬盘也可以用 cfdisk -Ps
cfdisk -Ps /dev/sda
sfdisk -l

# 将/dev/vdb1格式化为ext4文件系统类型
mkfs.ext4 /dev/vdb1

# 挂载分区到某个目录
mount /dev/vdb1 /data
# 卸载分区
umount /dev/vdb1 /data

# 查看挂接的分区状态
mount | column -t

# 设置自动挂载,修改/etc/fstab,需要执行`mount -a`命令使修改生效
# 磁盘分区 挂载目录 文件系统类型 挂载选项 转储频率 检查顺序
# 例如:/dev/vdb1 /data ext4 defaults  0  0

# erofs是一种只读文件系统,适用于嵌入式系统和容器等场景
# https://erofs.docs.kernel.org/en/latest/index.html

quota

# 查看当前用户自己的配额
quota -uvs

# 查看指定用户的配额
sudo quota -uvs username

# 查看所有用户的配额摘要
repquota -a

dd

# 创建一个 10MB 大小的空文件(填充零字节)
dd if=/dev/zero of=/data/local/tmp/test.txt bs=1M count=10

# 把/dev/cdrom目录制作为镜像,名字为/root/name.iso
dd if=/dev/cdrom of=/root/name.iso

mkisofs

# 将iso_src目录下的文件打包成一个iso文件
mkisofs -r -o myiso.iso ~/iso_src

网络相关工具

libavif

sudo apt install libavif-bin
avifenc -q 75 input.[jpg|png|y4m] output.avif
avifdec output.avif decoded.png

imagemagick

sudo apt install imagemagick
convert input.jpg output.png

ffmpeg

sudo apt install ffmpeg
ffmpeg -i input.mp4 output.avi

Shell 快捷键

    <Ctrl k>:删除从光标到行尾的部分
    <Ctrl u>:删除从光标到行首的部分
    <Alt d>:删除从光标到当前单词结尾的部分
    <Ctrl w>:删除从光标到当前单词开头的部分
    <Ctrl a>:将光标移到行首
    <Ctrl e>:将光标移到行尾
    <Alt a>:将光标移到当前单词头部
    <Alt e>:将光标移到当前单词尾部
    <Ctrl y>:插入最近删除的单词
    <Ctrl a>:跳到行首
    <Ctrl b>:左移一个字符
    <Ctrl c>:终止终端进程
    <Ctrl d>:从光标处向右删除
    <Ctrl e>:跳到行尾
    <Ctrl f>:右移一个字符
    <Ctrl k>:从光标处删除到行尾
    <Ctrl l>:清屏,类似 clear 命令
    <Ctrl r>:查找历史命令
    <Ctrl z>:Suspend/ Stop the command  、 暂停命令的执行
    <Ctrl h>:删除当前字符
    <Ctrl w>:删除最后输入的单词
    <!$>:重复前一个命令最后的参数。
    <SHIFT PageUp/PageDown>:终端上下翻页

系统快捷键

    <Alt+Tab>:切换窗口(win)
    <Win+Tab>:若开3D效果了切换
    <Ctrl+Alt+Backspace>:相当于强制注销
    <Ctrl+Alt+Del>:调出关机菜单
    <Ctrl+Alt+l>:锁定桌面
    <Ctrl+Alt+d>:最小化gnome所有窗口
    <Ctrl+Alt+f2>:linux终端用户(Alt + f7返回xwindows,Alt+ <- 或-> 进行终端切换)
    <Ctrl+Alt+ <- 或-> >:切换桌面
    <Alt + F1>:打开主菜单
    <Alt + F2运行>:(重启x窗口:r 重启:reboot 关机:hAlt)
    <Ctrl + Alt + d>:显示桌面
    <Alt + F9>:最小化当前窗口
    <Alt + F10>:最大化当前窗口
    <Alt + F4>:关闭当前窗口
    Print Screen截取全屏
    Alt + Print Screen截取窗口
    <Ctrl+Alt+上下箭头>:切换工作区(Fedora)
    <Alt+F10>:调整窗口的默认大小(Fedora)

Linux性能分析与调优

修改文件打开方式

  • 全局配置:/usr/share/applications/defaults.list
  • 用户配置:~/.local/share/applications/mimeapps.list

例如配置iso类型文件的打开方式一般默认是archive manager,如果想修改为nero,可以添加:application/x-cd-image=nerolinux.desktop;,然后图形界面下双击iso文件就使用nero打开了。

Linux重装系统指南(Ubuntu)

  • 卸载firefox/youker-assistant/amazon
  • 重新启动计算机
  • 安装GLX-Dock并进行配置
  • 安装快盘,进行配快盘和ubuntu one
  • 安装okular/meld
  • 卸载Rhythmbox/empathy/account-plugin-*
  • 安装font-manager

Linux重装系统指南(Fedora)

  • 安装gnome-tweak-tool设置工具
  • sudo yum install gnome-tweak-tool
  • 安装后在左上角【活动】里可以找到【优化工具】图标打开进行设置
  • 安装最快软件源插件: sudo yum install yum-plugin-fastestmirror
  • 安装下载加速插件: sudo yum install yum-presto -y
  • 安装鼠标右键【在终端中打开】: sudo yum install nautilus-open-terminal
  • 配置RPM Fusion
  • 安装相关软件:gcc/Yumex/Compiz(ccsm)/Cariodock
  • 设置自动挂载文件系统fstab

ubuntu更新问题

更新管理器在检查软件包的时候总是有如下问题

无法下载 cdrom://Ubuntu 8.10 _Intrepid Ibex_ - Release i386 (20081029.5)/dists/intrepid/main/binary-i386/Packages  请使用 apt-cdrom,通过它就可以让 APT 能识别该光盘。apt-get upgdate 不能被用来加入新的光盘。
无法下载 cdrom://Ubuntu 8.10 _Intrepid Ibex_ - Release i386 (20081029.5)/dists/intrepid/restricted/binary-i386/Packages  请使用 apt-cdrom,通过它就可以让 APT 能识别该光盘。apt-get upgdate 不能被用来加入新的光盘。
无法下载 http://cn.archive.ubuntu.com/ubuntu/dists/intrepid-backports/main/binary-i386/Packages.bz2  Hash 校验和不符
有一些索引文件不能下载,它们可能被忽略了,也可能转而使用了旧的索引文件。

解决方法: 把 /etc/apt/sources.list里面有cdrom的几行删掉,或者利用软件中心或新立德包管理器把软件源终中的cdrom去掉。

主文件夹里的中文文件夹改成英文文件夹

export LANG=en_US
xdg-user-dirs-gtk-update

# 这个时候会弹出一个配置界面,提示是否将中文目录切换为英文目录。
# 系统会删除没有内容的中文目录,而有内容的目录会保持。并创建8个相应的英文目录: 
# Desktop、Download、Templates、Public、Documents、Music、Pictures、Videos
# 再恢复LANG这个环境变量
export LANG=zh_CN.UTF-8

local设置不准确(适用于WSL2)

jiang@jiang:~$ locale -a
C
C.utf8
POSIX

sudo apt install -y language-pack-zh-hans

jiang@jiang:~$ locale -a
C
C.utf8
POSIX
zh_CN.utf8
zh_SG.utf8

jiang@jiang:~$ sudo update-locale LANG=zh_CN.UTF8

由于缺少字体而显示乱码(适用于WSL2)

sudo apt install -y fontconfig fonts-noto-cjk fonts-noto-color-emoji
fc-cache -fv

重装Ubuntu如何保留/home分区中的数据

windows系统可以在重装时只格式化C盘,从而保留其他分区的数据。 Ubuntu系统也可以,只要在安装系统时分出一个/home分区。你可以把Ubuntu的“/”分区看为windows的C盘,重装Ubuntu时只格式化“/”分区,不格式化“/home”,这样就可以保留“/home”中的数据

查看/修改主机名

# 查看主机名
hostname

# 临时修改主机名,重启后失效
hostname newHostname

# 永久修改主机名,需要修改/etc/hostname文件,`sudo reboot`后生效

如何启用 Ubuntu 中的 root 帐号

与其他Linux发行版不同,Ubuntu初次使用时无法以root身份登录,因为安装时未设置root密码,也未启用root账户。若需以root身份运行命令,可用sudo命令。sudo允许普通用户临时获得特定的超级用户权限,无需知道root密码,便于安全管理。su命令用于切换用户,root切换到其他用户不需密码,普通用户切换则需验证。sudo授予用户有限的临时超级权限,超时后失效;su则获得持续的超级权限。

好,下面讲一下具体的设置方法:

1.为root设置一个root密码: $ sudo passwd root

之后会提示要输入root用户的密码,连续输入root密码

2.使用: $ su,并按照提示输入root密码,就可以在终端中切换成超级管理员用户身份了!

Linux用户添加sudoer

使用sudo可以在以非root用户登录时临时获得root权限,并执行需要的命令。可以使用sudo的用户可以叫做sudoer。

添加sudoer的方法(假设您已经安装sudo): 执行

visudo or sudoedit

提示: 有些发行版的sudo提供了sudoedit,有的则提供了visudo,功能上基本是一样的。你也可以使用其他编辑器如vi进行编辑/etc/sudoers,但由于文件是只读的,请强制保存(如w!)或去除只读属性再保存。查找

root ALL=(ALL) ALL

在下面加入

%adm ALL=(ALL) ALL

如果sudo时不想输入密码,可以把上句改成:

%adm ALL=(ALL) NOPASSWD: ALL

保存文件,然后执行

gpasswd -a 用户名 adm

然后这个用户就可以用sudo了。

linux无root权限安装软件

在有些公司是不会给开发人员root权限的,但是开发人员有时候也需要装一些软件。没有root权限是否可以成功安装软件呢?答案是yes。本文以安装nginx为例说明下如何操作。

没有root权限时往往也就没有权限操作一些系统目录,例如bin,usr等。所以在安装时需要配置将安装文件装在当前用户有权限操作的目录。

安装nginx首先要下载安装文件,具体的安装步骤如下:

    tar-zvxf nginx-1.2.3.tar.gz # 解压缩文件:
    cd ~
    mkdir nginx
    cd xxx
    ./configure—prefix=/xxx/yy/nginx
    make
    make install

正常情况下这样就成功安装了。和有root权限安装的区别在于./configure 需要指定安装文件的目录

linux系统下无法访问电脑硬盘

    Error mounting /dev/sda6 at /media/qiaokaiming/20F47472F4744BD2: Command-line 'mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000,dmask=0077,fmask=0177" "/dev/sda6" "/media/qiaokaiming/20F47472F4744BD2"' exited with non-zero exit status 14: The disk contains an unclean file system (0, 0).
    Metadata kept in windows cache, refused to mount.
    Failed to mount '/dev/sda6': Operation not permitted
    The NTFS partition is in an unsafe state. Please resume and shutdown
    windows fully (no hibernation or fast restarting), or mount the volume
    read-only with the 'ro' mount option.

那个提示里有: Please resume and shutdown windows fully (no hibernation or fast restarting)。进win8把”快速启动“关掉就好了。控制面板》所有控制面板选项》电源选项》系统设置》关闭“启用快速启动”

/etc/profile和/etc/environment(Ubuntu)

先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。

原因是系统是先执行/etc/environment,后执行/etc/profile。/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。登陆系统时shell读取的顺序应该是 :

/etc/enviroment->/etc/profile–>$HOME/.profile–>$HOME/.env(如果存在)

如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了。修改environment 之后,执行 source /etc/environment 可以立即生效。

如何在Ubuntu中屏蔽一个网站

打开/etc/hosts文件,添加下面这行

127.0.0.1 domain.com

更换domain.com为你要屏蔽的网站,你完成了编辑处理后,保存该文件并退出。

Windows/Linux文本文件格式转换

DOS/Windows和Linux/Unix的文本文件换行格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个LF(换行)。

DOS/Windows文本文件格式转换成Linux/Unix文本文件格式: sed -e 's/.$//' mydos.txt > myunix.txt

说明: 替代正则表达式与一行的最末字符匹配,而该字符恰好就是回车。我们用空字符替换它,从而将其从输出中彻底删除。

把Linux/Unix 文本文件格式转换成 DOS/Windows文本文件格式: sed -e 's/$/\r/' myunix.txt > mydos.txt

说明: ‘$’ 正则表达式将与行的末尾匹配,而 ‘\r’ 告诉 sed 在其之前插入一个回车。在换行之前插入回车,每一行就以 CR/LF 结束。

另外还有个方法,使用命令:

    unix2dos filename
    dos2unix filename

获取某程序的完整路径名

当我们在Linux下用ps aux 看到有如下一个进程时:

root     19463  0.0  0.0   1508   272 pts/0    S    16:43   0:00 ./server-a

如何获得程序server-a所在的完整路径呢?从上面ps 的输出中可以看出19463是server-a的PID号,那么运行如下命令: cat /proc/19463/environ ,输出如下:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesGNOME_KEYRING_PID=2269USER=jiangxinLANGUAGE=zh_CN:XDG_SEAT=seat0TEXTDOMAIN=im-configCOMPIZ_CONFIG_PROFILE=ubuntuHOME=/home/jiangxinQT4_IM_MODULE=fcitxDESKTOP_SESSION=ubuntuXDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0GTK_MODULES=overlay-scrollbar:unity-gtk-moduleGNOME_KEYRING_CONTROL=/run/user/1000/keyring-wrFl7VQT_QPA_PLATFORMTHEME=appmenu-qt5MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.pathIM_CONFIG_PHASE=1SESSIONTYPE=gnome-sessionLOGNAME=jiangxinGTK_IM_MODULE=fcitxDEFAULTS_PATH=/usr/share/gconf/ubuntu.default.pathXDG_SESSION_ID=c3GDM_LANG=zh_CNXDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0XDG_RUNTIME_DIR=/run/user/1000DISPLAY=:0XDG_CURRENT_DESKTOP=UnityLANG=zh_CN.UTF-8XAUTHORITY=/home/jiangxin/.XauthorityXMODIFIERS=@im=fcitxXDG_GREETER_DATA_DIR=/var/lib/lightdm-data/jiangxinSHELL=/bin/bashGDMSESSION=ubuntuTEXTDOMAINDIR=/usr/share/locale/XDG_VTNR=7QT_IM_MODULE=ximPWD=/home/jiangxinXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdgXDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/CLUTTER_IM_MODULE=ximSELINUX_INIT=YESUBUNTU_MENUPROXY=1DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BqwNaGt8wESSH_AUTH_SOCK=/run/user/1000/keyring-wrFl7V/sshSSH_AGENT_PID=2383SSH_AGENT_LAUNCHER=upstartGNOME_DESKTOP_SESSION_ID=this-is-deprecatedJOB=gnome-sessionINSTANCE=UnityUPSTART_EVENTS=started startingUPSTART_JOB=unity-settings-daemonUPSTART_INSTANCE=UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/2299GPG_AGENT_INFO=/run/user/1000/keyring-wrFl7V/gpg:0:1

注意输出中的: PWD=/data1/1230。由此可以判断出程序server-a所在完成路径为: /data1/1230/server-a。来,验证一下吧:

bash-3.2# ls -l /data1/1230/server-a
-rwxr-xr-x 1 root root 5842 Feb 25 16:42 /data1/1230/server-a

/proc/进程号目录下的文件说明

  • cwd符号链接的就是进程的运行目录;
  • exe符号连接就是执行程序的绝对路径;
  • cmdline就是程序运行时输入的命令行命令;
  • cpu记录了进程可能运行在其上的cpu;显示虚拟的cpu信息
  • environ记录了进程运行时的环境变量
  • fd目录下是进程打开或使用的文件的符号连接

Linux中C语言如何清空标准输入流

今天在Linux程序设计的时候需要清空标准输入缓冲区,于是使用了如下Windows程序设计中的方法: fflush(stdin),这个fflush()函数根本不是标准C中的函数,只是标准C的扩展,所以在Linux中使用根本不行;在网上搜索了下,发现有网友建议使用rewind(stdin);这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数,操作的是FILE型流,在Windows程序设计中是可以清空标准输入缓冲区的,但是在Linux中不行。

注: 上述内容有几处错误,详见《The Standart Library》

Linux上可以通过getchar()函数读完标准缓冲区中的剩余字符来清空标准缓冲区:

char ch;
while((ch=getchar())!='/n'&&ch!=EOF);

怎样给变量传递执行命令结果

在linux shell脚本里,设置一个变量,但是变量是一个命令,需要将执行结果放到变量里,并输出,例如: ip=’ifconfig eth0’ echo $ip,怎样可以叫页面显示的是eth0的网络状况?就是ifconfig eth0的结果?

ip=`ifconfig eth0`
echo $ip

使用反引号可以把一个命令的输出插到另一个命令中去。相同功能的写法还有$(),功能同反引号效果是一样的。不过某些unix系统不支持$()这种写法。但是反引号在任何unix或linux系统下都可以使用。

debian hosts文件中的 127.0.1.1 主机地址

有时候/etc/hosts文件会看到127.0.0.1这个地址,即本地接口的回路/回环地址。但有时候/etc/hosts文件中还会出现127.0.1.1,这也是个本地回路/回环地址。出现这个地址的原因是因为有些应用程序需要规范的全限定域名FQDN(Fully Qualified Domain Name),FQDN不只需要主机名还需要主机域名,其表达形式为hostname.domainname。如果你的主机有一个静态IP地址,则FQDN名字解析到这个静态地址,否则解析到127.0.1.1这个本地回路地址。所以一般情况下不会看到127.0.1.1这个地址。127.0.0.1一般只对应hostname,这也是二者的主要区别。

127.0.0.1 hostname
127.0.1.1 hostname.domainname

当然并一定非要用127.0.1.1这个IP,RFC规定的127.0.0.0/8这个IP段内的任意IP都可以,只要没有冲突,debian选择了127.0.1.1

hostname # 查看主机名
hostname --fqdn # 查看FQDN名字

解决ubuntu终端颜色消失问题

ubuntukylin-13.10登陆用户使用ls命令,终端显示的所有输出都是黑底白字,没有彩色,su - root后使用ls命令,输出为彩色。分别在登陆用户和root用户下执行echo $PS1 输出有差异。后发现登陆用户目录下没有.bashrc文件。复制默认.bashrc文件后解决: cp /etc/skel/.bashrc ~/

YUM相关问题解决

  • yum history [undo redo info …]: yum的子命令,显示你yum的历史记录,并且可以撤销指定的记录(undo),重做指定记录(redo)等等,更多的功能看man yum
  • yum-plugin-remove-with-leaves: 卸载软件包时把因此产生的叶子一起卸载掉,用的时候别加-y选项,看清楚了再确认,有些非常大的依赖树会把主要的系统组件卸载掉,具体用法安装完该插件以后看帮助:yum –help,这个yum插件应该就是最贴近你需求的,不过记住,慎用,如果能从yum history里查到记录的话,还是用yum history undo来操作比较安全。
  • yum-plugin-show-leaves: 执行安装/卸载以后,显示此次操作所产生的叶子,自动运行,无需要操作。
  • rpmreaper: 基于ncurses库的程序,通过基于文本的gui界面显示系统中的rpm依赖树,提供各种操作,具体的看man。
  • yum update: 升级系统

There are unfinished transactions remaining

使用yum安装东西报错:There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.。可能之前有强制结束yum过,解决办法如如下:

yum -y install yum-utils # 安装 yum-complete-transaction(这是一个能发现未完成或被中断的yum事务的程序)
yum clean all # 清除yum缓存
yum-complete-transaction --cleanup-only # 运行 yum-complete-transaction,清理未完成事务

注: yum会把下载的软件包和header存储在cache中,而不会自动删除.可用yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全清.

another app is currently holding the yum lock;waiting for it to exit

yum提示如标题,可能是系统自动升级正在运行,yum在锁定状态中。可以强制关掉yum进程: rm -f /var/run/yum.pid

设置开机直接进入命令行

16.04之前的Ubuntu版本,需编辑文件/etc/default/grub,把 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”改成GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash text”,然后运行sudo update-grub。在控制台下想进入x-window,可以在root用户下输入: gdm或者startx

16.04及之后的Ubuntu版本,需要执行如下命令设置开机启动直接进入命令行或者恢复默认图形界面启动

sudo systemctl disable lightdm.service
sudo ln -s /lib/systemd/system/lightdm.service /etc/systemd/system/display-manager.service #恢复默认图形界面启动

CentOS/Redhat可以参考如下地址:http://blog.csdn.net/zoubf/article/details/47607039

Comments