Làm cách nào để thay thế các tiện ích Mac OS X bằng các tiện ích lõi GNU?


181

Tôi thấy có một số khác biệt giữa lệnh tiện ích tôi đã sử dụng trên mac OSX và linux. Tôi muốn làm cho kinh nghiệm của tôi thống nhất.

Làm cách nào tôi có thể thay thế tất cả các tiện ích mac của mình bằng các tiện ích GNU?



2
Dưới đây là hướng dẫn toporms.net/blog/2013/04/14/ khăn
Dennis

16
Tôi đồng cảm với sự thất vọng của bạn nhưng tôi tin rằng, về lâu dài, nó sẽ gây ra sự thất vọng lớn hơn nếu chúng được thay thế - Sau khi tìm cách làm điều tương tự tôi khuyên bạn nên sử dụng homebrewnhư được đề cập dưới đây, và sau đó chỉ học cách sử dụng các tiện ích với a g( gsed, greadlinkv.v.) thay vì thay thế các tiện ích hệ thống.
cwd


3
Tôi không đồng ý với @cwd, việc sử dụng --with-default-nameschỉ ảnh hưởng đến người dùng cục bộ. Nó có thể là một vấn đề với các tiện ích đầu cuối theo định hướng mac, nhưng nếu bạn sử dụng homebrew cho mọi thứ, bạn cũng có thể giả vờ rằng bạn đang sử dụng linux. Kết hợp với iterm2, nó hoạt động rất tốt đối với tôi, về cơ bản tôi có thể giả vờ tôi ở nhà với các hộp linux của mình.
Ray Foss

Câu trả lời:


210

Điều này thêm liên kết tượng trưng cho các tiện ích GNU với tiền tố g vào /usr/local/bin/:

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep

Xem brew search gnucho các gói khác. Nếu bạn muốn sử dụng các lệnh không có tiền tố ag, hãy thêm ví dụ /usr/local/opt/coreutils/libexec/gnubintrước các thư mục khác trên PATH.

$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20 (208 files, 9.4M)
/usr/local/Cellar/coreutils/8.21 (210 files, 9.6M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==> Caveats
All commands have been installed with the prefix 'g'.

If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:

    PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:

    MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

6
FWIW, tôi có Công thức Homebrew hoạt động như một gói meta cho tất cả các tiện ích GNU tuyệt vời đó: xem shiny-and-gnu.rbtrong github.com/al-the-x/homebrew-mine
AL the X

1
PATH đầu tiên hoạt động, nhưng MANPATH thất bại, tại sao? Có phải vì tôi đang sử dụng OSX10.10? Tôi đã lặp lại $ MANPATH và tôi đã nhận được /usr/local/opt/coreutils/libexec/gnuman:, dường như MANPATH ban đầu không bao gồm. Sau khi nhận xét conf MANPATH trong bashrc của tôi, tôi không nhận được gì ecoh $MANPATH. Và tất nhiên, nếu tôi sử dụng man pwd, tôi đã nhận được hướng dẫn sử dụng BSD. Làm thế nào để khắc phục điều này?
Zen

2
Đối với findutils, bạn cần thêm PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"mà không được nêu trong đầu ra giao diện điều khiển cài đặt.
Sridhar Sarnobat

1
Ngoài ra, để có được trang người đàn ông phù hợp findutils, hãy thêm trang này vào$MANPATH /usr/local/opt/findutils/share/man
Christian Long

1
@Zen: cách đúng để bắt đầu MANPATHđể giữ giá trị hệ thống mặc định là : MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". Chìa khóa là trong cấu trúc ${var-default_value}.
dan

50

Bên cạnh đó brew install coreutils, bạn cũng có thể cần phải cài đặt một số gói khác, chẳng hạn như gnu-sed, grep:

brew install findutils
brew install gnu-indent
brew install gnu-sed
brew install gnutls
brew install grep
brew install gnu-tar
brew install gawk

Lưu ý rằng --with-default-namestùy chọn được xóa kể từ tháng 1 năm 2019, vì vậy mỗi nhị phân phải được thêm vào đường dẫn nếu chúng được sử dụng mà không có gtiền tố.

Tài liệu tham khảo cũ (khi --with-default-namescó sẵn): http://www.toporms.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/


Lưu ý rằng brew install gawk(không giống như tất cả những người khác) sẽ thay thế awk(thông qua một liên kết tượng trưng /usr/local/bin/awk). Nếu bạn muốn giữ bản gốc /usr/bin/awk, chỉ cầnrm /usr/local/bin/awk
wvducky

17

Tôi không chắc chắn rằng tôi sẽ khuyên bạn nên thay thế chúng; tuy nhiên, bạn có thể cài đặt chúng vào một đường dẫn khác và sử dụng chúng theo cách đó. Nhìn chung, nếu bạn đến từ Linux và muốn truy cập vào các tiện ích * nix "chung" hơn và một hệ thống tương tự apt, thì tôi khuyên bạn nên tìm hiểu về Macports: http://www.macports.org

Ví dụ, nó cho phép sử dụng GCC "chung" mới nhất, trái ngược với / ngoài GCC bao gồm của Apple, như một ví dụ.


3
Chẳng hạn, tar và zip từ Mac OS X biết về siêu dữ liệu mà các phiên bản GNU không có.
lhf

1
Có những ứng dụng do Apple cung cấp, chỉ là GUI cho một số công cụ dòng lệnh và nếu bạn thay thế chúng, các ứng dụng có thể bắt đầu hoạt động kỳ lạ, vì vậy hãy thêm vào, không thay thế.
Ɱark

Đúng; một cái gì đó như Macports thêm chúng, nó không thay thế chúng.
Jonathan

Nếu bạn muốn sử dụng các tiện ích GNU theo mặc định với MacPorts, bạn có thể thêm /opt/local/libexec/gnubinvào phía trước PATHbiến môi trường của mình .
markshep

8

Tôi đã viết một kịch bản để làm chính xác điều này! Kịch bản có thể được xem tại đây (hoặc bên dưới). Tuy nhiên, tôi không thể luôn đảm bảo bài đăng này sẽ phản ánh phiên bản mới nhất của tập lệnh được liên kết trước đó.

Khi chạy tập lệnh, Homebrew sẽ được cài đặt (nếu chưa có), tất cả các tiện ích GNU liên quan sẽ được cài đặt (nếu chưa có) và PATHbiến sẽ được xây dựng từ các tiện ích đã cài đặt.

#!/bin/bash

# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
  gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
  m4 make nano file-formula git less openssh python rsync svn unzip vim \
  --default-names --with-default-names --with-gettext --override-system-vi \
  --override-system-vim --custom-system-icons

# Empty the .bash_path file that holds GNU paths
> ~/.bash_path

# Build PATH variable script in ~/.bash_path
for i in /usr/local/Cellar/*/*/bin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnuman; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done

# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`
if [ "$PATCH" == "" ]; then
  # Add Ubuntu-style PS1 to .bash_profile
  cat <<EOF > ~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
  # Add .bash_path to .bash_profile
  echo "source ~/.bash_path" >> ~/.bash_profile
fi

1
Không phải bạn chỉ thích downvote mà không có ý kiến ​​phê bình? Cảm ơn bạn cho kịch bản.
Justin Force

@JustinForce Không có vấn đề! Cảm ơn bạn đã phản hồi.
Clay Freeman

2
-1. Kịch bản này làm quá nhiều phép thuật. Tất cả các .bash_path-mangling không thực sự cần thiết nếu bạn làm theo câu trả lời của @ user495470 và @ xuhdev. Và thay đổi PS1 hoàn toàn nằm ngoài phạm vi của câu hỏi này.
Greg Dubicki

1
Thật không may @GregDubicki, đường dẫn bash "xáo trộn" là bắt buộc đối với một số gói này. Bạn có thể tự kiểm tra điều này. Liên quan đến việc thay đổi PS1: tập lệnh này là dành cho sử dụng cá nhân. Bất cứ ai muốn hoàn nguyên nó có thể làm điều đó rất dễ dàng.
Clay Freeman

5

Tôi đã viết một kịch bản chuyển đổi rõ ràng macOS CLI thành trải nghiệm GNU / Linux CLI mới bằng cách

  • cài đặt các chương trình GNU bị thiếu
  • cập nhật các chương trình GNU lỗi thời
  • thay thế các chương trình BSD được cài đặt sẵn bằng triển khai GNU ưa thích của họ
  • cài đặt các chương trình khác phổ biến trong các bản phân phối GNU / Linux phổ biến

https://github.com/fabiomaia/linuxify

git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install

Nó cũng cho phép bạn dễ dàng hoàn tác mọi thứ.

./linuxify uninstall

1
Cố gắng chạy lệnh đầu tiên ( git clone git@github.com.:fabiomaia/linuxify.git) Trước tiên, nó nói "Tính xác thực của máy chủ 'github.com' không thể được thiết lập, v.v.". Tôi gõ yesvà nhấn Enter. Sau đó, nó nói git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.những gì sai?
izogfif

@izogfif Thay vào đó, hãy thử nhân bản bằng HTTPSgit clone https://github.com/fabiomaia/linuxify.git
fabiomaia

1
Vâng, điều đó đã làm việc. Vui lòng cập nhật câu trả lời của bạn (đồng thời, loại bỏ những đô la đó khi bắt đầu - chúng được sao chép khi chọn văn bản và sao chép-dán vào bảng điều khiển).
izogfif

@izogfif Cảm ơn bạn đã góp ý.
fabiomaia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.